util/TemplateString: rewrite as constexpr functions
Hooray C++17!
This commit is contained in:

committed by
Max Kellermann

parent
e7c4e87ac4
commit
02314ac7dd
@@ -103,7 +103,7 @@ public:
|
||||
template<typename T>
|
||||
AppendMessageIter &AppendEmptyArray() {
|
||||
return AppendMessageIter(*this, DBUS_TYPE_ARRAY,
|
||||
T::TypeAsString::value)
|
||||
T::as_string.value)
|
||||
.CloseContainer(*this);
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ public:
|
||||
AppendMessageIter &AppendVariant(const T &value) {
|
||||
typedef VariantTypeTraits Traits;
|
||||
return AppendMessageIter(*this, Traits::TYPE,
|
||||
Traits::TypeAsString::value)
|
||||
Traits::as_string.value)
|
||||
.Append(value)
|
||||
.CloseContainer(*this);
|
||||
}
|
||||
@@ -146,7 +146,7 @@ public:
|
||||
typedef typename W::ContainedTraits ContainedTraits;
|
||||
|
||||
return AppendMessageIter(*this, Traits::TYPE,
|
||||
ContainedTraits::TypeAsString::value)
|
||||
ContainedTraits::as_string.value)
|
||||
.Append(value.value)
|
||||
.CloseContainer(*this);
|
||||
}
|
||||
@@ -158,7 +158,7 @@ public:
|
||||
typedef typename W::ContainedTraits ContainedTraits;
|
||||
|
||||
return AppendMessageIter(*this, Traits::TYPE,
|
||||
ContainedTraits::TypeAsString::value)
|
||||
ContainedTraits::as_string.value)
|
||||
.AppendFixedArray(value.value)
|
||||
.CloseContainer(*this);
|
||||
}
|
||||
|
@@ -42,7 +42,7 @@ namespace ODBus {
|
||||
template<int type>
|
||||
struct BasicTypeTraits {
|
||||
static constexpr int TYPE = type;
|
||||
using TypeAsString = TemplateString::CharAsString<TYPE>;
|
||||
static constexpr auto as_string = TemplateString::CharAsString(TYPE);
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
@@ -73,20 +73,20 @@ struct ArrayTypeTraits {
|
||||
using ContainedTraits = T;
|
||||
|
||||
static constexpr int TYPE = DBUS_TYPE_ARRAY;
|
||||
using TypeAsString =
|
||||
TemplateString::InsertBefore<TYPE,
|
||||
typename ContainedTraits::TypeAsString>;
|
||||
static constexpr auto as_string =
|
||||
TemplateString::Concat(TemplateString::CharAsString(TYPE),
|
||||
ContainedTraits::as_string);
|
||||
};
|
||||
|
||||
template<typename KeyT, typename ValueT>
|
||||
struct DictEntryTypeTraits {
|
||||
static constexpr int TYPE = DBUS_TYPE_DICT_ENTRY;
|
||||
|
||||
using TypeAsString =
|
||||
TemplateString::Concat<TemplateString::CharAsString<DBUS_DICT_ENTRY_BEGIN_CHAR>,
|
||||
typename KeyT::TypeAsString,
|
||||
typename ValueT::TypeAsString,
|
||||
TemplateString::CharAsString<DBUS_DICT_ENTRY_END_CHAR>>;
|
||||
static constexpr auto as_string =
|
||||
TemplateString::Concat(TemplateString::CharAsString(DBUS_DICT_ENTRY_BEGIN_CHAR),
|
||||
KeyT::as_string,
|
||||
ValueT::as_string,
|
||||
TemplateString::CharAsString(DBUS_DICT_ENTRY_END_CHAR));
|
||||
};
|
||||
|
||||
using VariantTypeTraits = BasicTypeTraits<DBUS_TYPE_VARIANT>;
|
||||
@@ -95,21 +95,25 @@ using VariantTypeTraits = BasicTypeTraits<DBUS_TYPE_VARIANT>;
|
||||
* Concatenate all TypeAsString members to one string.
|
||||
*/
|
||||
template<typename T, typename... ContainedTraits>
|
||||
struct ConcatTypeAsString
|
||||
: TemplateString::Concat<typename T::TypeAsString,
|
||||
ConcatTypeAsString<ContainedTraits...>> {};
|
||||
struct ConcatTypeAsString {
|
||||
static constexpr auto as_string =
|
||||
TemplateString::Concat(T::as_string,
|
||||
ConcatTypeAsString<ContainedTraits...>::as_string);
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct ConcatTypeAsString<T> : T::TypeAsString {};
|
||||
struct ConcatTypeAsString<T> {
|
||||
static constexpr auto as_string = T::as_string;
|
||||
};
|
||||
|
||||
template<typename... ContainedTraits>
|
||||
struct StructTypeTraits {
|
||||
static constexpr int TYPE = DBUS_TYPE_STRUCT;
|
||||
|
||||
using TypeAsString =
|
||||
TemplateString::Concat<TemplateString::CharAsString<DBUS_STRUCT_BEGIN_CHAR>,
|
||||
ConcatTypeAsString<ContainedTraits...>,
|
||||
TemplateString::CharAsString<DBUS_STRUCT_END_CHAR>>;
|
||||
static constexpr auto as_string =
|
||||
TemplateString::Concat(TemplateString::CharAsString(DBUS_STRUCT_BEGIN_CHAR),
|
||||
ConcatTypeAsString<ContainedTraits...>::as_string,
|
||||
TemplateString::CharAsString(DBUS_STRUCT_END_CHAR));
|
||||
};
|
||||
|
||||
} /* namespace ODBus */
|
||||
|
Reference in New Issue
Block a user