/*
 *  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 Trace2DLtdReplacing all tracepoints will be
 * sorted by their x- value.
 * 

* Performance is slower compared to the class named above. Internally a * TreeSet is used (instead of RingBufferArrayFast) * to keep the comparable TracePoint2D- instances sorted. * Internally all tracepoints are TracePoint2D -instances. *

* * @author Achim Westermann * * @version $Revision: 1.12 $ */ public class Trace2DLtdSorted extends Trace2DSorted { /** Generated serialVersionUID. */ 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. *

*/ 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. *

* 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. *

* * @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. *

* * @param amount * the maximum amount of points that will be shown. */ public final void setMaxSize(final int amount) { synchronized (this) { this.m_maxsize = amount; } } }

Ads help maintain this website.