MCPcopy Create free account
hub / github.com/benbjohnson/immutable / next

Method next

immutable.go:1491–1532  ·  view source on GitHub ↗

next moves to the next available key.

()

Source from the content-addressed store, hash-verified

1489
1490// next moves to the next available key.
1491func (itr *MapIterator[K, V]) next() {
1492 for ; itr.depth >= 0; itr.depth-- {
1493 elem := &itr.stack[itr.depth]
1494
1495 switch node := elem.node.(type) {
1496 case *mapArrayNode[K, V]:
1497 if elem.index < len(node.entries)-1 {
1498 elem.index++
1499 return
1500 }
1501
1502 case *mapBitmapIndexedNode[K, V]:
1503 if elem.index < len(node.nodes)-1 {
1504 elem.index++
1505 itr.stack[itr.depth+1].node = node.nodes[elem.index]
1506 itr.depth++
1507 itr.first()
1508 return
1509 }
1510
1511 case *mapHashArrayNode[K, V]:
1512 for i := elem.index + 1; i < len(node.nodes); i++ {
1513 if node.nodes[i] != nil {
1514 elem.index = i
1515 itr.stack[itr.depth+1].node = node.nodes[elem.index]
1516 itr.depth++
1517 itr.first()
1518 return
1519 }
1520 }
1521
1522 case *mapValueNode[K, V]:
1523 continue // always the last value, traverse up
1524
1525 case *mapHashCollisionNode[K, V]:
1526 if elem.index < len(node.entries)-1 {
1527 elem.index++
1528 return
1529 }
1530 }
1531 }
1532}
1533
1534// first positions the stack left most index.
1535// Elements and indexes at and below the current depth are assumed to be correct.

Callers 2

NextMethod · 0.95
seekMethod · 0.95

Calls 1

firstMethod · 0.95

Tested by

no test coverage detected