9#include <kernel/util/string.hpp>
25 bool variadic_ = Factory_::variadic>
26 class AvailFunctorHelper;
31 class AvailFunctorHelper<Factory_, Functor_, false>
37 explicit AvailFunctorHelper(Functor_& functor) :
40 _functor.add_name(Factory_::name());
43 void alias(
const String& name)
45 _functor.add_alias(name, Factory_::name());
52 class AvailFunctorHelper<Factory_, Functor_, true>
58 explicit AvailFunctorHelper(Functor_& functor) :
61 _functor.add_name(Factory_::name() +
":<"
62 +
stringify(
int(Factory_::min_points)) +
"-"
63 +
stringify(
int(Factory_::max_points)) +
">");
66 void alias(
const String& name,
int num_points)
68 _functor.add_alias(name, Factory_::name() +
":" +
stringify(num_points));
75 std::set<String>& _names;
79 explicit AvailSetFunctor(std::set<String>& names,
bool aliases) :
85 template<
typename Factory_>
88 AvailFunctorHelper<Factory_, AvailSetFunctor> functor(*
this);
90 Factory_::alias(functor);
93 void add_name(
const String& name)
98 void add_alias(
const String& alias,
const String& )
101 _names.insert(alias);
105 class AvailMapFunctor
108 std::map<String,String>& _names;
111 explicit AvailMapFunctor(std::map<String,String>& names) :
116 template<
typename Factory_>
119 AvailFunctorHelper<Factory_, AvailMapFunctor> functor(*
this);
120 Factory_::alias(functor);
123 void add_name(
const String& name)
125 _names.insert(std::make_pair(name, String()));
128 void add_alias(
const String& alias,
const String& name)
130 _names.insert(std::make_pair(alias, name));
String stringify(const T_ &item)
Converts an item into a String.