Packages
lustre
5.5.0
5.7.1
5.7.0
5.6.0
5.5.2
5.5.1
5.5.0
5.4.0
5.3.5
5.3.4
5.3.3
5.3.2
5.3.1
5.3.0
5.2.1
5.2.0
5.1.1
5.1.0
5.0.3
5.0.2
5.0.1
5.0.0
4.6.4
4.6.3
4.6.2
4.6.1
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.6
4.3.5
4.3.4
4.3.3
4.3.2
4.3.1
4.3.0
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.8
4.1.7
4.1.6
4.1.5
4.1.4
4.1.3
4.1.2
4.1.1
4.1.0
4.0.0
4.0.0-rc1
4.0.0-rc.2
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.12
3.0.11
3.0.10
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.8
3.0.0-rc.7
3.0.0-rc.6
3.0.0-rc.5
3.0.0-rc.4
3.0.0-rc.3
3.0.0-rc.2
3.0.0-rc.1
2.0.1
2.0.0
1.3.0
1.2.0
1.1.0
1.0.0
Create HTML templates, single page applications, Web Components, and real-time server components in Gleam!
Current section
Files
Jump to
Current section
Files
src/lustre/internals/mutable_map.gleam
/// A `MutableMap` functions like Gleam's `Dict` and exposes a subset of the same
/// api. As the name implies, there are some important things to know:
///
/// - On the JavaScript target, updates to the map are performed **in-place** and
/// will mutate the map directly.
///
/// - On the JavaScript target, keys in the map are compared by reference, not by
/// hash or value.
///
/// Gleam has neither mutable data structures nor reference equality, so it's
/// incredibly important to use this module with care. It is primarily intended
/// to be used durring diffing to avoid the expensive overhead of (re)constructing
/// event and keyed node lookups.
///
pub type MutableMap(key, value)
///
///
@external(erlang, "maps", "new")
@external(javascript, "./mutable_map.ffi.mjs", "empty")
pub fn new() -> MutableMap(key, value)
///
///
@external(javascript, "./mutable_map.ffi.mjs", "get")
pub fn unsafe_get(map: MutableMap(key, value), key: key) -> value {
do_get(key, map)
}
@external(erlang, "maps", "get")
fn do_get(key: key, map: MutableMap(key, value)) -> value
@external(javascript, "./mutable_map.ffi.mjs", "get_or_compute")
pub fn get_or_compute(
map: MutableMap(key, value),
key: key,
compute: fn() -> value,
) -> value {
case do_find(map, key) {
Ok(value) -> value
_ -> compute()
}
}
@external(erlang, "gleam@dict", "get")
fn do_find(map: MutableMap(key, value), key: key) -> Result(value, Nil)
///
///
@external(javascript, "./mutable_map.ffi.mjs", "has_key")
pub fn has_key(map: MutableMap(key, value), key: key) -> Bool {
do_has_key(key, map)
}
@external(erlang, "maps", "is_key")
fn do_has_key(key: key, dict: MutableMap(key, value)) -> Bool
///
///
@external(javascript, "./mutable_map.ffi.mjs", "insert")
pub fn insert(
map: MutableMap(key, value),
key: key,
value: value,
) -> MutableMap(key, value) {
do_put(key, value, map)
}
@external(erlang, "maps", "put")
fn do_put(
key: key,
value: value,
map: MutableMap(key, value),
) -> MutableMap(key, value)
///
///
@external(javascript, "./mutable_map.ffi.mjs", "remove")
pub fn delete(map: MutableMap(key, value), key: key) -> MutableMap(key, value) {
do_remove(key, map)
}
@external(erlang, "maps", "remove")
fn do_remove(key: key, map: MutableMap(key, value)) -> MutableMap(key, value)
///
///
@external(erlang, "maps", "size")
@external(javascript, "./mutable_map.ffi.mjs", "size")
pub fn size(map: MutableMap(key, value)) -> Int
///
///
pub fn is_empty(map: MutableMap(key, value)) -> Bool {
size(map) == 0
}