10 template <
class _QualifiedState>
11 class CompoundStateHandle
12 :
public statespace::StateHandle<CartesianProduct, _QualifiedState>
15 using typename statespace::StateHandle<CartesianProduct, _QualifiedState>::
17 using typename statespace::StateHandle<CartesianProduct, _QualifiedState>::
19 using typename statespace::StateHandle<CartesianProduct, _QualifiedState>::
43 template <
class Space = statespace::StateSpace>
46 return this->getStateSpace()->template getSubState<Space>(
47 this->getState(), _index);
55 template <
class Space = statespace::StateSpace>
56 const typename Space::State*
getSubState(std::size_t _index)
const
58 return this->getStateSpace()->template getSubState<Space>(
59 this->getState(), _index);
68 template <
class Space = statespace::StateSpace>
71 return typename Space::StateHandle(
72 this->getStateSpace()->
template getSubspace<Space>(_index).get(),
73 getSubState<Space>(_index));
82 template <
class Space = statespace::StateSpace>
85 return typename Space::StateHandleConst(
86 this->getStateSpace()->
template getSubspace<Space>(_index).get(),
87 getSubState<Space>(_index));
92 template <
class Space>
94 std::size_t _index)
const
98 auto space = std::dynamic_pointer_cast<const Space>(rawSpace);
103 const auto& rawSpaceValue = *rawSpace;
105 std::stringstream ss;
106 ss <<
"Requested StateSpace of type '" <<
typeid(Space).name()
107 <<
"', but the StateSpace at index " << _index
108 <<
" is of incompatible type '" <<
typeid(rawSpaceValue).name() <<
"'.";
109 throw std::runtime_error(ss.str());
115 template <
class Space>
117 State* _state, std::size_t _index)
const
122 return reinterpret_cast<typename Space::State*
>(
123 reinterpret_cast<char*
>(_state) +
mOffsets[_index]);
127 template <
class Space>
129 const State* _state, std::size_t _index)
const
134 return reinterpret_cast<const typename Space::State*
>(
135 reinterpret_cast<const char*
>(_state) +
mOffsets[_index]);
139 template <
class Space>
141 State* _state, std::size_t _index)
const
143 return typename Space::StateHandle(
144 getSubspace<Space>(_index).get(), getSubState<Space>(_state, _index));
148 template <
class Space>
150 const State* _state, std::size_t _index)
const
152 return typename Space::StateHandleConst(
153 getSubspace<Space>(_index).get(), getSubState<Space>(_state, _index));