aboutsummaryrefslogtreecommitdiffstats
path: root/src/blind-dual-key.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2017-07-16 00:59:42 +0200
committerMattias Andrée <maandree@kth.se>2017-07-16 00:59:42 +0200
commitc216ac3049102422a41ba2c9476b0dbf4f3e4034 (patch)
tree809793e1f01fafcb67422f654b6e9dbcab897660 /src/blind-dual-key.c
parentInstall the scripts (diff)
downloadblind-c216ac3049102422a41ba2c9476b0dbf4f3e4034.tar.gz
blind-c216ac3049102422a41ba2c9476b0dbf4f3e4034.tar.bz2
blind-c216ac3049102422a41ba2c9476b0dbf4f3e4034.tar.xz
Use #include instead of #define
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/blind-dual-key.c')
-rw-r--r--src/blind-dual-key.c90
1 files changed, 48 insertions, 42 deletions
diff --git a/src/blind-dual-key.c b/src/blind-dual-key.c
index 8dff71c..2394085 100644
--- a/src/blind-dual-key.c
+++ b/src/blind-dual-key.c
@@ -1,52 +1,13 @@
/* See LICENSE file for copyright and license details. */
+#ifndef TYPE
#include "common.h"
USAGE("[-m] X Y Z dual-X dual-Y dual-Z dual-stream")
static double X1, Y1, Z1, X2, Y2, Z2;
-#define PROCESS(TYPE)\
- do {\
- size_t i;\
- TYPE x1k = (TYPE)X1, y1k = (TYPE)Y1, z1k = (TYPE)Z1;\
- TYPE x2k = (TYPE)X2, y2k = (TYPE)Y2, z2k = (TYPE)Z2;\
- TYPE x1, y1, z1, a1, x2, y2, z2, a2;\
- TYPE alpha, xalpha, yalpha, zalpha;\
- for (i = 0; i < n; i += stream->pixel_size) {\
- x1 = ((TYPE *)(stream->buf + i))[0];\
- y1 = ((TYPE *)(stream->buf + i))[1];\
- z1 = ((TYPE *)(stream->buf + i))[2];\
- a1 = ((TYPE *)(stream->buf + i))[3];\
- x2 = ((TYPE *)(dual->buf + i))[0];\
- y2 = ((TYPE *)(dual->buf + i))[1];\
- z2 = ((TYPE *)(dual->buf + i))[2];\
- a2 = ((TYPE *)(dual->buf + i))[3];\
- if (x1 == x2 && y1 == y2 && z1 == z2) {\
- if (a1 != a2)\
- ((TYPE *)(stream->buf + i))[3] = (a1 + a2) / 2;\
- continue;\
- }\
- xalpha = x1 == x2 ? (TYPE)0 : (x2 - x1 + x1k - x2k) / (x1k - x2k);\
- yalpha = y1 == y2 ? (TYPE)0 : (y2 - y1 + y1k - y2k) / (y1k - y2k);\
- zalpha = z1 == z2 ? (TYPE)0 : (z2 - z1 + z1k - z2k) / (z1k - z2k);\
- alpha = xalpha > yalpha ? xalpha : yalpha;\
- alpha = alpha > zalpha ? alpha : zalpha;\
- if (!alpha) {\
- ((TYPE *)(stream->buf + i))[0] = (TYPE)0;\
- ((TYPE *)(stream->buf + i))[1] = (TYPE)0;\
- ((TYPE *)(stream->buf + i))[2] = (TYPE)0;\
- ((TYPE *)(stream->buf + i))[3] = (TYPE)0;\
- } else {\
- ((TYPE *)(stream->buf + i))[0] = ((x1 - x1k + x2 - x2k) / alpha + x1k + x2k) / 2;\
- ((TYPE *)(stream->buf + i))[1] = ((y1 - y1k + y2 - y2k) / alpha + y1k + y2k) / 2;\
- ((TYPE *)(stream->buf + i))[2] = ((z1 - z1k + z2 - z2k) / alpha + z1k + z2k) / 2;\
- ((TYPE *)(stream->buf + i))[3] = (a1 + a2) / 2 * alpha;\
- }\
- }\
- } while (0)
-
-static void process_lf(struct stream *stream, struct stream *dual, size_t n) {PROCESS(double);}
-static void process_f (struct stream *stream, struct stream *dual, size_t n) {PROCESS(float);}
+#define FILE "blind-dual-key.c"
+#include "define-functions.h"
int
main(int argc, char *argv[])
@@ -79,3 +40,48 @@ main(int argc, char *argv[])
process_two_streams(&stream, &dual, STDOUT_FILENO, "<stdout>", process);
return 0;
}
+
+#else
+
+static void
+PROCESS(struct stream *stream, struct stream *dual, size_t n)
+{
+ size_t i;
+ TYPE x1k = (TYPE)X1, y1k = (TYPE)Y1, z1k = (TYPE)Z1;
+ TYPE x2k = (TYPE)X2, y2k = (TYPE)Y2, z2k = (TYPE)Z2;
+ TYPE x1, y1, z1, a1, x2, y2, z2, a2;
+ TYPE alpha, xalpha, yalpha, zalpha;
+ for (i = 0; i < n; i += stream->pixel_size) {
+ x1 = ((TYPE *)(stream->buf + i))[0];
+ y1 = ((TYPE *)(stream->buf + i))[1];
+ z1 = ((TYPE *)(stream->buf + i))[2];
+ a1 = ((TYPE *)(stream->buf + i))[3];
+ x2 = ((TYPE *)(dual->buf + i))[0];
+ y2 = ((TYPE *)(dual->buf + i))[1];
+ z2 = ((TYPE *)(dual->buf + i))[2];
+ a2 = ((TYPE *)(dual->buf + i))[3];
+ if (x1 == x2 && y1 == y2 && z1 == z2) {
+ if (a1 != a2)
+ ((TYPE *)(stream->buf + i))[3] = (a1 + a2) / 2;
+ continue;
+ }
+ xalpha = x1 == x2 ? (TYPE)0 : (x2 - x1 + x1k - x2k) / (x1k - x2k);
+ yalpha = y1 == y2 ? (TYPE)0 : (y2 - y1 + y1k - y2k) / (y1k - y2k);
+ zalpha = z1 == z2 ? (TYPE)0 : (z2 - z1 + z1k - z2k) / (z1k - z2k);
+ alpha = xalpha > yalpha ? xalpha : yalpha;
+ alpha = alpha > zalpha ? alpha : zalpha;
+ if (!alpha) {
+ ((TYPE *)(stream->buf + i))[0] = (TYPE)0;
+ ((TYPE *)(stream->buf + i))[1] = (TYPE)0;
+ ((TYPE *)(stream->buf + i))[2] = (TYPE)0;
+ ((TYPE *)(stream->buf + i))[3] = (TYPE)0;
+ } else {
+ ((TYPE *)(stream->buf + i))[0] = ((x1 - x1k + x2 - x2k) / alpha + x1k + x2k) / 2;
+ ((TYPE *)(stream->buf + i))[1] = ((y1 - y1k + y2 - y2k) / alpha + y1k + y2k) / 2;
+ ((TYPE *)(stream->buf + i))[2] = ((z1 - z1k + z2 - z2k) / alpha + z1k + z2k) / 2;
+ ((TYPE *)(stream->buf + i))[3] = (a1 + a2) / 2 * alpha;
+ }
+ }
+}
+
+#endif