I don't think this discussion is really related to my change introduced in r1748015. So I leave the optimization topics to our JIT wizards ;-)
Benedikt James Carman <ja...@carmanconsulting.com> schrieb am Mo., 13. Juni 2016 um 00:02 Uhr: > That's still a tough one (breakfast). Crazy weekend. > > It looks like the switch (which to me is more readable) does a hashCode() > call first to find the right place to jump to and then does equals. So, > theoretically it would be faster, especially for large numbers of cases > (unless the compiler is smart enough to recognize when it's effectively a > switch implemented as ifs). It would be interesting to see how well it get > optimized away at runtime though (if I wasn't on vacation tomorrow I might > play with that a bit). It would also be interesting to see the compiled > bytecode side-by-side for the Sun compiler. > On Sun, Jun 12, 2016 at 5:49 PM Gary Gregory <garydgreg...@gmail.com> > wrote: > > > On Jun 12, 2016 2:45 PM, "James Carman" <ja...@carmanconsulting.com> > > wrote: > > > > > > I don't off the top of my head. All I have is anecdotal stuff in my > > brain, > > > but then again I can't remember what I had for lunch yesterday either. > :) > > > > How about breakfast this morning? ;-) > > > > Gary > > > > > > On Sun, Jun 12, 2016 at 5:42 PM dbrosIus <dbros...@baybroadband.net> > > wrote: > > > > > > > Sure I got that. I thought you had a source that explains an if/else > > > > chain getting jitted down to a simple hash jumptable > > > > > > > > -------- Original message -------- > > > > From: James Carman <ja...@carmanconsulting.com> > > > > Date: 06/12/2016 5:19 PM (GMT-05:00) > > > > To: Commons Developers List <dev@commons.apache.org> > > > > Subject: Re: svn commit: r1748015 - in > > /commons/proper/imaging/trunk/src: > > > > changes/changes.xml > > > > main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java > > > > > > test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java > > > > > > > > I was referring to JIT. > > > > > > > > On Sun, Jun 12, 2016 at 5:18 PM dbrosIus <dbros...@baybroadband.net> > > > > wrote: > > > > > > > > > Interesting. Source? > > > > > > > > > > -------- Original message -------- > > > > > From: James Carman <ja...@carmanconsulting.com> > > > > > Date: 06/12/2016 5:12 PM (GMT-05:00) > > > > > To: Commons Developers List <dev@commons.apache.org> > > > > > Subject: Re: svn commit: r1748015 - in > > /commons/proper/imaging/trunk/src: > > > > > changes/changes.xml > > > > > > main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java > > > > > > > test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java > > > > > > > > > > Doesn't it all compiled down to the same thing? It gets optimized > at > > > > > runtime anyway. I would go for the more readable option, unless > there > > are > > > > > extremely compelling performance numbers. > > > > > > > > > > On Sun, Jun 12, 2016 at 4:38 PM Benedikt Ritter < > brit...@apache.org> > > > > > wrote: > > > > > > > > > > > Yes, the if-else could also be implemented using a switch > > statement. > > > > But > > > > > is > > > > > > that really more efficient? > > > > > > > > > > > > Benedikt > > > > > > > > > > > > Gary Gregory <garydgreg...@gmail.com> schrieb am So., 12. Juni > > 2016 > > um > > > > > > 22:05: > > > > > > > > > > > > > This looks like a candidate for the more efficient switch on > > string. > > > > > > > > > > > > > > Gary > > > > > > > > > > > > > > On Sun, Jun 12, 2016 at 7:47 AM, <brit...@apache.org> wrote: > > > > > > > > > > > > > > > Author: britter > > > > > > > > Date: Sun Jun 12 14:47:11 2016 > > > > > > > > New Revision: 1748015 > > > > > > > > > > > > > > > > URL: http://svn.apache.org/viewvc?rev=1748015&view=rev > > > > > > > > Log: > > > > > > > > IMAGING-178: PnmImageParser does not check the validity of > > input > > > > PAM > > > > > > > > header. Thanks to emopers. This also fixes #20 from github. > > > > > > > > > > > > > > > > Modified: > > > > > > > > commons/proper/imaging/trunk/src/changes/changes.xml > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java > > > > > > > > > > > > > > > > Modified: > commons/proper/imaging/trunk/src/changes/changes.xml > > > > > > > > URL: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/changes/changes.xml?rev=1748015&r1=1748014&r2=1748015&view=diff > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ============================================================================== > > > > > > > > --- commons/proper/imaging/trunk/src/changes/changes.xml > > (original) > > > > > > > > +++ commons/proper/imaging/trunk/src/changes/changes.xml Sun > > Jun 12 > > > > > > > > 14:47:11 2016 > > > > > > > > @@ -46,6 +46,9 @@ The <action> type attribute can be add,u > > > > > > > > <body> > > > > > > > > > > > > > > > > <release version="1.0" date="TBA" description="First > major > > > > > > release"> > > > > > > > > + <action issue="IMAGING-178" dev="britter" type="fix" > > > > > > > > due-to="emopers"> > > > > > > > > + PnmImageParser does not check the validity of input > > PAM > > > > > > header. > > > > > > > > + </action> > > > > > > > > <action issue="IMAGING-184" dev="ggregory" > > type="update"> > > > > > > > > Update platform from Java 5 to 7 > > > > > > > > </action> > > > > > > > > > > > > > > > > Modified: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java > > > > > > > > URL: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java?rev=1748015&r1=1748014&r2=1748015&view=diff > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ============================================================================== > > > > > > > > --- > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java > > > > > > > > (original) > > > > > > > > +++ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > commons/proper/imaging/trunk/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImageParser.java > > > > > > > > Sun Jun 12 14:47:11 2016 > > > > > > > > @@ -157,18 +157,28 @@ public class PnmImageParser extends > Imag > > > > > > > > final String type = tokenizer.nextToken(); > > > > > > > > if ("WIDTH".equals(type)) { > > > > > > > > seenWidth = true; > > > > > > > > + if(!tokenizer.hasMoreTokens()) > > > > > > > > + throw new ImageReadException("PAM > > header > > > > has > > > > > > no > > > > > > > > WIDTH value"); > > > > > > > > width = > > > > Integer.parseInt(tokenizer.nextToken()); > > > > > > > > } else if ("HEIGHT".equals(type)) { > > > > > > > > seenHeight = true; > > > > > > > > + if(!tokenizer.hasMoreTokens()) > > > > > > > > + throw new ImageReadException("PAM > > header > > > > has > > > > > > no > > > > > > > > HEIGHT value"); > > > > > > > > height = > > > > > Integer.parseInt(tokenizer.nextToken()); > > > > > > > > } else if ("DEPTH".equals(type)) { > > > > > > > > seenDepth = true; > > > > > > > > + if(!tokenizer.hasMoreTokens()) > > > > > > > > + throw new ImageReadException("PAM > > header > > > > has > > > > > > no > > > > > > > > DEPTH value"); > > > > > > > > depth = > > > > Integer.parseInt(tokenizer.nextToken()); > > > > > > > > } else if ("MAXVAL".equals(type)) { > > > > > > > > seenMaxVal = true; > > > > > > > > + if(!tokenizer.hasMoreTokens()) > > > > > > > > + throw new ImageReadException("PAM > > header > > > > has > > > > > > no > > > > > > > > MAXVAL value"); > > > > > > > > maxVal = > > > > > Integer.parseInt(tokenizer.nextToken()); > > > > > > > > } else if ("TUPLTYPE".equals(type)) { > > > > > > > > seenTupleType = true; > > > > > > > > + if(!tokenizer.hasMoreTokens()) > > > > > > > > + throw new ImageReadException("PAM > > header > > > > has > > > > > > no > > > > > > > > TUPLTYPE value"); > > > > > > > > tupleType.append(tokenizer.nextToken()); > > > > > > > > } else if ("ENDHDR".equals(type)) { > > > > > > > > break; > > > > > > > > > > > > > > > > Modified: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java > > > > > > > > URL: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > http://svn.apache.org/viewvc/commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java?rev=1748015&r1=1748014&r2=1748015&view=diff > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ============================================================================== > > > > > > > > --- > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java > > > > > > > > (original) > > > > > > > > +++ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > commons/proper/imaging/trunk/src/test/java/org/apache/commons/imaging/formats/pnm/PnmImageParserTest.java > > > > > > > > Sun Jun 12 14:47:11 2016 > > > > > > > > @@ -46,4 +46,12 @@ public class PnmImageParserTest { > > > > > > > > PnmImageParser underTest = new PnmImageParser(); > > > > > > > > underTest.getImageInfo(bytes, params); > > > > > > > > } > > > > > > > > + > > > > > > > > + @Test(expected = ImageReadException.class) > > > > > > > > + public void testGetImageInfo_missingWidthValue() throws > > > > > > > > ImageReadException, IOException { > > > > > > > > + byte[] bytes = "P7\nWIDTH \n".getBytes(US_ASCII); > > > > > > > > + Map<String, Object> params = Collections.emptyMap(); > > > > > > > > + PnmImageParser underTest = new PnmImageParser(); > > > > > > > > + underTest.getImageInfo(bytes, params); > > > > > > > > + } > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > > > > > > > Java Persistence with Hibernate, Second Edition > > > > > > > <http://www.manning.com/bauer3/> > > > > > > > JUnit in Action, Second Edition < > > http://www.manning.com/tahchiev/> > > > > > > > Spring Batch in Action <http://www.manning.com/templier/> > > > > > > > Blog: http://garygregory.wordpress.com > > > > > > > Home: http://garygregory.com/ > > > > > > > Tweet! http://twitter.com/GaryGregory > > > > > > > > > > > > > > > > > > > > > > > > >