5 #ifndef UAVCAN_MARSHAL_CHAR_ARRAY_FORMATTER_HPP_INCLUDED
6 #define UAVCAN_MARSHAL_CHAR_ARRAY_FORMATTER_HPP_INCLUDED
11 #if !defined(UAVCAN_CPP_VERSION) || !defined(UAVCAN_CPP11)
12 # error UAVCAN_CPP_VERSION
15 #if UAVCAN_CPP_VERSION >= UAVCAN_CPP11
16 # include <type_traits>
22 #if UAVCAN_CPP_VERSION >= UAVCAN_CPP11
24 template <
typename ArrayType_>
30 typename std::enable_if<std::is_floating_point<T>::value>::type
33 array_.template appendFormatted<double>(
"%g",
double(value));
37 typename std::enable_if<std::is_integral<T>::value>::type
40 if (std::is_same<T, char>())
42 if (array_.size() != array_.capacity())
44 array_.push_back(
typename ArrayType_::ValueType(value));
47 else if (std::is_signed<T>())
49 array_.template appendFormatted<long long>(
"%lli",
static_cast<long long>(value));
53 array_.template appendFormatted<unsigned long long>(
"%llu",
static_cast<unsigned long long>(value));
58 typename std::enable_if<std::is_pointer<T>::value && !std::is_same<T, const char*>::value>::type
61 array_.template appendFormatted<const void*>(
"%p",
static_cast<const void*
>(value));
66 array_.template appendFormatted<const char*>(
"%s", value);
84 template <
typename T,
typename... Args>
106 template <
typename ArrayType_>
112 typedef ArrayType_ ArrayType;
114 CharArrayFormatter(ArrayType& array)
118 ArrayType& getArray() {
return array_; }
119 const ArrayType& getArray()
const {
return array_; }
121 void write(
const char*
const text)
123 array_.template appendFormatted<const char*>(
"%s", text);
131 template <
typename A>
132 void write(
const char*
const format,
const A value)
134 array_.template appendFormatted<A>(
format, value);
142 #endif // UAVCAN_MARSHAL_CHAR_ARRAY_FORMATTER_HPP_INCLUDED