From 227f73622b4576bf21719fcc9ea99416056d8a71 Mon Sep 17 00:00:00 2001 From: kartofen Date: Sun, 8 Jun 2025 23:16:33 +0300 Subject: init, have brushed and brushless sim and gnuplot viz, also some usb hid testing --- transpose.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 transpose.h (limited to 'transpose.h') 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 + + + + -- cgit v1.2.3