MCPcopy Create free account
hub / github.com/couchbase/moss / iteratorNextFunc

Function iteratorNextFunc

smat.go:430–504  ·  view source on GitHub ↗
(ctx smat.Context)

Source from the content-addressed store, hash-verified

428}
429
430func iteratorNextFunc(ctx smat.Context) (next smat.State, err error) {
431 c := ctx.(*smatContext)
432 if len(c.iterators) <= 0 {
433 return running, nil
434 }
435 if len(c.iterators) != len(c.iteratorMirrors) {
436 return running, fmt.Errorf("len iterators != len iteratorMirrors")
437 }
438 smatLog(prefix, "numIterators: %d\n", len(c.iterators))
439
440 iterIdx := c.curIterator % len(c.iterators)
441 iter := c.iterators[iterIdx]
442 iterMirror := c.iteratorMirrors[iterIdx]
443
444 smatLog(prefix, "iteratorNext: %p, %#v\n", iter, iter)
445
446 iteratorActual, ok := iter.(*iterator)
447 if ok {
448 smatLog(prefix, "iteratorNext.ss: %p, %#v\n", iteratorActual.ss, iteratorActual.ss)
449 smatLog(prefix, "iteratorNext.llIter: %#v\n", iteratorActual.lowerLevelIter)
450 lli, ok := iteratorActual.lowerLevelIter.(*iterator)
451 if ok {
452 smatLog(prefix, "iteratorNext.llIter: %#v\n", lli)
453
454 iss := lli.ss
455 itr, _ := iss.StartIterator(nil, nil, IteratorOptions{})
456 smatLog(prefix, "iteratorNext check itr: %p, %#v\n", itr, itr)
457 i := 0
458 for {
459 var ik, iv []byte
460 ik, iv, err = itr.Current()
461 smatLog(prefix, "== iteratorNext, check itr i: %d, k: %s, v: %s, err: %v\n", i, ik, iv, err)
462 if err == ErrIteratorDone {
463 break
464 }
465 err = itr.Next()
466 if err == ErrIteratorDone {
467 break
468 }
469 i++
470 }
471 itr.Close()
472 }
473 }
474
475 err = iter.Next()
476 iterMirror.pos++
477 smatLog(prefix, "iterIdx: %d, iterMirror.pos: %d, iterMirror.iter.ss: %+v\n",
478 iterIdx, iterMirror.pos, iterMirror.ss)
479 if err != nil && err != ErrIteratorDone {
480 return nil, err
481 }
482 k, v, err := iter.Current()
483 if err != nil {
484 if err != ErrIteratorDone {
485 return nil, err
486 }
487 if iterMirror.pos < len(iterMirror.ss.keys) {

Callers

nothing calls this directly

Calls 5

smatLogFunction · 0.85
StartIteratorMethod · 0.65
CurrentMethod · 0.65
NextMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…