next moves to the next available key.
()
| 1489 | |
| 1490 | // next moves to the next available key. |
| 1491 | func (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. |