Iptrie.update

You're seeing just the function update, go back to Iptrie module for more information.
Link to this function

update(trie, prefix, fun)

View Source

Specs

update(t(), prefix(), (any() -> any())) :: t()

Looks up prefix and update the matched entry, only if found.

Uses longest prefix match, so search prefix is usually matched by some less specific prefix. If matched, fun is called on its value. If prefix had no longest prefix match, the trie is returned unchanged.

Examples

iex> ipt = new()
...> |> put("1.1.1.0/24", 0)
...> |> update("1.1.1.0", fn x -> x + 1 end)
...> |> update("1.1.1.1", fn x -> x + 1 end)
...> |> update("2.2.2.2", fn x -> x + 1 end)
iex> get(ipt, "1.1.1.0/24")
{"1.1.1.0/24", 2}
iex> lookup(ipt, "2.2.2.2")
nil
Link to this function

update(trie, prefix, default, fun)

View Source

Specs

update(t(), prefix(), any(), (any() -> any())) :: t()

Looks up prefix and, if found, update its value or insert the default under prefix.

Uses longest prefix match, so search prefix is usually matched by some less specific prefix. If matched, fun is called on the entry's value. If prefix had no longest prefix match, the default is inserted under prefix and fun is not called.

Examples

iex> ipt = new()
...> |> update("1.1.1.0/24", 0, fn x -> x + 1 end)
...> |> update("1.1.1.0", 0, fn x -> x + 1 end)
...> |> update("1.1.1.1", 0, fn x -> x + 1 end)
...> |> update("2.2.2.2", 0, fn x -> x + 1 end)
iex> lookup(ipt, "1.1.1.2")
{"1.1.1.0/24", 2}
iex>
iex> # probably not what you wanted:
iex> lookup(ipt, "2.2.2.2")
{"2.2.2.2", 0}