Updated Branches: refs/heads/develop 3bd9c85f1 -> 7c1f7d766
yet another take at MARMOTTA-401 Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/7c1f7d76 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/7c1f7d76 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/7c1f7d76 Branch: refs/heads/develop Commit: 7c1f7d7667dc4fca8a751ece877333d3c23eaded Parents: 3bd9c85 Author: Sebastian Schaffert <[email protected]> Authored: Fri Dec 13 17:20:00 2013 +0100 Committer: Sebastian Schaffert <[email protected]> Committed: Fri Dec 13 17:20:00 2013 +0100 ---------------------------------------------------------------------- .../commons/sesame/tripletable/IntArray.java | 28 +++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/7c1f7d76/commons/sesame-tripletable/src/main/java/org/apache/marmotta/commons/sesame/tripletable/IntArray.java ---------------------------------------------------------------------- diff --git a/commons/sesame-tripletable/src/main/java/org/apache/marmotta/commons/sesame/tripletable/IntArray.java b/commons/sesame-tripletable/src/main/java/org/apache/marmotta/commons/sesame/tripletable/IntArray.java index e7867b3..f1fe2ce 100644 --- a/commons/sesame-tripletable/src/main/java/org/apache/marmotta/commons/sesame/tripletable/IntArray.java +++ b/commons/sesame-tripletable/src/main/java/org/apache/marmotta/commons/sesame/tripletable/IntArray.java @@ -21,6 +21,7 @@ import com.google.common.hash.HashCode; import com.google.common.hash.HashFunction; import com.google.common.hash.Hasher; import com.google.common.hash.Hashing; +import org.openrdf.model.Literal; import org.openrdf.model.Resource; import org.openrdf.model.URI; import org.openrdf.model.Value; @@ -75,7 +76,7 @@ public final class IntArray implements Comparable<IntArray> { int s = subject != null ? subject.hashCode() : Integer.MIN_VALUE; int p = property != null ? property.hashCode() : Integer.MIN_VALUE; - int o = object != null ? (object.hashCode() + 31 * object.getClass().hashCode()) : Integer.MIN_VALUE; + int o = object != null ? calcObjectHash(object) : Integer.MIN_VALUE; int c = context != null ? context.hashCode() : Integer.MIN_VALUE; IntBuffer bb = IntBuffer.allocate(4); @@ -95,7 +96,7 @@ public final class IntArray implements Comparable<IntArray> { int s = subject != null ? subject.hashCode() : Integer.MAX_VALUE; int p = property != null ? property.hashCode() : Integer.MAX_VALUE; - int o = object != null ? (object.hashCode() + 31 * object.getClass().hashCode()) : Integer.MAX_VALUE; + int o = object != null ? calcObjectHash(object) : Integer.MAX_VALUE; int c = context != null ? context.hashCode() : Integer.MAX_VALUE; IntBuffer bb = IntBuffer.allocate(4); @@ -115,7 +116,7 @@ public final class IntArray implements Comparable<IntArray> { int s = subject != null ? subject.hashCode() : Integer.MIN_VALUE; int p = property != null ? property.hashCode() : Integer.MIN_VALUE; - int o = object != null ? (object.hashCode() + 31 * object.getClass().hashCode()) : Integer.MIN_VALUE; + int o = object != null ? calcObjectHash(object) : Integer.MIN_VALUE; int c = context != null ? context.hashCode() : Integer.MIN_VALUE; IntBuffer bb = IntBuffer.allocate(4); @@ -135,7 +136,7 @@ public final class IntArray implements Comparable<IntArray> { int s = subject != null ? subject.hashCode() : Integer.MAX_VALUE; int p = property != null ? property.hashCode() : Integer.MAX_VALUE; - int o = object != null ? (object.hashCode() + 31 * object.getClass().hashCode()) : Integer.MAX_VALUE; + int o = object != null ? calcObjectHash(object) : Integer.MAX_VALUE; int c = context != null ? context.hashCode() : Integer.MAX_VALUE; IntBuffer bb = IntBuffer.allocate(4); @@ -148,6 +149,25 @@ public final class IntArray implements Comparable<IntArray> { } + private static int calcObjectHash(Value value) { + if(value instanceof Literal) { + int i = value.stringValue().hashCode(); + if(((Literal) value).getLanguage() != null) { + i = i*31 + ((Literal) value).getLanguage().hashCode(); + } else { + i = i*31; + } + if(((Literal) value).getDatatype() != null) { + i = i*31 + ((Literal) value).getDatatype().hashCode(); + } else { + i = i*31; + } + return i; + } else { + return value.hashCode(); + } + } + @Override public String toString() { return "IntArray{" +
