summaryrefslogtreecommitdiff
path: root/src/unit_print.h
diff options
context:
space:
mode:
authorClaudius Holeksa <mail@keldu.de>2023-05-23 18:32:59 +0200
committerClaudius Holeksa <mail@keldu.de>2023-05-23 18:32:59 +0200
commitcf18707c086a1b47600c924ae1f33a379d1d3fb2 (patch)
treec1beaf4fb536c5fce7831f0ea44dedbc6f8d5cc7 /src/unit_print.h
parent49cd4c7f007df26733f8c609c234a37be8214163 (diff)
nix: Fixed dev install and moved folders
Diffstat (limited to 'src/unit_print.h')
-rw-r--r--src/unit_print.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/unit_print.h b/src/unit_print.h
new file mode 100644
index 0000000..0f3cb72
--- /dev/null
+++ b/src/unit_print.h
@@ -0,0 +1,55 @@
+#include "./unit.h"
+
+#include <iostream>
+
+
+namespace std {
+template<typename UnitT, int64_t UnitE>
+inline ostream& operator<<(ostream& o, const kelun::unit_base<UnitT,UnitE>& ele){
+ o<<UnitT::short_name;
+ if constexpr ( UnitE != 1 ){
+ o<<'^'<<'('<<UnitE<<')';
+ }
+ return o;
+}
+}
+
+namespace kelun {
+template<typename... T>
+struct unit_print_impl {
+ static_assert(is_always_false<T...>, "Template type not supported");
+};
+
+template<typename UnitT, int64_t UnitE, typename... UnitTL, int64_t... UnitEL>
+struct unit_print_impl<unit_base<UnitT,UnitE>,unit_base<UnitTL,UnitEL>...> {
+ static std::ostream& print(std::ostream& o){
+
+ unit_base<UnitT,UnitE> element;
+
+ std::ostream& o_ret = o << element;
+
+ if constexpr (sizeof...(UnitTL) > 0){
+ std::ostream& o_ret_next = o_ret << ' ' << '*' << ' ';
+ return unit_print_impl<unit_base<UnitTL,UnitEL>...>::print(o_ret_next);
+ }
+
+ return o_ret<<']';
+ }
+};
+}
+
+namespace std {
+
+template<typename StorageT, typename... T>
+inline ostream& operator<<(ostream& o, const kelun::unit<StorageT,T...>& unit);
+
+template<typename StorageT, typename... UnitT, int64_t... UnitE>
+inline ostream& operator<<(ostream& o, const kelun::unit<StorageT,kelun::unit_base<UnitT,UnitE>...>& unit){
+ o << unit.data();
+ if constexpr (sizeof...(UnitT) > 0) {
+ auto& o_ret = o << ' '<<'[';
+ return kelun::unit_print_impl<kelun::unit_base<UnitT,UnitE>...>::print(o_ret);
+ }
+ return o;
+}
+}