Repository

Dusk Kelvin Map

Binary search tree implementation with no associated value on the nodes.

It will extend the standard properties of a default BST. The worst case scenario time complexity for inserting and searching is O(n).

Currently, no delete operation is implemented. The intended transaction management is to be performed via the Kelvin storage implementation.

This map-like implementation uses Microkelvin as backend and is optimized to work under constrained/hosted environments such as WASM runtimes.

Example

```rust use canonicalhost::MemStore; use duskkelvin_map::Map;

// Create a new map u64 -> u32 that will use MemStore as storage backend let mut map: Map = Map::default();

// Insert a new mapping 2 -> 4 let insert = "Failed to insert data."; map.insert(2, 4).expect(insert);

// Fetch the key 2 and expect it to be 4 let traversal = "Error traversing the map."; let noleaf = "No valid leaf was found for the provided key."; let value = map.get(&2).expect(traversal).expect(noleaf); assert_eq!(4, value);

// Replace the key 2 with 5 via insert method let key = "The key was previously inserted and now should be returned as replacement."; let old = map.insert(2, 5).expect(insert).expect(key); let new = map.get(&2).expect(traversal).expect(noleaf); asserteq!(4, old); assert_eq!(5, new);

// Mutate the key 2 to the previous value + 2, and return the new value + 1 // Since the previous value is 5, the new value should be 7, and the returned mapping should be 8 let mapfn = "Error executing a mutable map over the value."; let mapmutated = map .mapmut(&2, |v| { *v += 2; *v + 1 }) .expect(mapfn) .expect(noleaf); let value = map.get(&2).expect(traversal).expect(noleaf); asserteq!(8, mapmutated); assert_eq!(7, value); ```