toxiclibs 0.2-java → 0.5.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +16 -0
- data/CHANGELOG.md +4 -0
- data/LICENSE +675 -0
- data/README.md +12 -5
- data/Rakefile +25 -82
- data/examples/attract_repel/attract_repel.rb +30 -0
- data/examples/attract_repel/attractor.rb +23 -0
- data/examples/attract_repel/particle.rb +27 -0
- data/examples/data/ti_yong.png +0 -0
- data/examples/force_directed/cluster.rb +76 -0
- data/examples/force_directed/force_directed_graph.rb +92 -0
- data/examples/force_directed/node.rb +26 -0
- data/examples/gray_scott_image.rb +75 -0
- data/examples/gray_scott_tone_map.rb +77 -0
- data/examples/implicit.rb +139 -0
- data/examples/inflate_mesh.rb +89 -0
- data/examples/model_align.rb +44 -0
- data/examples/povmesh/ftest.rb +46 -0
- data/examples/povmesh/tentacle.rb +73 -0
- data/examples/simple_cluster/cluster.rb +47 -0
- data/examples/simple_cluster/node.rb +27 -0
- data/examples/simple_cluster/simple_cluster.rb +60 -0
- data/examples/soft_body/blanket.rb +45 -0
- data/examples/soft_body/connection.rb +16 -0
- data/examples/soft_body/particle.rb +22 -0
- data/examples/soft_body/soft_body_square_adapted.rb +55 -0
- data/lib/toxiclibs.jar +0 -0
- data/lib/toxiclibs.rb +91 -32
- data/lib/toxiclibs/version.rb +1 -1
- data/pom.xml +122 -0
- data/src/com/toxi/net/ClientListener.java +41 -0
- data/src/com/toxi/net/ServerListener.java +70 -0
- data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
- data/src/com/toxi/net/ServerState.java +18 -0
- data/src/com/toxi/net/UDPConnection.java +66 -0
- data/src/com/toxi/net/UDPSyncClient.java +81 -0
- data/src/com/toxi/net/UDPSyncServer.java +450 -0
- data/src/com/toxi/nio/UDPClient.java +121 -0
- data/src/com/toxi/nio/UDPClientState.java +32 -0
- data/src/com/toxi/nio/UDPServer.java +129 -0
- data/src/toxi/color/AccessCriteria.java +114 -0
- data/src/toxi/color/AlphaAccessor.java +67 -0
- data/src/toxi/color/CMYKAccessor.java +122 -0
- data/src/toxi/color/CMYKDistanceProxy.java +40 -0
- data/src/toxi/color/ColorGradient.java +260 -0
- data/src/toxi/color/ColorList.java +699 -0
- data/src/toxi/color/ColorRange.java +671 -0
- data/src/toxi/color/ColorTheme.java +163 -0
- data/src/toxi/color/DistanceProxy.java +44 -0
- data/src/toxi/color/HSVAccessor.java +113 -0
- data/src/toxi/color/HSVDistanceProxy.java +40 -0
- data/src/toxi/color/HistEntry.java +85 -0
- data/src/toxi/color/Histogram.java +185 -0
- data/src/toxi/color/Hue.java +249 -0
- data/src/toxi/color/LuminanceAccessor.java +78 -0
- data/src/toxi/color/NamedColor.java +935 -0
- data/src/toxi/color/ProximityComparator.java +70 -0
- data/src/toxi/color/RGBAccessor.java +113 -0
- data/src/toxi/color/RGBDistanceProxy.java +41 -0
- data/src/toxi/color/ReadonlyTColor.java +296 -0
- data/src/toxi/color/TColor.java +1677 -0
- data/src/toxi/color/TColorAdapter.java +68 -0
- data/src/toxi/color/ToneMap.java +218 -0
- data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
- data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
- data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
- data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
- data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
- data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
- data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
- data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
- data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
- data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
- data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
- data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
- data/src/toxi/data/csv/CSVAdapter.java +74 -0
- data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
- data/src/toxi/data/csv/CSVListener.java +61 -0
- data/src/toxi/data/csv/CSVParser.java +202 -0
- data/src/toxi/data/feeds/AtomAuthor.java +49 -0
- data/src/toxi/data/feeds/AtomContent.java +50 -0
- data/src/toxi/data/feeds/AtomEntry.java +111 -0
- data/src/toxi/data/feeds/AtomFeed.java +129 -0
- data/src/toxi/data/feeds/AtomLink.java +62 -0
- data/src/toxi/data/feeds/RSSChannel.java +88 -0
- data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
- data/src/toxi/data/feeds/RSSFeed.java +99 -0
- data/src/toxi/data/feeds/RSSItem.java +104 -0
- data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
- data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
- data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
- data/src/toxi/geom/AABB.java +658 -0
- data/src/toxi/geom/Axis3D.java +116 -0
- data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
- data/src/toxi/geom/BernsteinPolynomial.java +94 -0
- data/src/toxi/geom/BezierCurve2D.java +159 -0
- data/src/toxi/geom/BezierCurve3D.java +148 -0
- data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
- data/src/toxi/geom/BoxIntersector.java +52 -0
- data/src/toxi/geom/Circle.java +230 -0
- data/src/toxi/geom/CircleIntersector.java +85 -0
- data/src/toxi/geom/Cone.java +150 -0
- data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
- data/src/toxi/geom/CoordinateExtractor.java +16 -0
- data/src/toxi/geom/Ellipse.java +250 -0
- data/src/toxi/geom/GMatrix.java +2599 -0
- data/src/toxi/geom/GVector.java +833 -0
- data/src/toxi/geom/GlobalGridTesselator.java +54 -0
- data/src/toxi/geom/GridTesselator.java +108 -0
- data/src/toxi/geom/Intersector2D.java +49 -0
- data/src/toxi/geom/Intersector3D.java +51 -0
- data/src/toxi/geom/IsectData2D.java +103 -0
- data/src/toxi/geom/IsectData3D.java +103 -0
- data/src/toxi/geom/Line2D.java +534 -0
- data/src/toxi/geom/Line3D.java +471 -0
- data/src/toxi/geom/LineStrip2D.java +430 -0
- data/src/toxi/geom/LineStrip3D.java +230 -0
- data/src/toxi/geom/LocalGridTesselator.java +57 -0
- data/src/toxi/geom/Matrix3d.java +3048 -0
- data/src/toxi/geom/Matrix4f.java +3446 -0
- data/src/toxi/geom/Matrix4x4.java +1076 -0
- data/src/toxi/geom/MatrixSizeException.java +58 -0
- data/src/toxi/geom/OctreeVisitor.java +44 -0
- data/src/toxi/geom/Origin3D.java +148 -0
- data/src/toxi/geom/Plane.java +293 -0
- data/src/toxi/geom/PlaneIntersector.java +57 -0
- data/src/toxi/geom/PointCloud3D.java +253 -0
- data/src/toxi/geom/PointOctree.java +502 -0
- data/src/toxi/geom/PointQuadtree.java +375 -0
- data/src/toxi/geom/Polygon2D.java +1038 -0
- data/src/toxi/geom/PolygonClipper2D.java +45 -0
- data/src/toxi/geom/PolygonTesselator.java +20 -0
- data/src/toxi/geom/QuadtreeVisitor.java +44 -0
- data/src/toxi/geom/Quaternion.java +641 -0
- data/src/toxi/geom/Ray2D.java +146 -0
- data/src/toxi/geom/Ray3D.java +150 -0
- data/src/toxi/geom/Ray3DIntersector.java +75 -0
- data/src/toxi/geom/ReadonlyVec2D.java +575 -0
- data/src/toxi/geom/ReadonlyVec3D.java +628 -0
- data/src/toxi/geom/ReadonlyVec4D.java +431 -0
- data/src/toxi/geom/Rect.java +720 -0
- data/src/toxi/geom/Reflector3D.java +58 -0
- data/src/toxi/geom/Shape2D.java +94 -0
- data/src/toxi/geom/Shape3D.java +42 -0
- data/src/toxi/geom/SingularMatrixException.java +57 -0
- data/src/toxi/geom/SpatialBins.java +182 -0
- data/src/toxi/geom/SpatialIndex.java +61 -0
- data/src/toxi/geom/Sphere.java +224 -0
- data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
- data/src/toxi/geom/Spline2D.java +349 -0
- data/src/toxi/geom/Spline3D.java +351 -0
- data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
- data/src/toxi/geom/Triangle2D.java +422 -0
- data/src/toxi/geom/Triangle3D.java +456 -0
- data/src/toxi/geom/TriangleIntersector.java +105 -0
- data/src/toxi/geom/Vec2D.java +1328 -0
- data/src/toxi/geom/Vec3D.java +1832 -0
- data/src/toxi/geom/Vec4D.java +985 -0
- data/src/toxi/geom/VecMathUtil.java +100 -0
- data/src/toxi/geom/XAxisCylinder.java +64 -0
- data/src/toxi/geom/YAxisCylinder.java +65 -0
- data/src/toxi/geom/ZAxisCylinder.java +64 -0
- data/src/toxi/geom/mesh/BezierPatch.java +200 -0
- data/src/toxi/geom/mesh/BoxSelector.java +62 -0
- data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
- data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
- data/src/toxi/geom/mesh/Face.java +176 -0
- data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
- data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
- data/src/toxi/geom/mesh/Mesh3D.java +224 -0
- data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
- data/src/toxi/geom/mesh/OBJWriter.java +194 -0
- data/src/toxi/geom/mesh/PLYWriter.java +167 -0
- data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
- data/src/toxi/geom/mesh/STLColorModel.java +54 -0
- data/src/toxi/geom/mesh/STLReader.java +185 -0
- data/src/toxi/geom/mesh/STLWriter.java +323 -0
- data/src/toxi/geom/mesh/SphereFunction.java +156 -0
- data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
- data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
- data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
- data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
- data/src/toxi/geom/mesh/Terrain.java +451 -0
- data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
- data/src/toxi/geom/mesh/Vertex.java +78 -0
- data/src/toxi/geom/mesh/VertexSelector.java +193 -0
- data/src/toxi/geom/mesh/WEFace.java +100 -0
- data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
- data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
- data/src/toxi/geom/mesh/WEVertex.java +134 -0
- data/src/toxi/geom/mesh/WingedEdge.java +115 -0
- data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
- data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
- data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
- data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
- data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
- data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
- data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
- data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
- data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
- data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
- data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
- data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
- data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
- data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
- data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
- data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
- data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
- data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
- data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
- data/src/toxi/geom/nurbs/ControlNet.java +148 -0
- data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
- data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
- data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
- data/src/toxi/geom/nurbs/KnotVector.java +333 -0
- data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
- data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
- data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
- data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
- data/src/toxi/image/util/Filter8bit.java +331 -0
- data/src/toxi/image/util/TiledFrameExporter.java +162 -0
- data/src/toxi/math/BezierInterpolation.java +102 -0
- data/src/toxi/math/CircularInterpolation.java +88 -0
- data/src/toxi/math/CosineInterpolation.java +51 -0
- data/src/toxi/math/DecimatedInterpolation.java +77 -0
- data/src/toxi/math/ExponentialInterpolation.java +68 -0
- data/src/toxi/math/InterpolateStrategy.java +60 -0
- data/src/toxi/math/Interpolation2D.java +93 -0
- data/src/toxi/math/LinearInterpolation.java +46 -0
- data/src/toxi/math/MathUtils.java +990 -0
- data/src/toxi/math/NonLinearScaleMap.java +101 -0
- data/src/toxi/math/ScaleMap.java +183 -0
- data/src/toxi/math/SigmoidInterpolation.java +78 -0
- data/src/toxi/math/SinCosLUT.java +141 -0
- data/src/toxi/math/ThresholdInterpolation.java +58 -0
- data/src/toxi/math/ZoomLensInterpolation.java +126 -0
- data/src/toxi/math/conversion/UnitTranslator.java +161 -0
- data/src/toxi/math/noise/PerlinNoise.java +281 -0
- data/src/toxi/math/noise/SimplexNoise.java +542 -0
- data/src/toxi/math/waves/AMFMSineWave.java +143 -0
- data/src/toxi/math/waves/AbstractWave.java +248 -0
- data/src/toxi/math/waves/ConstantWave.java +48 -0
- data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
- data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
- data/src/toxi/math/waves/FMSineWave.java +142 -0
- data/src/toxi/math/waves/FMSquareWave.java +143 -0
- data/src/toxi/math/waves/FMTriangleWave.java +126 -0
- data/src/toxi/math/waves/SineWave.java +81 -0
- data/src/toxi/math/waves/Wave2D.java +68 -0
- data/src/toxi/math/waves/WaveState.java +69 -0
- data/src/toxi/music/scale/AbstractScale.java +117 -0
- data/src/toxi/music/scale/GenericScale.java +66 -0
- data/src/toxi/music/scale/MajorScale.java +41 -0
- data/src/toxi/newmesh/AttributedEdge.java +106 -0
- data/src/toxi/newmesh/AttributedFace.java +63 -0
- data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
- data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
- data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
- data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
- data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
- data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
- data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
- data/src/toxi/newmesh/SpatialIndex.java +78 -0
- data/src/toxi/physics2d/ParticlePath2D.java +100 -0
- data/src/toxi/physics2d/ParticleString2D.java +184 -0
- data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
- data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
- data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
- data/src/toxi/physics2d/VerletParticle2D.java +457 -0
- data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
- data/src/toxi/physics2d/VerletSpring2D.java +181 -0
- data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
- data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
- data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
- data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
- data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
- data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
- data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
- data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
- data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
- data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
- data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
- data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
- data/src/toxi/physics3d/ParticlePath3D.java +100 -0
- data/src/toxi/physics3d/ParticleString3D.java +184 -0
- data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
- data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
- data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
- data/src/toxi/physics3d/VerletParticle3D.java +385 -0
- data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
- data/src/toxi/physics3d/VerletSpring3D.java +180 -0
- data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
- data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
- data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
- data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
- data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
- data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
- data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
- data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
- data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
- data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
- data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
- data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
- data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
- data/src/toxi/processing/ArrowModifier.java +116 -0
- data/src/toxi/processing/DashedLineModifier.java +48 -0
- data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
- data/src/toxi/processing/Line2DRenderModifier.java +18 -0
- data/src/toxi/processing/MeshToVBO.java +94 -0
- data/src/toxi/processing/NormalMapper.java +18 -0
- data/src/toxi/processing/POVInterface.java +121 -0
- data/src/toxi/processing/POVMesh.java +219 -0
- data/src/toxi/processing/POVWriter.java +460 -0
- data/src/toxi/processing/RCOpaque.java +77 -0
- data/src/toxi/processing/RCTransp.java +78 -0
- data/src/toxi/processing/TextureBuilder.java +232 -0
- data/src/toxi/processing/Textures.java +110 -0
- data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
- data/src/toxi/processing/Tracing.java +25 -0
- data/src/toxi/processing/XYZNormalMapper.java +30 -0
- data/src/toxi/sim/automata/CAMatrix.java +297 -0
- data/src/toxi/sim/automata/CARule.java +76 -0
- data/src/toxi/sim/automata/CARule2D.java +354 -0
- data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
- data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
- data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
- data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
- data/src/toxi/sim/dla/DLA.java +497 -0
- data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
- data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
- data/src/toxi/sim/dla/DLAEventListener.java +57 -0
- data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
- data/src/toxi/sim/dla/DLAParticle.java +102 -0
- data/src/toxi/sim/dla/DLASegment.java +88 -0
- data/src/toxi/sim/dla/PipelineOrder.java +50 -0
- data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
- data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
- data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
- data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
- data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
- data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
- data/src/toxi/sim/grayscott/GrayScott.java +469 -0
- data/src/toxi/util/DateUtils.java +141 -0
- data/src/toxi/util/FileSequenceDescriptor.java +181 -0
- data/src/toxi/util/FileUtils.java +467 -0
- data/src/toxi/util/datatypes/ArraySet.java +128 -0
- data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
- data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
- data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
- data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
- data/src/toxi/util/datatypes/DoubleRange.java +251 -0
- data/src/toxi/util/datatypes/FloatRange.java +251 -0
- data/src/toxi/util/datatypes/GenericSet.java +215 -0
- data/src/toxi/util/datatypes/IntegerRange.java +247 -0
- data/src/toxi/util/datatypes/IntegerSet.java +149 -0
- data/src/toxi/util/datatypes/ItemIndex.java +72 -0
- data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
- data/src/toxi/util/datatypes/TypedProperties.java +291 -0
- data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
- data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
- data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
- data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
- data/src/toxi/util/events/EventDispatcher.java +86 -0
- data/src/toxi/volume/AdditiveBrush.java +19 -0
- data/src/toxi/volume/ArrayIsoSurface.java +297 -0
- data/src/toxi/volume/BoxBrush.java +100 -0
- data/src/toxi/volume/BrushMode.java +16 -0
- data/src/toxi/volume/HashIsoSurface.java +354 -0
- data/src/toxi/volume/IsoSurface.java +59 -0
- data/src/toxi/volume/MarchingCubesIndex.java +312 -0
- data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
- data/src/toxi/volume/MeshVoxelizer.java +216 -0
- data/src/toxi/volume/MultiplyBrush.java +20 -0
- data/src/toxi/volume/PeakBrush.java +21 -0
- data/src/toxi/volume/ReplaceBrush.java +19 -0
- data/src/toxi/volume/RoundBrush.java +113 -0
- data/src/toxi/volume/VolumetricBrush.java +160 -0
- data/src/toxi/volume/VolumetricHashMap.java +179 -0
- data/src/toxi/volume/VolumetricSpace.java +195 -0
- data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
- data/toxiclibs.gemspec +34 -0
- metadata +424 -27
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
package toxi.util.datatypes;
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2007 by L. Paul Chew.
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, without written agreement and without
|
|
7
|
+
* license or royalty fees, to use, copy, modify, and distribute this
|
|
8
|
+
* software and its documentation for any purpose, subject to the following
|
|
9
|
+
* conditions:
|
|
10
|
+
*
|
|
11
|
+
* The above copyright notice and this permission notice shall be included
|
|
12
|
+
* in all copies or substantial portions of the Software.
|
|
13
|
+
*
|
|
14
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
15
|
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
19
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
20
|
+
* DEALINGS IN THE SOFTWARE.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import java.util.AbstractSet;
|
|
24
|
+
import java.util.ArrayList;
|
|
25
|
+
import java.util.Collection;
|
|
26
|
+
import java.util.Iterator;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* An ArrayList implementation of Set. An ArraySet is good for small sets; it
|
|
30
|
+
* has less overhead than a HashSet or a TreeSet.
|
|
31
|
+
*
|
|
32
|
+
* @author Paul Chew
|
|
33
|
+
*
|
|
34
|
+
* Created December 2007. For use with Voronoi/Delaunay applet.
|
|
35
|
+
* @param <E>
|
|
36
|
+
*
|
|
37
|
+
*/
|
|
38
|
+
public class ArraySet<E> extends AbstractSet<E> {
|
|
39
|
+
|
|
40
|
+
private ArrayList<E> items; // Items of the set
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Create an empty set (default initial capacity is 3).
|
|
44
|
+
*/
|
|
45
|
+
public ArraySet() {
|
|
46
|
+
this(3);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Create a set containing the items of the collection. Any duplicate items
|
|
51
|
+
* are discarded.
|
|
52
|
+
*
|
|
53
|
+
* @param collection
|
|
54
|
+
* the source for the items of the small set
|
|
55
|
+
*/
|
|
56
|
+
public ArraySet(Collection<? extends E> collection) {
|
|
57
|
+
items = new ArrayList<>(collection.size());
|
|
58
|
+
collection.stream().filter((item) -> (!items.contains(item))).forEach((item) -> {
|
|
59
|
+
items.add(item);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Create an empty set with the specified initial capacity.
|
|
65
|
+
*
|
|
66
|
+
* @param initialCapacity
|
|
67
|
+
* the initial capacity
|
|
68
|
+
*/
|
|
69
|
+
public ArraySet(int initialCapacity) {
|
|
70
|
+
items = new ArrayList<>(initialCapacity);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
*
|
|
75
|
+
* @param item
|
|
76
|
+
* @return
|
|
77
|
+
*/
|
|
78
|
+
@Override
|
|
79
|
+
public boolean add(E item) {
|
|
80
|
+
if (items.contains(item)) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
return items.add(item);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* True if any member of the collection is also in the ArraySet.
|
|
88
|
+
*
|
|
89
|
+
* @param collection
|
|
90
|
+
* the Collection to check
|
|
91
|
+
* @return true if any member of collection appears in this ArraySet
|
|
92
|
+
*/
|
|
93
|
+
public boolean containsAny(Collection<?> collection) {
|
|
94
|
+
return collection.stream().anyMatch((item) -> (this.contains((E)item)));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Get the item at the specified index.
|
|
99
|
+
*
|
|
100
|
+
* @param index
|
|
101
|
+
* where the item is located in the ListSet
|
|
102
|
+
* @return the item at the specified index
|
|
103
|
+
* @throws IndexOutOfBoundsException
|
|
104
|
+
* if the index is out of bounds
|
|
105
|
+
*/
|
|
106
|
+
public E get(int index) throws IndexOutOfBoundsException {
|
|
107
|
+
return items.get(index);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
*
|
|
112
|
+
* @return
|
|
113
|
+
*/
|
|
114
|
+
@Override
|
|
115
|
+
public Iterator<E> iterator() {
|
|
116
|
+
return items.iterator();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
*
|
|
121
|
+
* @return
|
|
122
|
+
*/
|
|
123
|
+
@Override
|
|
124
|
+
public int size() {
|
|
125
|
+
return items.size();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
}
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* __ .__ .__ ._____.
|
|
3
|
+
* _/ |_ _______ __|__| ____ | | |__\_ |__ ______
|
|
4
|
+
* \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
|
|
5
|
+
* | | ( <_> > <| \ \___| |_| || \_\ \\___ \
|
|
6
|
+
* |__| \____/__/\_ \__|\___ >____/__||___ /____ >
|
|
7
|
+
* \/ \/ \/ \/
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2006-2011 Karsten Schmidt
|
|
10
|
+
*
|
|
11
|
+
* This library is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 2.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* http://creativecommons.org/licenses/LGPL/2.1/
|
|
17
|
+
*
|
|
18
|
+
* This library is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
24
|
+
* License along with this library; if not, write to the Free Software
|
|
25
|
+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
package toxi.util.datatypes;
|
|
29
|
+
|
|
30
|
+
import java.util.ArrayList;
|
|
31
|
+
import java.util.Arrays;
|
|
32
|
+
import java.util.Collection;
|
|
33
|
+
import java.util.Random;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* A collection of array utilities.
|
|
37
|
+
*/
|
|
38
|
+
public class ArrayUtil {
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Adds all array elements to the given collection of the same type.
|
|
42
|
+
*
|
|
43
|
+
* @param <T>
|
|
44
|
+
* @param array
|
|
45
|
+
* array
|
|
46
|
+
* @param collection
|
|
47
|
+
* existing collection or null (to create a new {@link ArrayList}
|
|
48
|
+
* automatically)
|
|
49
|
+
*/
|
|
50
|
+
public static <T> void addArrayToCollection(T[] array,
|
|
51
|
+
Collection<T> collection) {
|
|
52
|
+
if (collection == null) {
|
|
53
|
+
collection = new ArrayList<>();
|
|
54
|
+
}
|
|
55
|
+
collection.addAll(Arrays.asList(array));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Converts the generic array into an {@link ArrayList} of the same type.
|
|
60
|
+
*
|
|
61
|
+
* @param <T>
|
|
62
|
+
* @param array
|
|
63
|
+
* @return array list version
|
|
64
|
+
*/
|
|
65
|
+
public static <T> ArrayList<T> arrayToList(T[] array) {
|
|
66
|
+
ArrayList<T> list = new ArrayList<>(array.length);
|
|
67
|
+
list.addAll(Arrays.asList(array));
|
|
68
|
+
return list;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Creates a normalized version of the values of the given int[] array.
|
|
73
|
+
* Supports packed integers (e.g. ARGB data) by allowing to specify a
|
|
74
|
+
* bitshift amount & bitmask, e.g. do this to get the normalized
|
|
75
|
+
* representation of the red channel of an ARGB array:
|
|
76
|
+
*
|
|
77
|
+
* <pre>
|
|
78
|
+
*
|
|
79
|
+
* // use 16 bits as shift offset for accessing red channel
|
|
80
|
+
* float[] red = ArrayUtil.getAsNormalizedFloatArray(argbPixels, 16, 255, 255);
|
|
81
|
+
* </pre>
|
|
82
|
+
*
|
|
83
|
+
* @param source
|
|
84
|
+
* source data
|
|
85
|
+
* @param bits
|
|
86
|
+
* number of bits to right shift each value
|
|
87
|
+
* @param mask
|
|
88
|
+
* bitmask to apply after bitshifting
|
|
89
|
+
* @param peak
|
|
90
|
+
* peak value (in the source domain) to normalize against
|
|
91
|
+
* @param target
|
|
92
|
+
* peak of the normalized values
|
|
93
|
+
* @return normalized values
|
|
94
|
+
*/
|
|
95
|
+
public static float[] getAsNormalizedFloatArray(int[] source, int bits,
|
|
96
|
+
int mask, int peak, float target) {
|
|
97
|
+
float invPeak = target / peak;
|
|
98
|
+
float[] normalized = new float[source.length];
|
|
99
|
+
for (int i = 0; i < source.length; i++) {
|
|
100
|
+
int val = source[i];
|
|
101
|
+
if (bits > 0) {
|
|
102
|
+
val >>= bits;
|
|
103
|
+
}
|
|
104
|
+
val &= mask;
|
|
105
|
+
normalized[i] = val * invPeak;
|
|
106
|
+
}
|
|
107
|
+
return normalized;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Returns the index of the element where the given value is found in the
|
|
112
|
+
* array.
|
|
113
|
+
*
|
|
114
|
+
* @param needle
|
|
115
|
+
* number to find
|
|
116
|
+
* @param stack
|
|
117
|
+
* array to search
|
|
118
|
+
* @param maxLen
|
|
119
|
+
* number of elements to search
|
|
120
|
+
* @return array index or -1 if value couldn't be found in array
|
|
121
|
+
*/
|
|
122
|
+
public static int indexInArray(float needle, float[] stack, int maxLen) {
|
|
123
|
+
for (int i = 0; i < maxLen; i++) {
|
|
124
|
+
if (stack[i] == needle) {
|
|
125
|
+
return i;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return -1;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Returns the index of the element where the given value is found in the
|
|
133
|
+
* array.
|
|
134
|
+
*
|
|
135
|
+
* @param needle
|
|
136
|
+
* number to find
|
|
137
|
+
* @param stack
|
|
138
|
+
* array to search
|
|
139
|
+
* @param maxLen
|
|
140
|
+
* number of elements to search
|
|
141
|
+
* @return array index or -1 if value couldn't be found in array
|
|
142
|
+
*/
|
|
143
|
+
public static int indexInArray(int needle, int[] stack, int maxLen) {
|
|
144
|
+
for (int i = 0; i < maxLen; i++) {
|
|
145
|
+
if (stack[i] == needle) {
|
|
146
|
+
return i;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return -1;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Returns the index of the element where the given value is found in the
|
|
154
|
+
* array. The comparison uses {@link Object#equals(Object)}.
|
|
155
|
+
*
|
|
156
|
+
* @param needle
|
|
157
|
+
* number to find
|
|
158
|
+
* @param stack
|
|
159
|
+
* array to search
|
|
160
|
+
* @param maxLen
|
|
161
|
+
* number of elements to search
|
|
162
|
+
* @return array index or -1 if value couldn't be found in array
|
|
163
|
+
*/
|
|
164
|
+
public static int indexInArray(Object needle, Object[] stack, int maxLen) {
|
|
165
|
+
for (int i = 0; i < maxLen; i++) {
|
|
166
|
+
if (stack[i].equals(needle)) {
|
|
167
|
+
return i;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return -1;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Normalizes the values in the given array to the new absolute target
|
|
175
|
+
* value. The original values are overridden.
|
|
176
|
+
*
|
|
177
|
+
* @param buffer
|
|
178
|
+
* array
|
|
179
|
+
* @param peak
|
|
180
|
+
* current peak in the source domain
|
|
181
|
+
* @param target
|
|
182
|
+
* new peak in the target domain
|
|
183
|
+
* @return normalized array
|
|
184
|
+
*/
|
|
185
|
+
public static float[] normalizeFloatArray(float[] buffer, float peak,
|
|
186
|
+
float target) {
|
|
187
|
+
float invPeak = target / peak;
|
|
188
|
+
for (int i = 0; i < buffer.length; i++) {
|
|
189
|
+
buffer[i] *= invPeak;
|
|
190
|
+
}
|
|
191
|
+
return buffer;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Reverses the item order of the supplied byte array.
|
|
196
|
+
*
|
|
197
|
+
* @param array
|
|
198
|
+
*/
|
|
199
|
+
public static void reverse(byte[] array) {
|
|
200
|
+
int len = array.length - 1;
|
|
201
|
+
int len2 = array.length / 2;
|
|
202
|
+
for (int i = 0; i < len2; i++) {
|
|
203
|
+
byte tmp = array[i];
|
|
204
|
+
array[i] = array[len - i];
|
|
205
|
+
array[len - i] = tmp;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Reverses the item order of the supplied char array.
|
|
211
|
+
*
|
|
212
|
+
* @param array
|
|
213
|
+
*/
|
|
214
|
+
public static void reverse(char[] array) {
|
|
215
|
+
int len = array.length - 1;
|
|
216
|
+
int len2 = array.length / 2;
|
|
217
|
+
for (int i = 0; i < len2; i++) {
|
|
218
|
+
char tmp = array[i];
|
|
219
|
+
array[i] = array[len - i];
|
|
220
|
+
array[len - i] = tmp;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Reverses the item order of the supplied float array.
|
|
226
|
+
*
|
|
227
|
+
* @param array
|
|
228
|
+
*/
|
|
229
|
+
public static void reverse(float[] array) {
|
|
230
|
+
int len = array.length - 1;
|
|
231
|
+
int len2 = array.length / 2;
|
|
232
|
+
for (int i = 0; i < len2; i++) {
|
|
233
|
+
float tmp = array[i];
|
|
234
|
+
array[i] = array[len - i];
|
|
235
|
+
array[len - i] = tmp;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Reverses the item order of the supplied int array.
|
|
241
|
+
*
|
|
242
|
+
* @param array
|
|
243
|
+
*/
|
|
244
|
+
public static void reverse(int[] array) {
|
|
245
|
+
int len = array.length - 1;
|
|
246
|
+
int len2 = array.length / 2;
|
|
247
|
+
for (int i = 0; i < len2; i++) {
|
|
248
|
+
int tmp = array[i];
|
|
249
|
+
array[i] = array[len - i];
|
|
250
|
+
array[len - i] = tmp;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Reverses the item order of the supplied short array.
|
|
256
|
+
*
|
|
257
|
+
* @param array
|
|
258
|
+
*/
|
|
259
|
+
public static void reverse(short[] array) {
|
|
260
|
+
int len = array.length - 1;
|
|
261
|
+
int len2 = array.length / 2;
|
|
262
|
+
for (int i = 0; i < len2; i++) {
|
|
263
|
+
short tmp = array[i];
|
|
264
|
+
array[i] = array[len - i];
|
|
265
|
+
array[len - i] = tmp;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Reverses the item order of the supplied array (generic types).
|
|
271
|
+
*
|
|
272
|
+
* @param <T>
|
|
273
|
+
* @param array
|
|
274
|
+
*/
|
|
275
|
+
public static <T> void reverse(T[] array) {
|
|
276
|
+
int len = array.length - 1;
|
|
277
|
+
int len2 = array.length / 2;
|
|
278
|
+
for (int i = 0; i < len2; i++) {
|
|
279
|
+
T tmp = array[i];
|
|
280
|
+
array[i] = array[len - i];
|
|
281
|
+
array[len - i] = tmp;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Rearranges the array items in random order using the default
|
|
287
|
+
* java.util.Random generator. Operation is in-place, no copy is created.
|
|
288
|
+
*
|
|
289
|
+
* @param <T>
|
|
290
|
+
* @param array
|
|
291
|
+
*/
|
|
292
|
+
public static <T> void shuffle(T[] array) {
|
|
293
|
+
shuffle(array, new Random());
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Rearranges the array items in random order using the given RNG. Operation
|
|
298
|
+
* is in-place, no copy is created.
|
|
299
|
+
*
|
|
300
|
+
* @param <T>
|
|
301
|
+
* @param array
|
|
302
|
+
* @param rnd
|
|
303
|
+
*/
|
|
304
|
+
public static <T> void shuffle(T[] array, Random rnd) {
|
|
305
|
+
int N = array.length;
|
|
306
|
+
for (int i = 0; i < N; i++) {
|
|
307
|
+
int r = i + rnd.nextInt(N - i); // between i and N-1
|
|
308
|
+
T swap = array[i];
|
|
309
|
+
array[i] = array[r];
|
|
310
|
+
array[r] = swap;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
*
|
|
316
|
+
* @param array
|
|
317
|
+
* @return
|
|
318
|
+
*/
|
|
319
|
+
public static String toString(byte[] array) {
|
|
320
|
+
StringBuilder s = new StringBuilder();
|
|
321
|
+
s.append('{');
|
|
322
|
+
final int max = array.length - 1;
|
|
323
|
+
for (int i = 0; i < array.length; i++) {
|
|
324
|
+
s.append(array[i]);
|
|
325
|
+
if (i < max) {
|
|
326
|
+
s.append(',');
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return s.append('}').toString();
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
*
|
|
334
|
+
* @param array
|
|
335
|
+
* @return
|
|
336
|
+
*/
|
|
337
|
+
public static String toString(double[] array) {
|
|
338
|
+
StringBuilder s = new StringBuilder();
|
|
339
|
+
s.append('{');
|
|
340
|
+
final int max = array.length - 1;
|
|
341
|
+
for (int i = 0; i < array.length; i++) {
|
|
342
|
+
s.append(array[i]);
|
|
343
|
+
if (i < max) {
|
|
344
|
+
s.append(',');
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return s.append('}').toString();
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
*
|
|
352
|
+
* @param array
|
|
353
|
+
* @return
|
|
354
|
+
*/
|
|
355
|
+
public static String toString(float[] array) {
|
|
356
|
+
StringBuilder s = new StringBuilder();
|
|
357
|
+
s.append('{');
|
|
358
|
+
final int max = array.length - 1;
|
|
359
|
+
for (int i = 0; i < array.length; i++) {
|
|
360
|
+
s.append(array[i]);
|
|
361
|
+
if (i < max) {
|
|
362
|
+
s.append(',');
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return s.append('}').toString();
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
*
|
|
370
|
+
* @param array
|
|
371
|
+
* @return
|
|
372
|
+
*/
|
|
373
|
+
public static String toString(int[] array) {
|
|
374
|
+
StringBuilder s = new StringBuilder();
|
|
375
|
+
s.append('{');
|
|
376
|
+
final int max = array.length - 1;
|
|
377
|
+
for (int i = 0; i < array.length; i++) {
|
|
378
|
+
s.append(array[i]);
|
|
379
|
+
if (i < max) {
|
|
380
|
+
s.append(',');
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return s.append('}').toString();
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
*
|
|
388
|
+
* @param <T>
|
|
389
|
+
* @param array
|
|
390
|
+
* @return
|
|
391
|
+
*/
|
|
392
|
+
public static <T> String toString(T[] array) {
|
|
393
|
+
StringBuilder s = new StringBuilder();
|
|
394
|
+
s.append('{');
|
|
395
|
+
final int max = array.length - 1;
|
|
396
|
+
for (int i = 0; i < array.length; i++) {
|
|
397
|
+
s.append(array[i]);
|
|
398
|
+
if (i < max) {
|
|
399
|
+
s.append(',');
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return s.append('}').toString();
|
|
403
|
+
}
|
|
404
|
+
}
|