27#include <ext/algorithm>
49class PushdownStoreAlphabet;
50class BottomOfTheStackSymbol;
85template <
class InputSymbolTypeT = DefaultSymbolType,
class PushdownStoreSymbolTypeT = DefaultSymbolType,
class StateTypeT = DefaultStateType >
86class VisiblyPushdownDPDA final :
public core::Components < VisiblyPushdownDPDA < InputSymbolTypeT, PushdownStoreSymbolTypeT, StateTypeT >, ext::set < InputSymbolTypeT >, component::Set, std::tuple < CallAlphabet, ReturnAlphabet, LocalAlphabet >, ext::set < PushdownStoreSymbolTypeT >, component::Set, PushdownStoreAlphabet, PushdownStoreSymbolTypeT, component::Value, BottomOfTheStackSymbol, ext::set < StateTypeT >, component::Set, std::tuple < States, FinalStates >, StateTypeT, component::Value, InitialState > {
147 return this->
template accessComponent < InitialState > ( ).get ( );
156 return std::move ( this->
template accessComponent < InitialState > ( ).
get ( ) );
167 return this->
template accessComponent < InitialState > ( ).set ( std::move ( state ) );
176 return this->
template accessComponent < States > ( ).get ( );
185 return std::move ( this->
template accessComponent < States > ( ).
get ( ) );
196 return this->
template accessComponent < States > ( ).add ( std::move ( state ) );
205 this->
template accessComponent < States > ( ).set ( std::move ( states ) );
216 return this->
template accessComponent < States > ( ).remove ( state );
225 return this->
template accessComponent < FinalStates > ( ).get ( );
234 return std::move ( this->
template accessComponent < FinalStates > ( ).
get ( ) );
245 return this->
template accessComponent < FinalStates > ( ).add ( std::move ( state ) );
254 this->
template accessComponent < FinalStates > ( ).set ( std::move ( states ) );
265 return this->
template accessComponent < FinalStates > ( ).remove ( state );
274 return this->
template accessComponent < PushdownStoreAlphabet > ( ).get ( );
283 return std::move ( this->
template accessComponent < PushdownStoreAlphabet > ( ).
get ( ) );
294 return this->
template accessComponent < PushdownStoreAlphabet > ( ).add ( std::move ( symbol ) );
303 this->
template accessComponent < PushdownStoreAlphabet > ( ).add ( std::move ( symbols ) );
312 this->
template accessComponent < PushdownStoreAlphabet > ( ).set ( std::move ( symbols ) );
323 return this->
template accessComponent < PushdownStoreAlphabet > ( ).remove ( symbol );
332 return this->
template accessComponent < BottomOfTheStackSymbol > ( ).get ( );
341 return std::move ( this->
template accessComponent < BottomOfTheStackSymbol > ( ).
get ( ) );
352 return this->
template accessComponent < BottomOfTheStackSymbol > ( ).set ( std::move ( symbol ) );
361 return this->
template accessComponent < CallAlphabet > ( ).get ( );
370 return std::move ( this->
template accessComponent < CallAlphabet > ( ).
get ( ) );
381 return this->
template accessComponent < CallAlphabet > ( ).add ( std::move ( symbol ) );
390 this->
template accessComponent < CallAlphabet > ( ).add ( std::move ( symbols ) );
399 this->
template accessComponent < CallAlphabet > ( ).set ( std::move ( symbols ) );
410 return this->
template accessComponent < CallAlphabet > ( ).remove ( symbol );
419 return this->
template accessComponent < ReturnAlphabet > ( ).get ( );
428 return std::move ( this->
template accessComponent < ReturnAlphabet > ( ).
get ( ) );
439 return this->
template accessComponent < ReturnAlphabet > ( ).add ( std::move ( symbol ) );
448 this->
template accessComponent < ReturnAlphabet > ( ).add ( std::move ( symbols ) );
457 this->
template accessComponent < ReturnAlphabet > ( ).set ( std::move ( symbols ) );
468 return this->
template accessComponent < ReturnAlphabet > ( ).remove ( symbol );
477 return this->
template accessComponent < LocalAlphabet > ( ).get ( );
486 return std::move ( this->
template accessComponent < LocalAlphabet > ( ).
get ( ) );
497 return this->
template accessComponent < LocalAlphabet > ( ).add ( std::move ( symbol ) );
506 this->
template accessComponent < LocalAlphabet > ( ).add ( std::move ( symbols ) );
515 this->
template accessComponent < LocalAlphabet > ( ).set ( std::move ( symbols ) );
526 return this->
template accessComponent < LocalAlphabet > ( ).remove ( symbol );
684 return std::tie(
getStates(),
getCallInputAlphabet(),
getReturnInputAlphabet(),
getLocalInputAlphabet(),
getInitialState(),
getFinalStates(),
getPushdownStoreAlphabet(),
getBottomOfTheStackSymbol(), callTransitions, returnTransitions, localTransitions) <=>
std::tie(other.getStates(), other.getCallInputAlphabet(), other.getReturnInputAlphabet(), other.getLocalInputAlphabet(), other.getInitialState(), other.getFinalStates(), other.getPushdownStoreAlphabet(), other.getBottomOfTheStackSymbol(), other.callTransitions, other.returnTransitions, other.localTransitions);
695 return std::tie(
getStates(),
getCallInputAlphabet(),
getReturnInputAlphabet(),
getLocalInputAlphabet(),
getInitialState(),
getFinalStates(),
getPushdownStoreAlphabet(),
getBottomOfTheStackSymbol(), callTransitions, returnTransitions, localTransitions) ==
std::tie(other.
getStates(), other.
getCallInputAlphabet(), other.
getReturnInputAlphabet(), other.
getLocalInputAlphabet(), other.
getInitialState(), other.
getFinalStates(), other.
getPushdownStoreAlphabet(), other.
getBottomOfTheStackSymbol(), other.callTransitions, other.returnTransitions, other.localTransitions);
707 return out <<
"(VisiblyPushdownDPDA"
708 <<
" states = " << instance.
getStates ( )
723template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
724VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >::VisiblyPushdownDPDA (
ext::set < StateType > states,
ext::set < InputSymbolType > callAlphabet,
ext::set < InputSymbolType > returnAlphabet,
ext::set < InputSymbolType > localAlphabet,
ext::set < PushdownStoreSymbolType > pushdownStoreAlphabet,
StateType initialState,
PushdownStoreSymbolType bottomOfTheStackSymbol,
ext::set < StateType > finalStates ) :
core::Components <
VisiblyPushdownDPDA,
ext::set < InputSymbolType >, component::Set, std::tuple < CallAlphabet, ReturnAlphabet, LocalAlphabet >,
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 ( callAlphabet ), std::move ( returnAlphabet ), std::move ( localAlphabet ), std::move ( pushdownStoreAlphabet ), std::move ( bottomOfTheStackSymbol ), std::move ( states ), std::move ( finalStates ), std::move ( initialState ) ) {
727template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
728VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >::VisiblyPushdownDPDA(
StateType initialState,
PushdownStoreSymbolType bottomOfTheStackSymbol) :
VisiblyPushdownDPDA (
ext::set < StateType > { initialState },
ext::set < InputSymbolType > { },
ext::set < InputSymbolType > { },
ext::set < InputSymbolType > { },
ext::set < PushdownStoreSymbolType > { bottomOfTheStackSymbol }, initialState, bottomOfTheStackSymbol,
ext::set < StateType > { }) {
731template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
733 if (!getStates().count(from)) {
737 if (!getCallInputAlphabet().count(input)) {
741 if (!getStates().count(to)) {
745 if (!getPushdownStoreAlphabet().count(push)) {
752 if(callTransitions.find(key) != callTransitions.end() && callTransitions.find(key)->second == value)
755 for(
const auto& transition : callTransitions)
756 if(transition.first.first == key.first && transition.first.second == key.second)
759 for(
const auto& transition : returnTransitions)
760 if(std::get<0>(transition.first) == key.first && std::get<1>(transition.first) == key.second)
763 for(
const auto& transition : localTransitions)
764 if(transition.first.first == key.first && transition.first.second == key.second)
767 callTransitions.insert ( std::move(key), std::move(value) );
771template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
773 if (!getStates().count(from)) {
777 if (!getReturnInputAlphabet().count(input)) {
781 if (!getStates().count(to)) {
785 if (!getPushdownStoreAlphabet().count(pop)) {
791 if(returnTransitions.find(key) != returnTransitions.end() && returnTransitions.find(key)->second == to)
794 for(
const auto& transition : callTransitions)
795 if(transition.first.first == std::get<0>(key) && transition.first.second == std::get<1>(key))
798 for(
const auto& transition : returnTransitions)
799 if(std::get<0>(transition.first) == std::get<0>(key) && std::get<1>(transition.first) == std::get<1>(key) && std::get<2>(transition.first) == std::get<2>(key))
802 for(
const auto& transition : localTransitions)
803 if(transition.first.first == std::get<0>(key) && transition.first.second == std::get<1>(key))
806 returnTransitions.insert ( std::move(key), std::move(to) );
810template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
812 if (!getStates().count(from)) {
816 if (!getLocalInputAlphabet().count(input)) {
820 if (!getStates().count(to)) {
826 if(localTransitions.find(key) != localTransitions.end() && localTransitions.find(key)->second == to)
829 for(
const auto& transition : callTransitions)
830 if(transition.first.first == key.first && transition.first.second == key.second)
833 for(
const auto& transition : returnTransitions)
834 if(std::get<0>(transition.first) == key.first && std::get<1>(transition.first) == key.second)
837 for(
const auto& transition : localTransitions)
838 if(transition.first.first == key.first && transition.first.second == key.second)
841 localTransitions.insert ( std::move ( key ), std::move ( to ) );
845template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
850 if (callTransitions.find(key) == callTransitions.end())
853 if(callTransitions.find(key)->second != value)
856 callTransitions.erase(key);
860template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
864 if (returnTransitions.find(key) == returnTransitions.end())
867 if(returnTransitions.find(key)->second != to)
870 returnTransitions.erase(key);
874template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
878 if (localTransitions.find(key) == localTransitions.end())
881 if(localTransitions.find(key)->second != to)
884 localTransitions.erase(key);
888template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
890 return callTransitions;
893template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
895 return std::move ( callTransitions );
898template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
900 return returnTransitions;
903template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
905 return std::move ( returnTransitions );
908template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
910 return localTransitions;
913template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
915 return std::move ( localTransitions );
929template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
930class SetConstraint<
automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, InputSymbolType, automaton::CallAlphabet > {
942 if (symbol == callTransition.first.second)
967 if(
automaton.getLocalInputAlphabet().count(symbol))
969 if(
automaton.getReturnInputAlphabet().count(symbol))
981template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
982class SetConstraint<
automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, InputSymbolType, automaton::ReturnAlphabet > {
994 if (symbol == std::get<1>(returnTransition.first))
1019 if(
automaton.getLocalInputAlphabet().count(symbol))
1021 if(
automaton.getCallInputAlphabet().count(symbol))
1033template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1034class SetConstraint<
automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, InputSymbolType, automaton::LocalAlphabet > {
1046 if (symbol == localTransition.first.second)
1071 if(
automaton.getReturnInputAlphabet().count(symbol))
1073 if(
automaton.getCallInputAlphabet().count(symbol))
1085template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1086class SetConstraint<
automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, PushdownStoreSymbolType, automaton::PushdownStoreAlphabet > {
1098 if (symbol == callTransition.second.second)
1102 if (symbol == std::get<2>(returnTransition.first))
1105 if(
automaton.getBottomOfTheStackSymbol() == symbol)
1140template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1141class ElementConstraint<
automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, PushdownStoreSymbolType, automaton::BottomOfTheStackSymbol > {
1152 return automaton.template accessComponent < automaton::PushdownStoreAlphabet > ( ).get ( ).count ( symbol );
1172template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1184 if (
automaton.getInitialState ( ) == state )
1187 if (
automaton.getFinalStates ( ).count ( state ) )
1191 if (state == callTransition.first.first || callTransition.second.first == state)
1195 if (state == std::get<0>(returnTransition.first) || returnTransition.second == state)
1199 if (state == localTransition.first.first || localTransition.second == state)
1234template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1258 return automaton.template accessComponent < automaton::States > ( ).get ( ).count ( state );
1278template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1290 return automaton.template accessComponent < automaton::States > ( ).get ( ).count ( state );
1308template <
class InputSymbolType,
class PushdownStoreSymbolType,
class StateType >
1309struct normalize <
automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType > > {
1320 automaton::VisiblyPushdownDPDA < > res ( std::move ( states ), std::move ( call_alphabet ), std::move ( return_alphabet ), std::move ( local_alphabet ), std::move ( pushdownAlphabet ), std::move ( initialState ), std::move ( initialSymbol ), std::move ( finalStates ) );
1329 res.addCallTransition ( std::move ( from ), std::move ( input ), std::move ( to ), std::move ( push ) );
1339 res.addReturnTransition ( std::move ( from ), std::move ( input ), std::move ( pop ), std::move ( to ) );
1348 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 DefaultStateType normalizeState(StateType &&state)
Definition: AutomatonNormalize.h:76
static ext::multiset< DefaultStateType > normalizeStates(ext::multiset< StateType > &&states)
Definition: AutomatonNormalize.h:49
Deterministic visibly pushdown automaton. Accepts subset of context free languages.
Definition: VisiblyPushdownDPDA.h:86
const PushdownStoreSymbolType & getBottomOfTheStackSymbol() const &
Definition: VisiblyPushdownDPDA.h:331
bool removeInputSymbol(const InputSymbolType &symbol)
Definition: VisiblyPushdownDPDA.h:536
ext::set< InputSymbolType > && getCallInputAlphabet() &&
Definition: VisiblyPushdownDPDA.h:369
bool addLocalInputSymbol(InputSymbolType symbol)
Definition: VisiblyPushdownDPDA.h:496
const ext::set< InputSymbolType > & getCallInputAlphabet() const &
Definition: VisiblyPushdownDPDA.h:360
const ext::map< ext::tuple< StateType, InputSymbolType, PushdownStoreSymbolType >, StateType > & getReturnTransitions() const &
Definition: VisiblyPushdownDPDA.h:899
void addPushdownStoreSymbols(ext::set< PushdownStoreSymbolType > symbols)
Definition: VisiblyPushdownDPDA.h:302
bool setInitialState(StateType state)
Definition: VisiblyPushdownDPDA.h:166
ext::set< StateType > && getFinalStates() &&
Definition: VisiblyPushdownDPDA.h:233
ext::set< PushdownStoreSymbolType > && getPushdownStoreAlphabet() &&
Definition: VisiblyPushdownDPDA.h:282
const ext::map< ext::pair< StateType, InputSymbolType >, StateType > & getLocalTransitions() const &
Definition: VisiblyPushdownDPDA.h:909
void setFinalStates(ext::set< StateType > states)
Definition: VisiblyPushdownDPDA.h:253
bool addReturnTransition(StateType from, InputSymbolType input, PushdownStoreSymbolType pop, StateType to)
Adds a return transition to the automaton.
Definition: VisiblyPushdownDPDA.h:772
void setPushdownStoreAlphabet(ext::set< PushdownStoreSymbolType > symbols)
Definition: VisiblyPushdownDPDA.h:311
PushdownStoreSymbolTypeT PushdownStoreSymbolType
Definition: VisiblyPushdownDPDA.h:89
bool addCallInputSymbol(InputSymbolType symbol)
Definition: VisiblyPushdownDPDA.h:380
const ext::set< StateType > & getFinalStates() const &
Definition: VisiblyPushdownDPDA.h:224
bool removeCallTransition(const StateType &from, const InputSymbolType &input, const StateType &to, const PushdownStoreSymbolType &push)
Removes a call transition from the automaton.
Definition: VisiblyPushdownDPDA.h:846
void setLocalInputAlphabet(ext::set< InputSymbolType > symbols)
Definition: VisiblyPushdownDPDA.h:514
bool removeReturnInputSymbol(const InputSymbolType &symbol)
Definition: VisiblyPushdownDPDA.h:467
bool removeCallInputSymbol(const InputSymbolType &symbol)
Definition: VisiblyPushdownDPDA.h:409
StateType StateType_t
Definition: VisiblyPushdownDPDA.h:112
bool operator==(const VisiblyPushdownDPDA &other) const
Definition: VisiblyPushdownDPDA.h:694
void setStates(ext::set< StateType > states)
Definition: VisiblyPushdownDPDA.h:204
bool setBottomOfTheStackSymbol(PushdownStoreSymbolType symbol)
Definition: VisiblyPushdownDPDA.h:351
bool removeReturnTransition(const StateType &from, const InputSymbolType &input, const PushdownStoreSymbolType &pop, const StateType &to)
Removes a return transition from the automaton.
Definition: VisiblyPushdownDPDA.h:861
ext::set< StateType > && getStates() &&
Definition: VisiblyPushdownDPDA.h:184
bool addPushdownStoreSymbol(PushdownStoreSymbolType symbol)
Definition: VisiblyPushdownDPDA.h:293
bool removeLocalInputSymbol(const InputSymbolType &symbol)
Definition: VisiblyPushdownDPDA.h:525
const ext::set< InputSymbolType > & getLocalInputAlphabet() const &
Definition: VisiblyPushdownDPDA.h:476
PushdownStoreSymbolType PushdownStoreSymbolType_t
Definition: VisiblyPushdownDPDA.h:117
void setReturnInputAlphabet(ext::set< InputSymbolType > symbols)
Definition: VisiblyPushdownDPDA.h:456
VisiblyPushdownDPDA(ext::set< StateType > states, ext::set< InputSymbolType > callAlphabet, ext::set< InputSymbolType > returnAlphabet, ext::set< InputSymbolType > localAlphabet, 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: VisiblyPushdownDPDA.h:724
void addCallInputSymbols(ext::set< InputSymbolType > symbols)
Definition: VisiblyPushdownDPDA.h:389
friend ext::ostream & operator<<(ext::ostream &out, const VisiblyPushdownDPDA &instance)
Definition: VisiblyPushdownDPDA.h:706
void addReturnInputSymbols(ext::set< InputSymbolType > symbols)
Definition: VisiblyPushdownDPDA.h:447
const ext::map< ext::pair< StateType, InputSymbolType >, ext::pair< StateType, PushdownStoreSymbolType > > & getCallTransitions() const &
Definition: VisiblyPushdownDPDA.h:889
bool addLocalTransition(StateType from, InputSymbolType input, StateType to)
Adds a local transition to the automaton.
Definition: VisiblyPushdownDPDA.h:811
const ext::set< StateType > & getStates() const &
Definition: VisiblyPushdownDPDA.h:175
bool addReturnInputSymbol(InputSymbolType symbol)
Definition: VisiblyPushdownDPDA.h:438
const ext::set< PushdownStoreSymbolType > & getPushdownStoreAlphabet() const &
Definition: VisiblyPushdownDPDA.h:273
bool removeFinalState(const StateType &state)
Definition: VisiblyPushdownDPDA.h:264
bool removeLocalTransition(const StateType &from, const InputSymbolType &input, const StateType &to)
Removes a local transition from the automaton.
Definition: VisiblyPushdownDPDA.h:875
bool addFinalState(StateType state)
Definition: VisiblyPushdownDPDA.h:244
ext::set< InputSymbolType > && getReturnInputAlphabet() &&
Definition: VisiblyPushdownDPDA.h:427
bool addCallTransition(StateType from, InputSymbolType input, StateType to, PushdownStoreSymbolType push)
Adds a call transition to the automaton.
Definition: VisiblyPushdownDPDA.h:732
StateType && getInitialState() &&
Definition: VisiblyPushdownDPDA.h:155
InputSymbolTypeT InputSymbolType
Definition: VisiblyPushdownDPDA.h:88
bool removePushdownStoreSymbol(const PushdownStoreSymbolType &symbol)
Definition: VisiblyPushdownDPDA.h:322
bool removeState(const StateType &state)
Definition: VisiblyPushdownDPDA.h:215
void addLocalInputSymbols(ext::set< InputSymbolType > symbols)
Definition: VisiblyPushdownDPDA.h:505
const ext::set< InputSymbolType > & getReturnInputAlphabet() const &
Definition: VisiblyPushdownDPDA.h:418
PushdownStoreSymbolType && getBottomOfTheStackSymbol() &&
Definition: VisiblyPushdownDPDA.h:340
StateTypeT StateType
Definition: VisiblyPushdownDPDA.h:90
void setCallInputAlphabet(ext::set< InputSymbolType > symbols)
Definition: VisiblyPushdownDPDA.h:398
bool addState(StateType state)
Definition: VisiblyPushdownDPDA.h:195
const StateType & getInitialState() const &
Definition: VisiblyPushdownDPDA.h:146
ext::set< InputSymbolType > && getLocalInputAlphabet() &&
Definition: VisiblyPushdownDPDA.h:485
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
typename T::StateType StateType
Definition: ToGrammarLeftRG.h:64
return res
Definition: MinimizeByPartitioning.h:145
Definition: ToGrammar.h:31
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