From 39a1a4fda5266103e60fae3e00aacc3912bcb168 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Mon, 8 Jun 2015 15:03:23 -0400 Subject: [PATCH] better constructors for Int/Float/StringList --- core/src/processing/data/FloatList.java | 44 ++++++++++++++- core/src/processing/data/IntList.java | 43 +++++++++++++- core/todo.txt | 74 ++++++++++++++----------- 3 files changed, 124 insertions(+), 37 deletions(-) diff --git a/core/src/processing/data/FloatList.java b/core/src/processing/data/FloatList.java index 5862cc7c8..c2ff82367 100644 --- a/core/src/processing/data/FloatList.java +++ b/core/src/processing/data/FloatList.java @@ -28,6 +28,7 @@ public class FloatList implements Iterable { data = new float[10]; } + /** * @nowebref */ @@ -35,6 +36,7 @@ public class FloatList implements Iterable { data = new float[length]; } + /** * @nowebref */ @@ -44,13 +46,49 @@ public class FloatList implements Iterable { System.arraycopy(list, 0, data, 0, count); } + /** + * Construct an FloatList from an iterable pile of objects. + * For instance, a float array, an array of strings, who knows). + * Un-parseable or null values will be set to NaN. * @nowebref */ - public FloatList(Iterable iter) { + public FloatList(Iterable iter) { this(10); - for (float v : iter) { - append(v); + for (Object o : iter) { + if (o == null) { + append(Float.NaN); + } else if (o instanceof Number) { + append(((Number) o).floatValue()); + } else { + append(PApplet.parseFloat(o.toString().trim())); + } + } + crop(); + } + + + /** + * Construct an FloatList from a random pile of objects. + * Un-parseable or null values will be set to NaN. + */ + public FloatList(Object... items) { + // nuts, no good way to pass missingValue to this fn (varargs must be last) + final float missingValue = Float.NaN; + + count = items.length; + data = new float[count]; + int index = 0; + for (Object o : items) { + float value = missingValue; + if (o != null) { + if (o instanceof Number) { + value = ((Number) o).floatValue(); + } else { + value = PApplet.parseFloat(o.toString().trim(), missingValue); + } + } + data[index++] = value; } } diff --git a/core/src/processing/data/IntList.java b/core/src/processing/data/IntList.java index c90390eba..cb5dc560b 100644 --- a/core/src/processing/data/IntList.java +++ b/core/src/processing/data/IntList.java @@ -33,6 +33,7 @@ public class IntList implements Iterable { data = new int[10]; } + /** * @nowebref */ @@ -40,6 +41,7 @@ public class IntList implements Iterable { data = new int[length]; } + /** * @nowebref */ @@ -49,13 +51,48 @@ public class IntList implements Iterable { System.arraycopy(source, 0, data, 0, count); } + /** + * Construct an IntList from an iterable pile of objects. + * For instance, a float array, an array of strings, who knows). + * Un-parseable or null values will be set to 0. * @nowebref */ - public IntList(Iterable iter) { + public IntList(Iterable iter) { this(10); - for (int v : iter) { - append(v); + for (Object o : iter) { + if (o == null) { + append(0); // missing value default + } else if (o instanceof Number) { + append(((Number) o).intValue()); + } else { + append(PApplet.parseInt(o.toString().trim())); + } + } + crop(); + } + + + /** + * Construct an IntList from a random pile of objects. + * Un-parseable or null values will be set to zero. + */ + public IntList(Object... items) { + final int missingValue = 0; // nuts, can't be last/final/second arg + + count = items.length; + data = new int[count]; + int index = 0; + for (Object o : items) { + int value = missingValue; + if (o != null) { + if (o instanceof Number) { + value = ((Number) o).intValue(); + } else { + value = PApplet.parseInt(o.toString().trim(), missingValue); + } + } + data[index++] = value; } } diff --git a/core/todo.txt b/core/todo.txt index 692914420..971715895 100644 --- a/core/todo.txt +++ b/core/todo.txt @@ -7,6 +7,23 @@ fixed earlier/can no longer reproduce X strips when rendering spheres with lights and anti-aliasing X https://github.com/processing/processing/issues/1185 +api decisions +o min() and max() to use varargs +o https://github.com/processing/processing/issues/3027 +X not enough use cases here to make sense +o join() to use varargs +X handling this in the Int/Float/StringList constructors instead +X users can call new StringList(...).join(",") instead +X make join() work with Iterable or Object... or both? +X will this collide with the current String[] version? +o remove OPENGL constant (tell people to use P3D or P2D) +X breaks too much code without really helping anything +o break PUtil out from PApplet +o pro: weird to call PApplet for things like hex/join/etc +o con: still lots of things like selectFolder() that need GUI +X final: not enough functions to split out to have it truly make sense +X or rather, doesn't clean up enough code that the mess is worthwhile + smooth and noSmooth o add imageSmooth()? o https://github.com/processing/processing/issues/1272 @@ -40,12 +57,22 @@ X moved things to settings() X split 'present' and 'full screen'? X --full-screen causes considerable flicker at this point X or split them when sketchWidth/Height are implemented? -X add displayDensity() methods X size() inside setup() can only have numbers X size() inside settings() is left alone and can do whatever it wants X comments are being removed before size() is getting checked X probably remove anything inside settings() as well? +pixelDensity and 2X +X add displayDensity() methods +X add pixelDensity() method +X 2X nomenclature last call +X https://github.com/processing/processing/issues/3361 +X the 2X thing on the renderer name is unnecessary +X just do pixelFactor() (and pull it during compilation)? +X add sketchPixelFactor() to handle the scenario? +X or is it just a boolean, because pixelFactor(2) is the only option? +X remove retina hint + andres/opengl X set(0, 0, image) does not set alpha channel to opaque in P2D/P3D X https://github.com/processing/processing/issues/2125 @@ -83,11 +110,19 @@ _ or sketchInt() or settingsInt()? _ surface.size(), surface.noSmooth()... just like PGraphics methods? _ make final to move folks away from these? _ or is this a bad move until we've sorted out Android? -_ 2X nomenclature last call -_ https://github.com/processing/processing/issues/3361 -critical +breaking api +_ add chaining operations to PVector +_ https://github.com/processing/processing/issues/257 +_ add chaining operations to XML and JSON +_ exec() and open() to use varargs +_ cross-language awkwardness +_ python has to use launch() instead of open() +_ map() is bad for Python and JavaScript + + +high priority _ draw() executes twice when noLoop() called in setup() _ https://github.com/processing/processing/issues/3310 _ broken since 3.0a7, but not in 3.0a5 @@ -95,9 +130,8 @@ _ static mode broken with Java2D on Windows and Linux _ https://github.com/processing/processing/issues/3315 _ sketch sometimes doesn't show with noLoop() on Linux _ https://github.com/processing/processing/issues/3316 - - -high priority +_ sketch not always showing with empty draw() +_ https://github.com/processing/processing/issues/3363 _ prevent running _2X renderers on non-2x hardware _ PGraphic ignores PNG transparency (regression from 3.0a5) _ https://github.com/processing/processing/issues/3317 @@ -211,25 +245,6 @@ _ present mode is 30-40% slower than windowed _ w/ this example: https://github.com/processing/processing/issues/2423 -breaking api -_ bring back chaining in JSON (and add to XML) -_ add chaining operations to PVector -_ https://github.com/processing/processing/issues/257 -_ min() and max() to use varargs -_ https://github.com/processing/processing/issues/3027 -_ make join() work with Iterable or Object... or both? -_ will this collide with the current String[] version? -_ remove OPENGL constant (tell people to use P3D or P2D) -_ exec() and open() to use varargs -_ join() to use varargs -_ break PUtil out from PApplet -_ pro: weird to call PApplet for things like hex/join/etc -_ con: still lots of things like selectFolder() that need GUI -_ cross-language awkwardness -_ python has to use launch() instead of open() -_ map() is bad for Python and JavaScript - - data _ handling of 'missing' values in Table needs serious work _ if missing int is zero, can't just remove those values from saving a table @@ -264,13 +279,10 @@ _ draw(s) doesn't work on the returned PShape retina/hidpi +_ How do images behave when pixelDensity(2) is set? +_ https://github.com/processing/processing/issues/3364 _ save() and saveFrame() with 2X renderers fails _ https://github.com/processing/processing/issues/3255 -_ the 2X thing on the renderer name is unnecessary -_ just do pixelFactor() (and pull it during compilation)? -_ add sketchPixelFactor() to handle the scenario? -_ or is it just a boolean, because pixelFactor(2) is the only option? -_ remove retina hint _ saveFrame() with retina render is making black images _ no high-res display support for OpenGL _ https://github.com/processing/processing/issues/2573