Lindenii Project Forge
Warning: Due to various recent migrations, viewing non-HEAD refs may be broken.
/ds/map/slice_basic/set.ha (raw)
// SPDX-License-Identifier: MPL-2.0
use bytes;
fn dup_u8(src: []u8) ([]u8 | nomem) = {
return match (alloc(src, len(src))) {
case let b: []u8 => yield b;
case nomem => return nomem;
};
};
// Sets an item in a [[map]], replacing any existing item with the same key.
export fn set(m: *map, key: []u8, value: *opaque) (void | nomem) = {
for (let i = 0z; i < len(m.items); i += 1) {
if (bytes::equal(m.items[i].0, key)) {
m.items[i].1 = value;
return;
};
};
let kb = match (dup_u8(key)) {
case let b: []u8 => yield b;
case nomem => return nomem;
};
append(m.items, (kb, value))?;
};