OpenLB 1.7
Loading...
Searching...
No Matches
Public Member Functions | List of all members
olb::utilities::TypeIndexedMap< VALUE, CONTEXT > Class Template Reference

(Time) efficient mapping between TYPEs and VALUEs More...

#include <typeIndexedContainers.h>

+ Inheritance diagram for olb::utilities::TypeIndexedMap< VALUE, CONTEXT >:
+ Collaboration diagram for olb::utilities::TypeIndexedMap< VALUE, CONTEXT >:

Public Member Functions

 TypeIndexedMap ()
 
template<typename TYPE >
bool provides () const
 
template<typename TYPE >
std::size_t index () const
 
template<typename TYPE >
const VALUE & get () const
 
template<typename TYPE >
VALUE & get ()
 
template<typename TYPE >
void set (VALUE value)
 

Detailed Description

template<typename VALUE, typename CONTEXT = void>
class olb::utilities::TypeIndexedMap< VALUE, CONTEXT >

(Time) efficient mapping between TYPEs and VALUEs

CONTEXT should be set to the containing type / some one-of identifier to restrict the index space to the types that are actually used in the specific context.

Definition at line 72 of file typeIndexedContainers.h.

Constructor & Destructor Documentation

◆ TypeIndexedMap()

template<typename VALUE , typename CONTEXT = void>
olb::utilities::TypeIndexedMap< VALUE, CONTEXT >::TypeIndexedMap ( )
inline

Definition at line 81 of file typeIndexedContainers.h.

81 {
82 _index.resize(1);
83 }

Member Function Documentation

◆ get() [1/2]

template<typename VALUE , typename CONTEXT >
template<typename TYPE >
VALUE & olb::utilities::TypeIndexedMap< VALUE, CONTEXT >::get ( )

Definition at line 156 of file typeIndexedContainers.h.

157{
158 const std::size_t index = get_index<TYPE>();
159 if (auto& value = _index[index]) {
160 return value.value();
161 } else {
162 throw std::out_of_range("VALUE for TYPE doesn't exist as it was not set.");
163 }
164}
typename std::integral_constant< TYPE, VALUE >::type value
Identity type to wrap non-type template arguments.
Definition meta.h:96

◆ get() [2/2]

template<typename VALUE , typename CONTEXT >
template<typename TYPE >
const VALUE & olb::utilities::TypeIndexedMap< VALUE, CONTEXT >::get ( ) const

Definition at line 144 of file typeIndexedContainers.h.

145{
146 const std::size_t index = get_index<TYPE>();
147 if (auto& value = _index[index]) {
148 return value.value();
149 } else {
150 throw std::out_of_range("VALUE for TYPE doesn't exist as it was not set.");
151 }
152}

◆ index()

template<typename VALUE , typename CONTEXT >
template<typename TYPE >
std::size_t olb::utilities::TypeIndexedMap< VALUE, CONTEXT >::index ( ) const

Definition at line 137 of file typeIndexedContainers.h.

138{
139 return get_index<TYPE>();
140}

◆ provides()

template<typename VALUE , typename CONTEXT >
template<typename TYPE >
bool olb::utilities::TypeIndexedMap< VALUE, CONTEXT >::provides ( ) const

Definition at line 125 of file typeIndexedContainers.h.

126{
127 const std::size_t index = get_index<TYPE>();
128 if (index >= _index.size()) {
129 return false;
130 } else {
131 return _index[index].has_value();
132 }
133}

◆ set()

template<typename VALUE , typename CONTEXT >
template<typename TYPE >
void olb::utilities::TypeIndexedMap< VALUE, CONTEXT >::set ( VALUE value)

Definition at line 168 of file typeIndexedContainers.h.

169{
170 const std::size_t index = get_index<TYPE>();
171 if (index >= _index.size()) {
172 _index.resize(2*index);
173 }
174 _index[index] = value;
175}

The documentation for this class was generated from the following file: