From: <jom...@us...> - 2014-10-17 15:44:15
|
Revision: 1815 http://sourceforge.net/p/jason/svn/1815 Author: jomifred Date: 2014-10-17 15:44:12 +0000 (Fri, 17 Oct 2014) Log Message: ----------- improve compareTo methods to profit the performance of Java 8 hash maps Modified Paths: -------------- trunk/src/jason/asSemantics/Intention.java trunk/src/jason/asSyntax/PredicateIndicator.java trunk/src/jason/bb/DefaultBeliefBase.java trunk/src/test/TermTest.java Modified: trunk/src/jason/asSemantics/Intention.java =================================================================== --- trunk/src/jason/asSemantics/Intention.java 2014-10-07 18:23:22 UTC (rev 1814) +++ trunk/src/jason/asSemantics/Intention.java 2014-10-17 15:44:12 UTC (rev 1815) @@ -167,6 +167,9 @@ public int compareTo(Intention o) { if (o.atomicCount > this.atomicCount) return 1; if (this.atomicCount > o.atomicCount) return -1; + + if (o.id > this.id) return 1; + if (this.id > o.id) return -1; return 0; } @@ -178,7 +181,7 @@ } public int hashCode() { - return String.valueOf(id).hashCode(); + return new Integer(id).hashCode(); } public Intention clone() { Modified: trunk/src/jason/asSyntax/PredicateIndicator.java =================================================================== --- trunk/src/jason/asSyntax/PredicateIndicator.java 2014-10-07 18:23:22 UTC (rev 1814) +++ trunk/src/jason/asSyntax/PredicateIndicator.java 2014-10-17 15:44:12 UTC (rev 1815) @@ -7,7 +7,7 @@ * * @author jomi */ -public final class PredicateIndicator implements Serializable { +public final class PredicateIndicator implements Comparable<PredicateIndicator>, Serializable { private final String functor; private final int arity; @@ -47,6 +47,15 @@ return hash; } + @Override + public int compareTo(PredicateIndicator pi) { + int c = this.functor.compareTo(pi.functor); + if (c != 0) return c; + if (pi.arity > this.arity) return -1; + if (this.arity > pi.arity) return 1; + return 0; + } + private int calcHash() { final int PRIME = 31; int t = PRIME * arity; Modified: trunk/src/jason/bb/DefaultBeliefBase.java =================================================================== --- trunk/src/jason/bb/DefaultBeliefBase.java 2014-10-07 18:23:22 UTC (rev 1814) +++ trunk/src/jason/bb/DefaultBeliefBase.java 2014-10-17 15:44:12 UTC (rev 1815) @@ -362,12 +362,13 @@ } /** a literal that uses equalsAsTerm for equals */ - final class LiteralWrapper { + final class LiteralWrapper implements Comparable<LiteralWrapper> { final private Literal l; public LiteralWrapper(Literal l) { this.l = l; } public int hashCode() { return l.hashCode(); } public boolean equals(Object o) { return o instanceof LiteralWrapper && l.equalsAsStructure(((LiteralWrapper)o).l); } public String toString() { return l.toString(); } + public int compareTo(LiteralWrapper o) { return l.compareTo(o.l); } } } } Modified: trunk/src/test/TermTest.java =================================================================== --- trunk/src/test/TermTest.java 2014-10-07 18:23:22 UTC (rev 1814) +++ trunk/src/test/TermTest.java 2014-10-17 15:44:12 UTC (rev 1815) @@ -16,6 +16,7 @@ import jason.asSyntax.ObjectTermImpl; import jason.asSyntax.Plan; import jason.asSyntax.Pred; +import jason.asSyntax.PredicateIndicator; import jason.asSyntax.StringTermImpl; import jason.asSyntax.Structure; import jason.asSyntax.Term; @@ -658,6 +659,18 @@ assertTrue(new ListTermImpl().compareTo(new StringTermImpl("string")) > 0); } + public void testComparePI() { + List<PredicateIndicator> l = new ArrayList<PredicateIndicator>(); + l.add(new PredicateIndicator("b", 2)); + l.add(new PredicateIndicator("b", 7)); + l.add(new PredicateIndicator("a", 2)); + l.add(new PredicateIndicator("a", 4)); + l.add(new PredicateIndicator("a", 1)); + l.add(new PredicateIndicator("b", 5)); + Collections.sort(l); + assertEquals("[a/1, a/2, a/4, b/2, b/5, b/7]", l.toString()); + } + public void testUnify4() throws ParseException { Term a1 = ASSyntax.parseTerm("a(1)"); Term a2 = ASSyntax.parseTerm("a(X+1)"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |