Move SubIterator handling out of Base

This commit is contained in:
kortschak 2014-07-30 12:11:14 +09:30
parent 189910c4b8
commit 525230206a
9 changed files with 46 additions and 1 deletions

View file

@ -103,6 +103,11 @@ func (it *Int64) Next() (graph.Value, bool) {
return graph.NextLogOut(it, val, true) return graph.NextLogOut(it, val, true)
} }
// No sub-iterators.
func (it *Int64) SubIterators() []graph.Iterator {
return nil
}
// The number of elements in an Int64 is the size of the range. // The number of elements in an Int64 is the size of the range.
// The size is exact. // The size is exact.
func (it *Int64) Size() (int64, bool) { func (it *Int64) Size() (int64, bool) {

View file

@ -149,6 +149,11 @@ func (it *Fixed) Next() (graph.Value, bool) {
return graph.NextLogOut(it, out, true) return graph.NextLogOut(it, out, true)
} }
// No sub-iterators.
func (it *Fixed) SubIterators() []graph.Iterator {
return nil
}
// Optimize() for a Fixed iterator is simple. Returns a Null iterator if it's empty // Optimize() for a Fixed iterator is simple. Returns a Null iterator if it's empty
// (so that other iterators upstream can treat this as null) or there is no // (so that other iterators upstream can treat this as null) or there is no
// optimization. // optimization.

View file

@ -35,7 +35,7 @@ import (
"github.com/google/cayley/graph" "github.com/google/cayley/graph"
) )
// An optional iterator has the subconstraint iterator we wish to be optional // An optional iterator has the sub-constraint iterator we wish to be optional
// and whether the last check we received was true or false. // and whether the last check we received was true or false.
type Optional struct { type Optional struct {
Base Base
@ -95,6 +95,11 @@ func (it *Optional) NextResult() bool {
return false return false
} }
// No subiterators.
func (it *Optional) SubIterators() []graph.Iterator {
return nil
}
// Check() is the real hack of this iterator. It always returns true, regardless // Check() is the real hack of this iterator. It always returns true, regardless
// of whether the subiterator matched. But we keep track of whether the subiterator // of whether the subiterator matched. But we keep track of whether the subiterator
// matched for results purposes. // matched for results purposes.

View file

@ -159,6 +159,11 @@ func (it *Comparison) NextResult() bool {
return true return true
} }
// No subiterators.
func (it *Comparison) SubIterators() []graph.Iterator {
return nil
}
func (it *Comparison) Check(val graph.Value) bool { func (it *Comparison) Check(val graph.Value) bool {
if !it.doComparison(val) { if !it.doComparison(val) {
return false return false

View file

@ -121,6 +121,11 @@ func (it *AllIterator) Next() (graph.Value, bool) {
return out, true return out, true
} }
// No subiterators.
func (it *AllIterator) SubIterators() []graph.Iterator {
return nil
}
func (it *AllIterator) Check(v graph.Value) bool { func (it *AllIterator) Check(v graph.Value) bool {
it.Last = v it.Last = v
return true return true

View file

@ -146,6 +146,11 @@ func (it *Iterator) Next() (graph.Value, bool) {
return nil, false return nil, false
} }
// No subiterators.
func (it *Iterator) SubIterators() []graph.Iterator {
return nil
}
func PositionOf(prefix []byte, d graph.Direction, ts *TripleStore) int { func PositionOf(prefix []byte, d graph.Direction, ts *TripleStore) int {
if bytes.Equal(prefix, []byte("sp")) { if bytes.Equal(prefix, []byte("sp")) {
switch d { switch d {

View file

@ -31,6 +31,11 @@ func NewMemstoreAllIterator(ts *TripleStore) *AllIterator {
return &out return &out
} }
// No subiterators.
func (it *AllIterator) SubIterators() []graph.Iterator {
return nil
}
func (it *AllIterator) Next() (graph.Value, bool) { func (it *AllIterator) Next() (graph.Value, bool) {
next, out := it.Int64.Next() next, out := it.Int64.Next()
if !out { if !out {

View file

@ -105,6 +105,11 @@ func (it *Iterator) Next() (graph.Value, bool) {
return graph.NextLogOut(it, it.Last, true) return graph.NextLogOut(it, it.Last, true)
} }
// No subiterators.
func (it *Iterator) SubIterators() []graph.Iterator {
return nil
}
func (it *Iterator) Size() (int64, bool) { func (it *Iterator) Size() (int64, bool) {
return int64(it.tree.Len()), true return int64(it.tree.Len()), true
} }

View file

@ -162,6 +162,11 @@ func (it *Iterator) Next() (graph.Value, bool) {
return result.Id, true return result.Id, true
} }
// No subiterators.
func (it *Iterator) SubIterators() []graph.Iterator {
return nil
}
func (it *Iterator) Check(v graph.Value) bool { func (it *Iterator) Check(v graph.Value) bool {
graph.CheckLogIn(it, v) graph.CheckLogIn(it, v)
if it.isAll { if it.isAll {