diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..399282c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/build/ +/.classpath +/.project diff --git a/demos/prefuse/demos/Congress.java b/demos/prefuse/demos/Congress.java index 301d6a4..0ec7fda 100644 --- a/demos/prefuse/demos/Congress.java +++ b/demos/prefuse/demos/Congress.java @@ -157,9 +157,9 @@ public Renderer getRenderer(VisualItem item) { // set up the actions AxisLayout xaxis = new AxisLayout(group, "State Code", - Constants.X_AXIS, VisiblePredicate.TRUE); + Constants.X_AXIS, VisiblePredicate.getTruePredicate()); AxisLayout yaxis = new AxisLayout(group, RECEIPTS, - Constants.Y_AXIS, VisiblePredicate.TRUE); + Constants.Y_AXIS, VisiblePredicate.getTruePredicate()); //yaxis.setScale(Constants.LOG_SCALE); yaxis.setRangeModel(receiptsQ.getModel()); receiptsQ.getNumberModel().setValueRange(0,65000000,0,65000000); diff --git a/demos/prefuse/demos/ScatterPlot.java b/demos/prefuse/demos/ScatterPlot.java index 7017b17..37f321b 100644 --- a/demos/prefuse/demos/ScatterPlot.java +++ b/demos/prefuse/demos/ScatterPlot.java @@ -61,11 +61,11 @@ public ScatterPlot(Table t, String xfield, String yfield, String sfield) { // set up the actions AxisLayout x_axis = new AxisLayout(group, xfield, - Constants.X_AXIS, VisiblePredicate.TRUE); + Constants.X_AXIS, VisiblePredicate.getTruePredicate()); m_vis.putAction("x", x_axis); AxisLayout y_axis = new AxisLayout(group, yfield, - Constants.Y_AXIS, VisiblePredicate.TRUE); + Constants.Y_AXIS, VisiblePredicate.getTruePredicate()); m_vis.putAction("y", y_axis); ColorAction color = new ColorAction(group, diff --git a/src/prefuse/Display.java b/src/prefuse/Display.java index bede65a..0a47a3b 100644 --- a/src/prefuse/Display.java +++ b/src/prefuse/Display.java @@ -421,9 +421,9 @@ public void setPredicate(String expr) { */ public synchronized void setPredicate(Predicate p) { if ( p == null ) { - m_predicate.set(VisiblePredicate.TRUE); + m_predicate.set(VisiblePredicate.getTruePredicate()); } else { - m_predicate.set(new Predicate[] {p, VisiblePredicate.TRUE}); + m_predicate.set(new Predicate[] {p, VisiblePredicate.getTruePredicate()}); } } diff --git a/src/prefuse/Visualization.java b/src/prefuse/Visualization.java index e53dfe6..95fc56b 100644 --- a/src/prefuse/Visualization.java +++ b/src/prefuse/Visualization.java @@ -936,7 +936,7 @@ public void invalidateAll() { * @return an iterator over all visible items. */ public Iterator visibleItems() { - return items(VisiblePredicate.TRUE); + return items(VisiblePredicate.getTruePredicate()); } /** @@ -945,7 +945,7 @@ public Iterator visibleItems() { * @return an iterator over all visible items in the specified group */ public Iterator visibleItems(String group) { - return items(group, VisiblePredicate.TRUE); + return items(group, VisiblePredicate.getTruePredicate()); } /** diff --git a/src/prefuse/action/ItemAction.java b/src/prefuse/action/ItemAction.java index ce82bd7..0c3e7c6 100644 --- a/src/prefuse/action/ItemAction.java +++ b/src/prefuse/action/ItemAction.java @@ -60,7 +60,7 @@ public ItemAction(String group, Predicate filter) { * @param group the name of the group to process */ public ItemAction(Visualization vis, String group) { - this(vis, group, VisiblePredicate.TRUE); + this(vis, group, VisiblePredicate.getTruePredicate()); } /** diff --git a/src/prefuse/action/filter/VisibilityFilter.java b/src/prefuse/action/filter/VisibilityFilter.java index 6a46a89..603ecca 100644 --- a/src/prefuse/action/filter/VisibilityFilter.java +++ b/src/prefuse/action/filter/VisibilityFilter.java @@ -56,7 +56,7 @@ public VisibilityFilter(Visualization vis, String group, Predicate p) { */ protected void setPredicate(Predicate p) { m_predicate = p; - m_filter = new OrPredicate(p, VisiblePredicate.TRUE); + m_filter = new OrPredicate(p, VisiblePredicate.getTruePredicate()); } /** diff --git a/src/prefuse/util/display/RenderingQueue.java b/src/prefuse/util/display/RenderingQueue.java index 42eb11b..969dc99 100644 --- a/src/prefuse/util/display/RenderingQueue.java +++ b/src/prefuse/util/display/RenderingQueue.java @@ -33,7 +33,7 @@ public class RenderingQueue { // buffer queues for use in sorting, these prevent continual re-allocation transient static VisualItem[] items_buf; transient static int[] scores_buf; - + /** * Clear both rendering and picking queues. */ @@ -122,6 +122,9 @@ private void sort(VisualItem[] items, int[] scores, int size) { } // now sort ArrayLib.sort(scores, items, scores_buf, items_buf, 0, size); + + // clean up the temp buffer from object references + Arrays.fill(items_buf, null); } } // end of class RenderingQueue diff --git a/src/prefuse/visual/expression/VisiblePredicate.java b/src/prefuse/visual/expression/VisiblePredicate.java index 125e228..3fa939e 100644 --- a/src/prefuse/visual/expression/VisiblePredicate.java +++ b/src/prefuse/visual/expression/VisiblePredicate.java @@ -1,5 +1,7 @@ package prefuse.visual.expression; +import java.lang.ref.WeakReference; + import prefuse.data.expression.ColumnExpression; import prefuse.data.expression.Expression; import prefuse.data.expression.Function; @@ -12,15 +14,35 @@ * * @author jeffrey heer */ -public class VisiblePredicate extends ColumnExpression - implements Predicate, Function -{ - - /** Convenience instance for the visible == true case. */ - public static final Predicate TRUE = new VisiblePredicate(); - /** Convenience instance for the visible == false case. */ - public static final Predicate FALSE = new NotPredicate(TRUE); - +public class VisiblePredicate extends ColumnExpression implements Predicate, Function { + + private static WeakReference TRUE_REFERENCE; + private static WeakReference FALSE_REFERENCE; + + public static synchronized Predicate getTruePredicate() { + if (TRUE_REFERENCE != null) { + Object item = TRUE_REFERENCE.get(); + if (item instanceof Predicate) { + return (Predicate) item; + } + } + VisiblePredicate TRUE = new VisiblePredicate(); + TRUE_REFERENCE = new WeakReference(TRUE); + return TRUE; + } + + public static synchronized Predicate getFalsePredicate() { + if (FALSE_REFERENCE != null) { + Object item = FALSE_REFERENCE.get(); + if (item instanceof Predicate) { + return (Predicate) item; + } + } + Predicate FALSE = new NotPredicate(getTruePredicate()); + TRUE_REFERENCE = new WeakReference(FALSE); + return FALSE; + } + /** * Create a new VisiblePredicate. */ @@ -48,12 +70,12 @@ public void addParameter(Expression e) { public int getParameterCount() { return 0; } - + /** * @see java.lang.Object#toString() */ public String toString() { - return getName()+"()"; + return getName() + "()"; } } // end of class VisiblePredicate