Lindenii Project Forge
Warning: Due to various recent migrations, viewing non-HEAD refs may be broken.
/ds/map/slice_basic/iter.ha (raw)
// SPDX-License-Identifier: MPL-2.0
use ds::map;
export type iterator = struct {
vt: map::iterator,
m: *map,
i: size,
};
const _itvt: map::vtable_iterator = map::vtable_iterator {
nexter = &vt_next,
};
fn vt_next(it: *map::iterator) (([]u8, *opaque) | done) = next(it: *iterator);
export fn iter(m: *map) (*map::iterator | nomem) = {
let it = alloc(iterator {
vt = &_itvt,
m = m,
i = 0,
})?;
return (it: *map::iterator);
};
export fn next(it: *iterator) (([]u8, *opaque) | done) = {
if (it.i >= len(it.m.items)) {
return done;
};
let kv = it.m.items[it.i];
it.i += 1;
return (kv.0, kv.1);
};