#include "Global.h"
+#include "String.h"
+
#include <pp/Format.h>
+namespace
+{
+
+template <typename Container> std::string concat(const std::string &sep, Container &&c)
+{
+ std::stringstream ss;
+ enco::concat(ss, sep, c.begin(), c.end());
+ return ss.str();
+}
+
+template <typename Callable, typename InputIt>
+auto transform(Callable &&cb, InputIt beg, InputIt end) -> std::vector<decltype(cb(*beg))>
+{
+ using U = decltype(cb(*beg));
+ std::vector<U> res;
+
+ for (auto it = beg; it != end; ++it)
+ {
+ res.emplace_back(cb(*it));
+ }
+
+ return res;
+}
+
+std::string u32_to_dec(uint32_t value)
+{
+ std::stringstream ss;
+ ss << value;
+ return ss.str();
+}
+
+std::string u08_to_hex(uint8_t value)
+{
+ std::stringstream ss;
+ ss << "0x" << std::hex << value + 0;
+ return ss.str();
+}
+
+} // namespace
+
namespace enco
{
std::stringstream ss;
ss << "const uint32_t " << name << "[" << values.size() << "] = { ";
- if (values.size() > 0)
- {
- ss << values.at(0);
- for (uint32_t n = 1; n < values.size(); ++n)
- {
- ss << ", " << values.at(n);
- }
- }
+ ss << ::concat(", ", transform(u32_to_dec, values.begin(), values.end()));
ss << " };";
_content.append(ss.str());
std::stringstream ss;
ss << "const uint8_t " << name << "[" << size << "] = { ";
-
- if (size > 0)
- {
- ss << "0x" << std::hex << (base[0] + 0);
-
- for (uint32_t n = 1; n < size; ++n)
- {
- ss << ", 0x" << std::hex << (base[n] + 0);
- }
- }
-
+ ss << ::concat(", ", transform(u08_to_hex, base, base + size));
ss << " };";
_content.append(ss.str());