Class Acts::GeometryHierarchyMap
-
template<typename value_t>
class GeometryHierarchyMap Store values mapped into the geometry hierarchy.
The core functionality is to find an equivalent element, i.e. an identifier-value pair, for a given geometry identifier via
Trailing zero levels of stored geometry identifiers are used as broadcast values to refer to higher-level objects within the geometry, e.g. a geometry identifier with vanishing approach and sensitive index identifies a layer. An entry will all geometry identifier levels set to zero acts as the global default value.auto it = container.find(GeometryIdentifier(...)); if (it != container.end()) { ... }
The container also supports range-based iteration over all stored elements
and index-based access to stored elements and associated geometry identifiersfor (const auto& element : container) { ... }
Adding elements is potentially expensive as the internal lookup structure must be updated. In addition, modifying an element in-place could change its identifier which would also break the lookup. Thus, the container can not be modified after construction to prevent misuse.GeometryIdentifier id3 = container.idAt(3); const auto& element4 = container.valueAt(4);
Note
No guarantees are given for the element order when using range-based or index-based access. Any apparent ordering must be considered an implementation detail and might change.
- Template Parameters
value_t – stored value type
Public Types
-
using InputElement = typename std::pair<GeometryIdentifier, value_t>
Combined geometry identifier and value element. Only used for input.
Public Functions
-
GeometryHierarchyMap() = default
-
GeometryHierarchyMap(const GeometryHierarchyMap&) = default
-
GeometryHierarchyMap(GeometryHierarchyMap&&) = default
-
inline GeometryHierarchyMap(std::initializer_list<InputElement> elements)
Construct the container from an initializer list.
- Parameters
elements – input initializer list
-
inline GeometryHierarchyMap(std::vector<InputElement> elements)
Construct the container from the given elements.
- Parameters
elements – input elements (must be unique with respect to identifier)
-
~GeometryHierarchyMap() = default
-
inline bool empty() const
Check if any elements are stored.
-
inline Iterator find(GeometryIdentifier id) const
Find the most specific value for a given geometry identifier.
This can be either from the element matching exactly to the given geometry id, if it exists, or from the element for the next available higher level within the geometry hierarchy.
- Parameters
id – geometry identifier for which information is requested
- Return values
iterator – to an existing value
<tt>.end()</tt> – iterator if no matching element exists
-
inline GeometryIdentifier idAt(Size index) const
Access the geometry identifier for the i-th element with bounds check.
- Throws
std::out_of_range – for invalid indices
-
GeometryHierarchyMap &operator=(const GeometryHierarchyMap&) = default
-
GeometryHierarchyMap &operator=(GeometryHierarchyMap&&) = default