summaryrefslogtreecommitdiff
path: root/transpose.h
diff options
context:
space:
mode:
authorkartofen <mladenovnasko0@gmail.com>2025-06-08 23:16:33 +0300
committerkartofen <mladenovnasko0@gmail.com>2025-06-08 23:16:33 +0300
commit227f73622b4576bf21719fcc9ea99416056d8a71 (patch)
tree1ab6d7c0e8dab40aa26def1a2ea6098134e82ea8 /transpose.h
init, have brushed and brushless sim and gnuplot viz, also some usb hid testingHEADmaster
Diffstat (limited to 'transpose.h')
-rw-r--r--transpose.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/transpose.h b/transpose.h
new file mode 100644
index 0000000..02471ff
--- /dev/null
+++ b/transpose.h
@@ -0,0 +1,54 @@
+#define EMPTY()
+#define EXPAND(...) __VA_ARGS__
+#define DEFER(id) id EMPTY()
+#define OBSTRUCT(...) __VA_ARGS__ DEFER(EMPTY)()
+#define CAR(a, ...) a
+#define CDR(a, ...) __VA_OPT__((__VA_ARGS__))
+
+#define I_A() A
+#define I_B() B
+#define I_C() C
+
+#ifndef DELIM
+ #define DELIM COMMA
+#endif
+#ifndef P
+ #define P(...) { __VA_ARGS__ } COMMA
+#endif
+
+#define COMMA ,
+#define HAS(b, ...) __VA_OPT__(__VA_ARGS__ b)
+
+#define EVAL(...) EVAL1(EVAL1(EVAL1(__VA_ARGS__)))
+#define EVAL1(...) EVAL2(EVAL2(EVAL2(__VA_ARGS__)))
+#define EVAL2(...) EVAL3(EVAL3(EVAL3(__VA_ARGS__)))
+#define EVAL3(...) EVAL4(EVAL4(EVAL4(__VA_ARGS__)))
+#define EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__)))
+#define EVAL5(...) EVAL6(EVAL6(EVAL6(__VA_ARGS__)))
+#define EVAL6(...) EVAL7(EVAL7(EVAL7(__VA_ARGS__)))
+#define EVAL7(...) __VA_ARGS__
+
+// #define DEFER0(...) DEFER1(DEFER1(DEFER1(__VA_ARGS__)))
+// #define DEFER1(...) DEFER2(DEFER2(DEFER2(__VA_ARGS__)))
+// #define DEFER2(...) DEFER3(DEFER3(DEFER3(__VA_ARGS__)))
+// #define DEFER3(...) DEFER4(DEFER4(DEFER4(__VA_ARGS__)))
+// #define DEFER4(...) DEFER5(DEFER5(DEFER5(__VA_ARGS__)))
+// #define DEFER5(...) DEFER6(DEFER6(DEFER6(__VA_ARGS__)))
+// #define DEFER6(...) DEFER (DEFER (DEFER (__VA_ARGS__)))
+
+#define A(a, ...) HAS(__VA_OPT__(DELIM OBSTRUCT(I_A)()(__VA_ARGS__)), CAR a)
+#define B(a, ...) HAS(__VA_OPT__(COMMA OBSTRUCT(I_B)()(__VA_ARGS__)), CDR a)
+#define C(...) __VA_OPT__(P(A(__VA_ARGS__)) DEFER(OBSTRUCT(I_C)())DEFER(EXPAND)((B(__VA_ARGS__))))
+
+#define TRANSPOSE(...) EVAL(C(__VA_ARGS__))
+
+// #define TEST
+#ifdef TEST
+ TRANSPOSE((1, 2, 3), (4, 5, 6))
+ TRANSPOSE((1, 2, 3), (4, 5, 6), (4, 5, 6), (4, 5, 6), (4, 5, 6))
+ // EXPAND(EXPAND(EXPAND(EXPAND(EXPAND(EXPAND(B((1, 4), (2, 6))))))))
+#endif
+
+
+
+