3 #include <initializer_list> 10 #include <boost/optional.hpp> 77 template <
typename... Args>
82 return {sname<Args>()...};
109 template <
typename T>
113 #define DEFINE(...) \ 115 struct snamer<__VA_ARGS__> \ 117 static symbol name() \ 119 auto res = symbol{#__VA_ARGS__}; \ 125 struct vnamer<__VA_ARGS__> \ 127 static symbol name(__VA_ARGS__&) \ 129 auto res = symbol{#__VA_ARGS__}; \ 158 template <
typename T, T Value>
163 symbol res(
"std::integral_constant<unsigned, " 169 template <
typename T, T Value>
172 using type = std::integral_constant<T, Value>;
175 return sname<type>();
220 template <
typename Dyn>
223 using type =
const std::vector<Dyn>;
227 for (
const auto& a: t)
233 return symbol{
"std::tuple<" + names +
'>'};
239 struct vnamer<const std::vector<dyn::automaton>>
245 struct vnamer<const std::vector<dyn::context>>
251 struct vnamer<const std::vector<dyn::expansion>>
257 struct vnamer<const std::vector<dyn::expression>>
263 struct vnamer<const std::vector<dyn::label>>
269 struct vnamer<const std::vector<dyn::polynomial>>
275 struct vnamer<const std::vector<dyn::weight>>
280 template <
typename... Args>
283 template <
typename T1>
289 template <
typename T1,
typename T2,
typename... Ts>
292 return sname<T1>() +
", " + name<T2, Ts...>();
297 return symbol{
"std::tuple<" +
name<Args...>() +
'>'};
307 template <
typename... Args>
312 return {
vname(std::forward<Args>(args))...};
static symbol name(const type &t)
const std::vector< dyn::label > type
std::integral_constant< T, Value > type
static std::string name()
Request the set implementation (bool weights).
static std::string name()
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
static symbol name(integral_constant t)
An expressionset can implement several different sets of identities on expressions.
A simple placeholder for integral constants.
std::string to_string(identities i)
Wrapper around operator<<.
ValueSet::value_t tuple(const ValueSet &vs, const typename ValueSets::value_t &... v)
The vname of a vector of dyn:: objects (e.g., automaton, expression, ...) is the tuple of their vname...
Signature of a function call.
signature vsignature(Args &&... args)
The signature of (Args...).
signature ssignature()
Static signature.