Nix 2.26.3
Nix, the purely functional package manager; unstable internal interfaces
 
Loading...
Searching...
No Matches
nix::DerivedPathMap< V > Struct Template Reference

#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
 
ChildNodeensureSlot (const SingleDerivedPath &k)
 
ChildNodefindSlot (const SingleDerivedPath &k)
 

Public Attributes

Map map
 

Detailed Description

template<typename V>
struct nix::DerivedPathMap< V >

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.

Parameters
VA 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.

Member Typedef Documentation

◆ Map

template<typename V>
using nix::DerivedPathMap< V >::Map = std::map<StorePath, ChildNode>

The map type for the root node.

Member Function Documentation

◆ ensureSlot()

template<typename V>
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.

◆ findSlot()

template<typename V>
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.

Member Data Documentation

◆ map

template<typename V>
Map nix::DerivedPathMap< V >::map

The map of root node.


The documentation for this struct was generated from the following files: