diff --git a/graph/bolt/quadstore.go b/graph/bolt/quadstore.go index 16bf75a..08ceb69 100644 --- a/graph/bolt/quadstore.go +++ b/graph/bolt/quadstore.go @@ -136,18 +136,28 @@ func bucketFor(d [4]quad.Direction) []byte { return []byte{d[0].Prefix(), d[1].Prefix(), d[2].Prefix(), d[3].Prefix()} } +func hashOf(s string) []byte { + h := hashPool.Get().(hash.Hash) + h.Reset() + defer hashPool.Put(h) + key := make([]byte, 0, hashSize) + h.Write([]byte(s)) + key = h.Sum(key) + return key +} + func (qs *QuadStore) createKeyFor(d [4]quad.Direction, q quad.Quad) []byte { key := make([]byte, 0, (hashSize * 4)) - key = append(key, qs.hashOf(q.Get(d[0]))...) - key = append(key, qs.hashOf(q.Get(d[1]))...) - key = append(key, qs.hashOf(q.Get(d[2]))...) - key = append(key, qs.hashOf(q.Get(d[3]))...) + key = append(key, hashOf(q.Get(d[0]))...) + key = append(key, hashOf(q.Get(d[1]))...) + key = append(key, hashOf(q.Get(d[2]))...) + key = append(key, hashOf(q.Get(d[3]))...) return key } func (qs *QuadStore) createValueKeyFor(s string) []byte { key := make([]byte, 0, hashSize) - key = append(key, qs.hashOf(s)...) + key = append(key, hashOf(s)...) return key } @@ -379,16 +389,6 @@ func (qs *QuadStore) Quad(k graph.Value) quad.Quad { return q } -func (qs *QuadStore) hashOf(s string) []byte { - h := hashPool.Get().(hash.Hash) - h.Reset() - defer hashPool.Put(h) - key := make([]byte, 0, hashSize) - h.Write([]byte(s)) - key = h.Sum(key) - return key -} - func (qs *QuadStore) ValueOf(s string) graph.Value { return &Token{ bucket: nodeBucket, diff --git a/graph/leveldb/quadstore.go b/graph/leveldb/quadstore.go index c140277..828ab46 100644 --- a/graph/leveldb/quadstore.go +++ b/graph/leveldb/quadstore.go @@ -146,21 +146,31 @@ func (qa *QuadStore) createDeltaKeyFor(d graph.Delta) []byte { return key } +func hashOf(s string) []byte { + h := hashPool.Get().(hash.Hash) + h.Reset() + defer hashPool.Put(h) + key := make([]byte, 0, hashSize) + h.Write([]byte(s)) + key = h.Sum(key) + return key +} + func (qs *QuadStore) createKeyFor(d [4]quad.Direction, q quad.Quad) []byte { key := make([]byte, 0, 2+(hashSize*3)) // TODO(kortschak) Remove dependence on String() method. key = append(key, []byte{d[0].Prefix(), d[1].Prefix()}...) - key = append(key, qs.hashOf(q.Get(d[0]))...) - key = append(key, qs.hashOf(q.Get(d[1]))...) - key = append(key, qs.hashOf(q.Get(d[2]))...) - key = append(key, qs.hashOf(q.Get(d[3]))...) + key = append(key, hashOf(q.Get(d[0]))...) + key = append(key, hashOf(q.Get(d[1]))...) + key = append(key, hashOf(q.Get(d[2]))...) + key = append(key, hashOf(q.Get(d[3]))...) return key } func (qs *QuadStore) createValueKeyFor(s string) []byte { key := make([]byte, 0, 1+hashSize) key = append(key, []byte("z")...) - key = append(key, qs.hashOf(s)...) + key = append(key, hashOf(s)...) return key } @@ -347,16 +357,6 @@ func (qs *QuadStore) Quad(k graph.Value) quad.Quad { return q } -func (qs *QuadStore) hashOf(s string) []byte { - h := hashPool.Get().(hash.Hash) - h.Reset() - defer hashPool.Put(h) - key := make([]byte, 0, hashSize) - h.Write([]byte(s)) - key = h.Sum(key) - return key -} - func (qs *QuadStore) ValueOf(s string) graph.Value { return Token(qs.createValueKeyFor(s)) } diff --git a/graph/mongo/quadstore.go b/graph/mongo/quadstore.go index b4e6fd5..12e6400 100644 --- a/graph/mongo/quadstore.go +++ b/graph/mongo/quadstore.go @@ -102,14 +102,14 @@ func newQuadStore(addr string, options graph.Options) (graph.QuadStore, error) { } func (qs *QuadStore) getIdForQuad(t quad.Quad) string { - id := qs.hashOf(t.Subject) - id += qs.hashOf(t.Predicate) - id += qs.hashOf(t.Object) - id += qs.hashOf(t.Label) + id := hashOf(t.Subject) + id += hashOf(t.Predicate) + id += hashOf(t.Object) + id += hashOf(t.Label) return id } -func (qs *QuadStore) hashOf(s string) string { +func hashOf(s string) string { h := hashPool.Get().(hash.Hash) h.Reset() defer hashPool.Put(h) @@ -288,7 +288,7 @@ func (qs *QuadStore) QuadsAllIterator() graph.Iterator { } func (qs *QuadStore) ValueOf(s string) graph.Value { - return qs.hashOf(s) + return hashOf(s) } func (qs *QuadStore) NameOf(v graph.Value) string {