Lines Matching defs:iter
2150 hamt_iterator_next(PyHamtIteratorState *iter, PyObject **key, PyObject **val);
2154 hamt_iterator_init(PyHamtIteratorState *iter, PyHamtNode *root)
2157 iter->i_nodes[i] = NULL;
2158 iter->i_pos[i] = 0;
2161 iter->i_level = 0;
2164 iter->i_nodes[0] = root;
2168 hamt_iterator_bitmap_next(PyHamtIteratorState *iter,
2171 int8_t level = iter->i_level;
2173 PyHamtNode_Bitmap *node = (PyHamtNode_Bitmap *)(iter->i_nodes[level]);
2174 Py_ssize_t pos = iter->i_pos[level];
2178 assert(iter->i_level >= 0);
2179 iter->i_nodes[iter->i_level] = NULL;
2181 iter->i_level--;
2182 return hamt_iterator_next(iter, key, val);
2186 iter->i_pos[level] = pos + 2;
2190 iter->i_level = next_level;
2191 iter->i_pos[next_level] = 0;
2192 iter->i_nodes[next_level] = (PyHamtNode *)
2195 return hamt_iterator_next(iter, key, val);
2200 iter->i_pos[level] = pos + 2;
2205 hamt_iterator_collision_next(PyHamtIteratorState *iter,
2208 int8_t level = iter->i_level;
2210 PyHamtNode_Collision *node = (PyHamtNode_Collision *)(iter->i_nodes[level]);
2211 Py_ssize_t pos = iter->i_pos[level];
2215 assert(iter->i_level >= 0);
2216 iter->i_nodes[iter->i_level] = NULL;
2218 iter->i_level--;
2219 return hamt_iterator_next(iter, key, val);
2224 iter->i_pos[level] = pos + 2;
2229 hamt_iterator_array_next(PyHamtIteratorState *iter,
2232 int8_t level = iter->i_level;
2234 PyHamtNode_Array *node = (PyHamtNode_Array *)(iter->i_nodes[level]);
2235 Py_ssize_t pos = iter->i_pos[level];
2239 assert(iter->i_level >= 0);
2240 iter->i_nodes[iter->i_level] = NULL;
2242 iter->i_level--;
2243 return hamt_iterator_next(iter, key, val);
2248 iter->i_pos[level] = i + 1;
2252 iter->i_pos[next_level] = 0;
2253 iter->i_nodes[next_level] = node->a_array[i];
2254 iter->i_level = next_level;
2256 return hamt_iterator_next(iter, key, val);
2261 assert(iter->i_level >= 0);
2262 iter->i_nodes[iter->i_level] = NULL;
2265 iter->i_level--;
2266 return hamt_iterator_next(iter, key, val);
2270 hamt_iterator_next(PyHamtIteratorState *iter, PyObject **key, PyObject **val)
2272 if (iter->i_level < 0) {
2276 assert(iter->i_level < _Py_HAMT_MAX_TREE_DEPTH);
2278 PyHamtNode *current = iter->i_nodes[iter->i_level];
2281 return hamt_iterator_bitmap_next(iter, key, val);
2284 return hamt_iterator_array_next(iter, key, val);
2288 return hamt_iterator_collision_next(iter, key, val);
2420 PyHamtIteratorState iter;
2427 hamt_iterator_init(&iter, v->h_root);
2430 iter_res = hamt_iterator_next(&iter, &v_key, &v_val);