#include <derived-path-map.hh>
Classes | |
struct | ChildNode |
Public Types | |
using | Map = std::map<StorePath, ChildNode> |
Public Member Functions | |
bool | operator== (const DerivedPathMap &) const =default |
ChildNode & | ensureSlot (const SingleDerivedPath &k) |
ChildNode * | findSlot (const SingleDerivedPath &k) |
Public Attributes | |
Map | map |
A simple Trie, of sorts. Conceptually a map of SingleDerivedPath
to values.
Concretely, an n-ary tree, as described below. A SingleDerivedPath::Opaque
maps to the value of an immediate child of the root node. A SingleDerivedPath::Built
maps to a deeper child node: the SingleDerivedPath::Built::drvPath
is first mapped to a a child node (inductively), and then the SingleDerivedPath::Built::output
is used to look up that child's child via its map. In this manner, every SingleDerivedPath
is mapped to a child node.
V | A type to instantiate for each output. It should probably should be an "optional" type so not every interior node has to have a value. * const Something or std::optional<Something> would be good choices for "optional" types. |
using nix::DerivedPathMap< V >::Map = std::map<StorePath, ChildNode> |
The map type for the root node.
DerivedPathMap< V >::ChildNode & nix::DerivedPathMap< V >::ensureSlot | ( | const SingleDerivedPath & | k | ) |
Find the node for k
, creating it if needed.
The node is referred to as a "slot" on the assumption that V
is some sort of optional type, so the given key can be set or unset by changing this node.
DerivedPathMap< V >::ChildNode * nix::DerivedPathMap< V >::findSlot | ( | const SingleDerivedPath & | k | ) |
Like ensureSlot
but does not create the slot if it doesn't exist.
Read the entire description of ensureSlot
to understand an important caveat here that "have slot" does not imply "key is
set in map". To ensure a key is set one would need to get the child node (with findSlot
or ensureSlot
) and check the ChildNode::value
.
Map nix::DerivedPathMap< V >::map |
The map of root node.