/* * Trace2DLtdSorting, a TreeSet based implementation of a ITrace2D, which * has a maximum amount of TracePoints (fifo) and performs an insertion sort * of the TracePoint2D- instances. * Copyright (c) 2004 - 2011 Achim Westermann, Achim.Westermann@gmx.de * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * If you modify or optimize the code in a useful way please let me know. * Achim.Westermann@gmx.de */ package info.monitorenter.gui.chart.traces; import info.monitorenter.gui.chart.ITracePoint2D; /** * Additional to the <code>Trace2DLtdReplacing</code> all tracepoints will be * sorted by their x- value. * <p> * Performance is slower compared to the class named above. Internally a * <code>TreeSet </code> is used (instead of <code>RingBufferArrayFast</code>) * to keep the comparable <code>TracePoint2D</code>- instances sorted. * Internally all tracepoints are <code>TracePoint2D</code> -instances. * <p> * * @author <a href='mailto:Achim.Westermann@gmx.de'>Achim Westermann </a> * * @version $Revision: 1.12 $ */ public class Trace2DLtdSorted extends Trace2DSorted { /** Generated <code>serialVersionUID</code>. */ private static final long serialVersionUID = 427790610937808181L; /** The maximum amount of points that will be shown. */ protected int m_maxsize; /** * Constructs an instance with a default buffer size of 100. * <p> */ public Trace2DLtdSorted() { this(100); } /** * Constructs an instance with a buffer size of maxsize. * * @param maxsize * the maximum amount of points to show. */ public Trace2DLtdSorted(final int maxsize) { this.m_maxsize = maxsize; } /** * In case point has an x- value already contained, the old trace point with * that value will be replaced by the new one. Else the new trace point will * be added at an index in order to keep the ascending order of trace points * with a higher x- value are contained. * <p> * If points takes additional space (it's x- value is not already contained) * and maxsize is reached, the first element (with lowest x- value) will be * removed. * <p> * * @param point * the point to add. * * @return true if the point was successfully removed. */ @Override protected boolean addPointInternal(final ITracePoint2D point) { final boolean rem = this.removePoint(point); this.m_points.add(point); if (!rem) { if (this.m_points.size() > this.m_maxsize) { final ITracePoint2D remove = this.m_points.last(); this.removePoint(remove); } } return true; } /** * @see info.monitorenter.gui.chart.ITrace2D#getMaxSize() */ @Override public final int getMaxSize() { return this.m_maxsize; } /** * Sets the maximum amount of points that will be shown. * <p> * * @param amount * the maximum amount of points that will be shown. */ public final void setMaxSize(final int amount) { synchronized (this) { this.m_maxsize = amount; } } }