Jim, Sorry to make you under pressure ! But path2d is too slow due to its initial design, and I feel you want me to propose too much perfect changes .... but let us stay pragmatic and apply the KISS rule= keep it simple !
Cheers, Have a nice week end. PS: I improved a bit marlin ... Laurent Le 10 avr. 2015 21:08, "Laurent Bourgès" <bourges.laur...@gmail.com> a écrit : > Jim, > > Please consider other changes also ! > > I added the trim method after the discussion. I can remove it if it makes > you approve the patch quicker. > > Laurent > Le 10 avr. 2015 20:51, "Jim Graham" <james.gra...@oracle.com> a écrit : > >> Hi Laurent, >> >> Adding a new method is not as simple as just sending a webrev. We'll >> need to do some other internal processes to get approval for that... >> >> ...jim >> >> On 4/10/15 8:07 AM, Laurent Bourgès wrote: >> >>> Jim, >>> >>> Here is the new webrev: >>> http://cr.openjdk.java.net/~lbourges/path2D/Path2D_needRoom.1/ >>> >>> Changes: >>> - needRoom() applies your pseudo-code; see expandPointTypes() and >>> expandCoords() >>> - added a new public trimToSize() method to Path2D implemented by both >>> Path2D.Float and Path2D.Double classes >>> >>> Cheers, >>> Laurent >>> >>> 2015-04-08 22:53 GMT+02:00 Jim Graham <james.gra...@oracle.com >>> <mailto:james.gra...@oracle.com>>: >>> >>> Hi Laurent, >>> >>> I'd probably do: >>> >>> int newsizemin = oldcount + newitems; >>> if (newsizemin < oldcount) { >>> // hard overflow failure - we can't even accommodate >>> // new items without overflowing >>> return failure, throw exception? >>> } >>> int newsize = <growth algorithm computation>; >>> if (newsize < newsizemin) { >>> // overflow in growth algorithm computation >>> newsize = newsizemin; >>> ... OR ... >>> newsize = MAX_INT; >>> } >>> while (true) { >>> try { >>> allocate newsize; >>> break; (or return?) >>> } catch (OOME e) { >>> if (newsize == newsizemin) { >>> throw e; >>> } >>> } >>> newsize = newsizemin + (newsize - newsizemin) / 2; >>> } >>> >>>