Module key2value

Key2Value

Maintain 2 lookups for 2 separate keys and 1 value.

Copyright © 2011-2022 Michael Truog

Version: 2.0.5 Oct 11 2022 19:23:05 ------------------------------------------------------------------------

Authors: Michael Truog (mjtruog at protonmail dot com).

Description

Key2Value

Maintain 2 lookups for 2 separate keys and 1 value. The interface creates a bidirectional lookup where key1 can store multiple key2 associations to the same value. The supplied data structure module must have dict interface functions (unless the module is maps).

Data Types

dict_proxy()

dict_proxy(Key, Value) = dict:dict(Key, Value)

key1()

key1() = any()

key2()

key2() = any()

key2value()

key2value(Key1, Key2, Value) = key2value_dict(Key1, Key2, Value) | #key2value{module = module(), lookup1 = any(), lookup2 = any()}

key2value_dict()

key2value_dict(Key1, Key2, Value) = {key2value, dict, dict_proxy(Key1, {[Key2], Value}), dict_proxy(Key2, {[Key1], Value})}

value()

value() = any()

Function Index

erase/3

Erase a single value.

.
erase1/2

Erase all values with key1.

.
erase2/2

Erase all values with key2.

.
fetch1/2

Fetch a value with key1.

.
fetch2/2

Fetch a value with key2.

.
find1/2

Find a value with key1.

.
find2/2

Find a value with key2.

.
fold1/3

Fold over all values based on key1.

.
fold2/3

Fold over all values based on key2.

.
is_key1/2

Check if key1 has at least one value.

.
is_key2/2

Check if key2 has at least one value.

.
map1/3

Map over all key1 values that exist.

.
map2/3

Map over all key2 values that exist.

.
new/0

Create a new lookup.

.
new/1

Create a new lookup with a module that provides a dict interface.

maps is supported, though it does not provide a dict interface.
size1/1

Size based on key1.

.
size2/1

Size based on key2.

.
store/4

Store a value with key1 and key2.

.
update1/3

Update a value that exists with key1.

.
update2/3

Update a value that exists with key2.

.

Function Details

erase/3

erase(K1::key1(), K2::key2(), State::key2value(key1(), key2(), value())) -> key2value(key1(), key2(), value())

Erase a single value.

erase1/2

erase1(K::key1(), State::key2value(key1(), key2(), value())) -> key2value(key1(), key2(), value())

Erase all values with key1.

erase2/2

erase2(K::key2(), State::key2value(key1(), key2(), value())) -> key2value(key1(), key2(), value())

Erase all values with key2.

fetch1/2

fetch1(K::key1(), Key2value::key2value(key1(), key2(), value())) -> {list(), any()}

Fetch a value with key1.

fetch2/2

fetch2(K::key2(), Key2value::key2value(key1(), key2(), value())) -> {list(), any()}

Fetch a value with key2.

find1/2

find1(K::key1(), State::key2value(key1(), key2(), value())) -> {ok, {list(), any()}} | error

Find a value with key1.

find2/2

find2(K::key2(), State::key2value(key1(), key2(), value())) -> {ok, {list(), any()}} | error

Find a value with key2.

fold1/3

fold1(F::fun((key1(), [key2()], value(), any()) -> any()), A0::any(), State::key2value(key1(), key2(), value())) -> any()

Fold over all values based on key1.

fold2/3

fold2(F::fun(([key1()], key2(), value(), any()) -> any()), A0::any(), State::key2value(key1(), key2(), value())) -> any()

Fold over all values based on key2.

is_key1/2

is_key1(K::key1(), Key2value::key2value(key1(), key2(), value())) -> boolean()

Check if key1 has at least one value.

is_key2/2

is_key2(K::key2(), Key2value::key2value(key1(), key2(), value())) -> boolean()

Check if key2 has at least one value.

map1/3

map1(K1::key1(), F::fun((value()) -> value()), Key2value::key2value(key1(), key2(), value())) -> key2value(key1(), key2(), value())

Map over all key1 values that exist.

map2/3

map2(K2::key2(), F::fun((value()) -> value()), Key2value::key2value(key1(), key2(), value())) -> key2value(key1(), key2(), value())

Map over all key2 values that exist.

new/0

new() -> key2value_dict(key1(), key2(), value())

Create a new lookup.

new/1

new(Module::atom()) -> key2value(key1(), key2(), value())

Create a new lookup with a module that provides a dict interface.

maps is supported, though it does not provide a dict interface.

size1/1

size1(Key2value::key2value(key1(), key2(), value())) -> non_neg_integer()

Size based on key1.

size2/1

size2(Key2value::key2value(key1(), key2(), value())) -> non_neg_integer()

Size based on key2.

store/4

store(K1::key1(), K2::key2(), V::value(), Key2value::key2value(key1(), key2(), value())) -> key2value(key1(), key2(), value())

Store a value with key1 and key2.

update1/3

update1(K1::key1(), F::fun((value()) -> value()), Key2value::key2value(key1(), key2(), value())) -> key2value(key1(), key2(), value())

Update a value that exists with key1.

update2/3

update2(K2::key2(), F::fun((value()) -> value()), Key2value::key2value(key1(), key2(), value())) -> key2value(key1(), key2(), value())

Update a value that exists with key2.


Generated by EDoc