summaryrefslogtreecommitdiffstats
path: root/main.cpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2019-07-20 23:22:45 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2019-07-20 23:22:45 +0200
commit14d7e7275eb54efdfe59ba3ce3b53634286c3d05 (patch)
treec7d0eaed2826dda18a05da9e91d798c4a9a3418f /main.cpp
downloadcxxformat-14d7e7275eb54efdfe59ba3ce3b53634286c3d05.tar.gz
cxxformat-14d7e7275eb54efdfe59ba3ce3b53634286c3d05.zip
Initial
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..7a0ccd0
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,64 @@
+#include "cxxformat.hpp"
+#include <array>
+#include <iostream>
+
+
+template<size_t N, typename T>
+struct format::FormatConvert<std::string, T[N], std::enable_if_t<!std::is_same_v<format::detail::remove_cvref_t<T>, char>>>
+{
+ template<size_t _N>
+ static std::string accessConvert(const T *from)
+ {
+ if constexpr (_N == N)
+ {
+ return "}";
+ }
+ else
+ {
+ return format::format("%v", from[_N]) + (_N + 1 < N ? ", " : "") + accessConvert<_N + 1>(from);
+ }
+ }
+
+ static std::string convert(const T *from)
+ {
+ return "array[" + std::to_string(N) + "]{" + accessConvert<0>(from);
+ }
+};
+
+template<size_t N, typename T>
+struct format::FormatConvert<std::string, std::array<T, N>>
+{
+ static std::string convert(const std::array<T, N>& from)
+ {
+ return format::FormatConvert<std::string, T[N]>::convert(from.data());
+ }
+};
+
+template<size_t N, typename T>
+struct format::AutoConversion<std::array<T, N>>
+{
+ static std::string conversion(const std::array<T, N>&)
+ {
+ return "s";
+ }
+};
+
+template<size_t N, typename T>
+struct format::AutoConversion<T[N], std::enable_if_t<!std::is_same_v<format::detail::remove_cvref_t<T>, char>>>
+{
+ static std::string conversion(const T(&)[N])
+ {
+ return "s";
+ }
+};
+
+int main(int argc, char *argv[])
+{
+ std::cout << format::format("%v%v%v%v%v", 'H', 'a', 'l', 'l', 'o') << std::endl;
+ const std::array<int, 5> array[] = {std::array{1, 2, 3, 4, 5}, std::array{1, 2, 3, 4, 5}, std::array{1, 2, 3, 4, 5}, std::array{1, 2, 3, 4, 5}, std::array{1, 2, 3, 4, 5}};
+ std::cout << format::format("%V", &array) << std::endl;
+ std::cout << format::format("%s", std::array{1, 2, 3, 4, 5}) << std::endl;
+ std::cout << format::format("Hello %v: %-7v %v", "World", 3.5, 5) << std::endl;
+ std::cout << format::format("Hello %s: %d %03.5f", "World", 7, 3.5) << std::endl;
+ return 0;
+}