27#include <ext/algorithm>
47class PushdownStoreAlphabet;
48class BottomOfTheStackSymbol;
88template <
class InputSymbolTypeT = DefaultSymbolType,
class PushdownStoreSymbolTypeT = DefaultSymbolType,
class StateTypeT = DefaultStateType >
89class RealTimeHeightDeterministicDPDA final :
public core::Components < RealTimeHeightDeterministicDPDA < InputSymbolTypeT, PushdownStoreSymbolTypeT, StateTypeT >, ext::set < InputSymbolTypeT >, component::Set, InputAlphabet, ext::set < PushdownStoreSymbolTypeT >, component::Set, PushdownStoreAlphabet, PushdownStoreSymbolTypeT, component::Value, BottomOfTheStackSymbol, ext::set < StateTypeT >, component::Set, std::tuple < States, FinalStates >, StateTypeT, component::Value, InitialState > {
150 return this->
template accessComponent < InitialState > ( ).get ( );
159 return std::move ( this->
template accessComponent < InitialState > ( ).
get ( ) );
170 return this->
template accessComponent < InitialState > ( ).set ( std::move ( state ) );
179 return this->
template accessComponent < States > ( ).get ( );
188 return std::move ( this->
template accessComponent < States > ( ).
get ( ) );
199 return this->
template accessComponent < States > ( ).add ( std::move ( state ) );
208 this->
template accessComponent < States > ( ).set ( std::move ( states ) );
219 return this->
template accessComponent < States > ( ).remove ( state );
228 return this->
template accessComponent < FinalStates > ( ).get ( );
237 return std::move ( this->
template accessComponent < FinalStates > ( ).
get ( ) );
248 return this->
template accessComponent < FinalStates > ( ).add ( std::move ( state ) );
257 this->
template accessComponent < FinalStates > ( ).set ( std::move ( states ) );
268 return this->
template accessComponent < FinalStates > ( ).remove ( state );
277 return this->
template accessComponent < PushdownStoreAlphabet > ( ).get ( );
286 return std::move ( this->
template accessComponent < PushdownStoreAlphabet > ( ).
get ( ) );
297 return this->
template accessComponent < PushdownStoreAlphabet > ( ).add ( std::move ( symbol ) );
306 this->
template accessComponent < PushdownStoreAlphabet > ( ).add ( std::move ( symbols ) );
315 this->
template accessComponent < PushdownStoreAlphabet > ( ).set ( std::move ( symbols ) );
326 return this->
template accessComponent < PushdownStoreAlphabet > ( ).remove ( symbol );
335 return this->
template accessComponent < BottomOfTheStackSymbol > ( ).get ( );
344 return std::move ( this->
template accessComponent < BottomOfTheStackSymbol > ( ).
get ( ) );
355 return this->
template accessComponent < BottomOfTheStackSymbol > ( ).set ( std::move ( symbol ) );
364 return this->
template accessComponent < InputAlphabet > ( ).get ( );
373 return std::move ( this->
template accessComponent < InputAlphabet > ( ).
get ( ) );
384 return this->
template accessComponent < InputAlphabet > ( ).add ( std::move ( symbol ) );
393 this->
template accessComponent < InputAlphabet > ( ).add ( std::move ( symbols ) );
402 this->
template accessComponent < InputAlphabet > ( ).set ( std::move ( symbols ) );
413 this->
template accessComponent < InputAlphabet > ( ).remove ( symbol );
742 return std::tie(
getStates(),
getInputAlphabet(),
getInitialState(),
getFinalStates(),
getPushdownStoreAlphabet(),
getBottomOfTheStackSymbol(), callTransitions, returnTransitions, localTransitions) <=>
std::tie(other.getStates(), other.getInputAlphabet(), other.getInitialState(), other.getFinalStates(), other.getPushdownStoreAlphabet(), other.getBottomOfTheStackSymbol(), other.callTransitions, other.returnTransitions, other.localTransitions);
753 return std::tie(
getStates(),
getInputAlphabet(),
getInitialState(),
getFinalStates(),
getPushdownStoreAlphabet(),
getBottomOfTheStackSymbol(), callTransitions, returnTransitions, localTransitions) ==
std::tie(other.
getStates(), other.
getInputAlphabet(), other.
getInitialState(), other.
getFinalStates(), other.
getPushdownStoreAlphabet(), other.
getBottomOfTheStackSymbol(), other.callTransitions, other.returnTransitions, other.localTransitions);
765 return out <<
"(RealTimeHeightDeterministicDPDA"
766 <<
" states = " << instance.
getStates ( )
779template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
780RealTimeHeightDeterministicDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >::RealTimeHeightDeterministicDPDA (
ext::set < StateType > states,
ext::set < InputSymbolType > inputAlphabet,
ext::set < PushdownStoreSymbolType > pushdownStoreAlphabet,
StateType initialState,
PushdownStoreSymbolType bottomOfTheStackSymbol,
ext::set < StateType > finalStates ) :
core::Components <
RealTimeHeightDeterministicDPDA,
ext::set < InputSymbolType >, component::Set, InputAlphabet,
ext::set < PushdownStoreSymbolType >, component::Set, PushdownStoreAlphabet,
PushdownStoreSymbolType, component::Value, BottomOfTheStackSymbol,
ext::set < StateType >, component::Set, std::tuple < States, FinalStates >,
StateType, component::Value, InitialState > ( std::move ( inputAlphabet ), std::move ( pushdownStoreAlphabet ), std::move ( bottomOfTheStackSymbol ), std::move ( states ), std::move ( finalStates ), std::move ( initialState ) ) {
783template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
787template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
789 if (!getStates().count(from)) {
793 if ( ! input.is_epsilon ( ) && !getInputAlphabet().count(input.getSymbol ( ))) {
797 if (!getStates().count(to)) {
801 if (!getPushdownStoreAlphabet().count(push)) {
805 if(getBottomOfTheStackSymbol() == push)
811 if(callTransitions.find(key) != callTransitions.end() && callTransitions.find(key)->second == value)
814 if(key.second.is_epsilon ( ) ) {
815 for(
const auto& transition : callTransitions)
816 if(transition.first.first == key.first )
819 for(
const auto& transition : returnTransitions)
820 if(std::get<0>(transition.first) == key.first)
823 for(
const auto& transition : localTransitions)
824 if(transition.first.first == key.first)
827 for(
const auto& transition : callTransitions)
828 if(transition.first.first == key.first && (transition.first.second.is_epsilon ( ) || transition.first.second == key.second))
831 for(
const auto& transition : returnTransitions)
832 if(std::get<0>(transition.first) == key.first && (std::get<1>(transition.first).is_epsilon ( ) || std::get<1>(transition.first) == key.second))
835 for(
const auto& transition : localTransitions)
836 if(transition.first.first == key.first && (transition.first.second.is_epsilon ( ) || transition.first.second == key.second))
840 callTransitions.insert ( std::move ( key ), std::move ( value ) );
844template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
847 return addCallTransition(std::move(from), std::move(inputVariant), std::move(to), std::move(push));
850template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
853 return addCallTransition(std::move(from), std::move(inputVariant), std::move(to), std::move(push));
856template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
858 if (!getStates().count(from)) {
862 if ( ! input.is_epsilon ( ) && !getInputAlphabet().count(input.getSymbol ( ))) {
866 if (!getStates().count(to)) {
870 if (!getPushdownStoreAlphabet().count(pop)) {
876 if(returnTransitions.find(key) != returnTransitions.end() && returnTransitions.find(key)->second == to)
879 if(std::get<1>(key).is_epsilon ( ) ) {
880 for(
const auto& transition : callTransitions)
881 if(transition.first.first == std::get<0>(key) )
884 for(
const auto& transition : returnTransitions)
885 if(std::get<0>(transition.first) == std::get<0>(key) && std::get<2>(transition.first) == std::get<2>(key))
888 for(
const auto& transition : localTransitions)
889 if(transition.first.first == std::get<0>(key))
892 for(
const auto& transition : callTransitions)
893 if(transition.first.first == std::get<0>(key) && (transition.first.second.is_epsilon ( ) || transition.first.second == std::get<1>(key)))
896 for(
const auto& transition : returnTransitions)
897 if(std::get<0>(transition.first) == std::get<0>(key) && (std::get<1>(transition.first).is_epsilon ( ) || std::get<1>(transition.first) == std::get<1>(key)) && std::get<2>(transition.first) == std::get<2>(key))
900 for(
const auto& transition : localTransitions)
901 if(transition.first.first == std::get<0>(key) && (transition.first.second.is_epsilon ( ) || transition.first.second == std::get<1>(key)))
905 returnTransitions.insert ( std::move ( key ), std::move ( to ) );
909template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
912 return addReturnTransition(std::move(from), std::move(inputVariant), std::move(pop), std::move(to));
915template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
918 return addReturnTransition(std::move(from), std::move(inputVariant), std::move(pop), std::move(to));
921template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
923 if (!getStates().count(from)) {
927 if ( ! input.is_epsilon ( ) && !getInputAlphabet().count(input.getSymbol ( ))) {
931 if (!getStates().count(to)) {
937 if(localTransitions.find(key) != localTransitions.end() && localTransitions.find(key)->second == to)
940 if(key.second.is_epsilon ( ) ) {
941 for(
const auto& transition : callTransitions)
942 if(transition.first.first == key.first )
945 for(
const auto& transition : returnTransitions)
946 if(std::get<0>(transition.first) == key.first)
949 for(
const auto& transition : localTransitions)
950 if(transition.first.first == key.first)
953 for(
const auto& transition : callTransitions)
954 if(transition.first.first == key.first && (transition.first.second.is_epsilon ( ) || transition.first.second == key.second))
957 for(
const auto& transition : returnTransitions)
958 if(std::get<0>(transition.first) == key.first && (std::get<1>(transition.first).is_epsilon ( ) || std::get<1>(transition.first) == key.second))
961 for(
const auto& transition : localTransitions)
962 if(transition.first.first == key.first && (transition.first.second.is_epsilon ( ) || transition.first.second == key.second))
966 localTransitions.insert ( std::move ( key ), std::move ( to ) );
970template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
973 return addLocalTransition(std::move(from), std::move(inputVariant), std::move(to));
976template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
979 return addLocalTransition(std::move(from), std::move(inputVariant), std::move(to));
982template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
987 if (callTransitions.find(key) == callTransitions.end())
990 if(callTransitions.find(key)->second != value)
993 callTransitions.erase(key);
997template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1000 return removeCallTransition(from, inputVariant, to, push);
1003template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1006 return removeCallTransition(from, inputVariant, to, push);
1009template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1013 if (returnTransitions.find(key) == returnTransitions.end())
1016 if(returnTransitions.find(key)->second != to)
1019 returnTransitions.erase(key);
1023template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1026 return removeReturnTransition(from, inputVariant, pop, to);
1029template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1032 return removeReturnTransition(from, inputVariant, pop, to);
1035template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1039 if (localTransitions.find(key) == localTransitions.end())
1042 if(localTransitions.find(key)->second != to)
1045 localTransitions.erase(key);
1049template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1052 return removeLocalTransition(from, inputVariant, to);
1055template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1058 return removeLocalTransition(from, inputVariant, to);
1061template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1063 return callTransitions;
1066template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1068 return std::move ( callTransitions );
1071template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1073 return returnTransitions;
1076template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1078 return std::move ( returnTransitions );
1081template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1083 return localTransitions;
1086template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1088 return std::move ( localTransitions );
1102template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1103class SetConstraint<
automaton::RealTimeHeightDeterministicDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, InputSymbolType, automaton::InputAlphabet > {
1115 if ( ! callTransition.first.second.is_epsilon ( ) && symbol == callTransition.first.second.getSymbol ( ))
1119 if ( ! std::get<1>(returnTransition.first).is_epsilon ( ) && symbol == std::get<1>(returnTransition.first).getSymbol ( ))
1123 if ( ! localTransition.first.second.is_epsilon ( ) && symbol == localTransition.first.second.getSymbol ( ))
1158template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1159class SetConstraint<
automaton::RealTimeHeightDeterministicDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, PushdownStoreSymbolType, automaton::PushdownStoreAlphabet > {
1171 if (symbol == callTransition.second.second)
1175 if (symbol == std::get<2>(returnTransition.first))
1178 if(
automaton.getBottomOfTheStackSymbol() == symbol)
1213template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1214class ElementConstraint<
automaton::RealTimeHeightDeterministicDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, PushdownStoreSymbolType, automaton::BottomOfTheStackSymbol > {
1225 return automaton.template accessComponent < automaton::PushdownStoreAlphabet > ( ).get ( ).count ( symbol );
1245template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1257 if (
automaton.getInitialState ( ) == state )
1260 if (
automaton.getFinalStates ( ).count ( state ) )
1264 if (state == callTransition.first.first || callTransition.second.first == state)
1268 if (state == std::get<0>(returnTransition.first) || returnTransition.second == state)
1272 if (state == localTransition.first.first || localTransition.second == state)
1307template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1331 return automaton.template accessComponent < automaton::States > ( ).get ( ).count ( state );
1351template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1363 return automaton.template accessComponent < automaton::States > ( ).get ( ).count ( state );
1381template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1382struct normalize <
automaton::RealTimeHeightDeterministicDPDA < InputSymbolType, PushdownStoreSymbolType, StateType > > {
1400 res.addCallTransition ( std::move ( from ), std::move ( input ), std::move ( to ), std::move ( push ) );
1410 res.addReturnTransition ( std::move ( from ), std::move ( input ), std::move ( pop ), std::move ( to ) );
1418 res.addLocalTransition ( std::move ( from ), std::move ( input ), std::move ( to ) );
static ext::set< DefaultSymbolType > normalizeAlphabet(ext::set< SymbolType > &&symbols)
Definition: SymbolNormalize.h:50
static DefaultSymbolType normalizeSymbol(SymbolType &&symbol)
Definition: SymbolNormalize.h:68
Definition: AutomatonException.h:15
static common::symbol_or_epsilon< DefaultSymbolType > normalizeSymbolEpsilon(common::symbol_or_epsilon< SymbolType > &&symbol)
Definition: AutomatonNormalize.h:81
static DefaultStateType normalizeState(StateType &&state)
Definition: AutomatonNormalize.h:76
static ext::multiset< DefaultStateType > normalizeStates(ext::multiset< StateType > &&states)
Definition: AutomatonNormalize.h:49
Deterministic real time height deterministic pushdown automaton. Accepts subset of context free langu...
Definition: RealTimeHeightDeterministicDPDA.h:89
PushdownStoreSymbolType PushdownStoreSymbolType_t
Definition: RealTimeHeightDeterministicDPDA.h:120
PushdownStoreSymbolTypeT PushdownStoreSymbolType
Definition: RealTimeHeightDeterministicDPDA.h:92
bool addPushdownStoreSymbol(PushdownStoreSymbolType symbol)
Definition: RealTimeHeightDeterministicDPDA.h:296
bool addLocalTransition(StateType from, common::symbol_or_epsilon< InputSymbolType > input, StateType to)
Adds a local transition to the automaton.
Definition: RealTimeHeightDeterministicDPDA.h:922
bool operator==(const RealTimeHeightDeterministicDPDA &other) const
Definition: RealTimeHeightDeterministicDPDA.h:752
const ext::set< InputSymbolType > & getInputAlphabet() const &
Definition: RealTimeHeightDeterministicDPDA.h:363
bool addReturnTransition(StateType from, common::symbol_or_epsilon< InputSymbolType > input, PushdownStoreSymbolType pop, StateType to)
Adds a return transition to the automaton.
Definition: RealTimeHeightDeterministicDPDA.h:857
StateTypeT StateType
Definition: RealTimeHeightDeterministicDPDA.h:93
bool removeReturnTransition(const StateType &from, const common::symbol_or_epsilon< InputSymbolType > &input, const PushdownStoreSymbolType &pop, const StateType &to)
Removes a return transition from the automaton.
Definition: RealTimeHeightDeterministicDPDA.h:1010
void setPushdownStoreAlphabet(ext::set< PushdownStoreSymbolType > symbols)
Definition: RealTimeHeightDeterministicDPDA.h:314
bool removeState(const StateType &state)
Definition: RealTimeHeightDeterministicDPDA.h:218
ext::set< PushdownStoreSymbolType > && getPushdownStoreAlphabet() &&
Definition: RealTimeHeightDeterministicDPDA.h:285
ext::set< StateType > && getFinalStates() &&
Definition: RealTimeHeightDeterministicDPDA.h:236
PushdownStoreSymbolType && getBottomOfTheStackSymbol() &&
Definition: RealTimeHeightDeterministicDPDA.h:343
const StateType & getInitialState() const &
Definition: RealTimeHeightDeterministicDPDA.h:149
bool removeLocalTransition(const StateType &from, const common::symbol_or_epsilon< InputSymbolType > &input, const StateType &to)
Removes a local transition from the automaton.
Definition: RealTimeHeightDeterministicDPDA.h:1036
RealTimeHeightDeterministicDPDA(ext::set< StateType > states, ext::set< InputSymbolType > inputAlphabet, ext::set< PushdownStoreSymbolType > pushdownStoreAlphabet, StateType initialState, PushdownStoreSymbolType bottomOfTheStackSymbol, ext::set< StateType > finalStates)
Creates a new instance of the automaton with a concrete set of states, call, return,...
Definition: RealTimeHeightDeterministicDPDA.h:780
const ext::map< ext::pair< StateType, common::symbol_or_epsilon< InputSymbolType > >, ext::pair< StateType, PushdownStoreSymbolType > > & getCallTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1062
void setStates(ext::set< StateType > states)
Definition: RealTimeHeightDeterministicDPDA.h:207
void setFinalStates(ext::set< StateType > states)
Definition: RealTimeHeightDeterministicDPDA.h:256
const ext::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: RealTimeHeightDeterministicDPDA.h:276
bool setInitialState(StateType state)
Definition: RealTimeHeightDeterministicDPDA.h:169
InputSymbolTypeT InputSymbolType
Definition: RealTimeHeightDeterministicDPDA.h:91
StateType StateType_t
Definition: RealTimeHeightDeterministicDPDA.h:115
friend ext::ostream & operator<<(ext::ostream &out, const RealTimeHeightDeterministicDPDA &instance)
Definition: RealTimeHeightDeterministicDPDA.h:764
const ext::map< ext::pair< StateType, common::symbol_or_epsilon< InputSymbolType > >, StateType > & getLocalTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1082
void addInputSymbols(ext::set< InputSymbolType > symbols)
Definition: RealTimeHeightDeterministicDPDA.h:392
const ext::map< ext::tuple< StateType, common::symbol_or_epsilon< InputSymbolType >, PushdownStoreSymbolType >, StateType > & getReturnTransitions() const &
Definition: RealTimeHeightDeterministicDPDA.h:1072
bool removeFinalState(const StateType &state)
Definition: RealTimeHeightDeterministicDPDA.h:267
const ext::set< StateType > & getStates() const &
Definition: RealTimeHeightDeterministicDPDA.h:178
const ext::set< StateType > & getFinalStates() const &
Definition: RealTimeHeightDeterministicDPDA.h:227
void addPushdownStoreSymbols(ext::set< PushdownStoreSymbolType > symbols)
Definition: RealTimeHeightDeterministicDPDA.h:305
StateType && getInitialState() &&
Definition: RealTimeHeightDeterministicDPDA.h:158
bool removePushdownStoreSymbol(const PushdownStoreSymbolType &symbol)
Definition: RealTimeHeightDeterministicDPDA.h:325
void removeInputSymbol(const InputSymbolType &symbol)
Definition: RealTimeHeightDeterministicDPDA.h:412
const PushdownStoreSymbolType & getBottomOfTheStackSymbol() const &
Definition: RealTimeHeightDeterministicDPDA.h:334
void setInputAlphabet(ext::set< InputSymbolType > symbols)
Definition: RealTimeHeightDeterministicDPDA.h:401
bool addFinalState(StateType state)
Definition: RealTimeHeightDeterministicDPDA.h:247
bool removeCallTransition(const StateType &from, const common::symbol_or_epsilon< InputSymbolType > &input, const StateType &to, const PushdownStoreSymbolType &push)
Removes a call transition from the automaton.
Definition: RealTimeHeightDeterministicDPDA.h:983
bool addInputSymbol(InputSymbolType symbol)
Definition: RealTimeHeightDeterministicDPDA.h:383
bool addCallTransition(StateType from, common::symbol_or_epsilon< InputSymbolType > input, StateType to, PushdownStoreSymbolType push)
Adds a call transition to the automaton.
Definition: RealTimeHeightDeterministicDPDA.h:788
bool addState(StateType state)
Definition: RealTimeHeightDeterministicDPDA.h:198
ext::set< InputSymbolType > && getInputAlphabet() &&
Definition: RealTimeHeightDeterministicDPDA.h:372
ext::set< StateType > && getStates() &&
Definition: RealTimeHeightDeterministicDPDA.h:187
bool setBottomOfTheStackSymbol(PushdownStoreSymbolType symbol)
Definition: RealTimeHeightDeterministicDPDA.h:354
Definition: symbol_or_epsilon.hpp:24
Definition: components.hpp:181
Definition: components.hpp:25
Definition: setComponents.hpp:26
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
Class extending the tuple class from the standard library. Original reason is to allow printing of th...
Definition: tuple.hpp:42
Definition: BarSymbol.cpp:12
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
return res
Definition: MinimizeByPartitioning.h:145
Definition: ToGrammar.h:31
Definition: Permutation.hpp:18
Definition: normalize.hpp:10
Definition: sigHandler.cpp:20
constexpr tuple< Elements &... > tie(Elements &... args) noexcept
Helper of extended tuple of references construction. The tuple is constructed to reffer to values in ...
Definition: tuple.hpp:218
reference_mover< T > make_mover(T ¶m)
Move adaptor construction function specialized to lvalue reference parameter.
Definition: iterator.hpp:468
std::string to_string(const T &value)
To string method designated for objects that can be casted to string.
Definition: string.hpp:131
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
auto & get(ext::ptr_array< Type, N > &tpl)
Specialisation of get function for pointer arrays.
Definition: ptr_array.hpp:693
Definition: normalize.hpp:13