Lindenii Project Forge
Login

hare-ds

Data structures for Hare

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))?;
};