mirror of
git://projects.qi-hardware.com/cae-tools.git
synced 2024-12-23 04:23:55 +02:00
poly2d/: add foreach_v2d* and foreach_edges looping constructs
This commit is contained in:
parent
1c11f4d201
commit
3ee5b1aa31
@ -23,7 +23,7 @@ OBJS = v2d_intersect.o v2d_line_distance.o \
|
||||
CFLAGS_WARN = -Wall -Wshadow -Wmissing-prototypes \
|
||||
-Wmissing-declarations -Wno-format-zero-length
|
||||
|
||||
CFLAGS = $(CFLAGS_WARN) -g
|
||||
CFLAGS = $(CFLAGS_WARN) -g -std=gnu99
|
||||
CXXFLAGS = -Wall -frounding-math
|
||||
LDFLAGS =
|
||||
LDLIBS = -lm
|
||||
|
@ -30,6 +30,34 @@ struct p2d {
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* forall_v2d* need -std=gnu99
|
||||
*/
|
||||
|
||||
#define forall_v2d_once(var, first) \
|
||||
for (const struct v2d *__fv2do_0 = (var = (first)); \
|
||||
var; \
|
||||
var = var->next == __fv2do_0 ? NULL : var->next)
|
||||
|
||||
#define forall_v2d(var, first) \
|
||||
for (const struct v2d *__fv2d_0 = (var = (first)); \
|
||||
var; \
|
||||
({ \
|
||||
var = __fv2d_0 ? var->next : NULL; \
|
||||
if (var == __fv2d_0) \
|
||||
__fv2d_0 = NULL; \
|
||||
}))
|
||||
|
||||
#define forall_edges(a, b, first) \
|
||||
for (const struct v2d *__fe_0 = \
|
||||
(a = (first), b = a ? a->next : a, a); \
|
||||
a && b; \
|
||||
({ \
|
||||
a = b; \
|
||||
b = b == __fe_0 ? NULL : b->next; \
|
||||
}))
|
||||
|
||||
|
||||
/*
|
||||
* Polygon creation
|
||||
*/
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
compile_and_run()
|
||||
{
|
||||
CFLAGS="-Wall -Werror -g -std=gnu99 -I.."
|
||||
LIBS="-lpoly2d -lCGAL -lCGAL_Core -lboost_thread"
|
||||
LIBS="$LIBS -lstdc++ -lmpfr -lgmp -lm"
|
||||
|
||||
@ -54,7 +55,7 @@ int main(void)
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
gcc -Wall -Werror -g -I.. _.c -L.. $LIBS || return
|
||||
gcc $CFLAGS _.c -L.. $LIBS || return
|
||||
$VALGRIND ./a.out
|
||||
}
|
||||
|
||||
|
121
poly2d/test/forall
Executable file
121
poly2d/test/forall
Executable file
@ -0,0 +1,121 @@
|
||||
#!/bin/sh
|
||||
. ./Common
|
||||
|
||||
###############################################################################
|
||||
|
||||
tst "forall_v2d_once, open polygon" <<EOF
|
||||
struct p2d *p = p2d_new();
|
||||
const struct v2d *v;
|
||||
|
||||
p2d_append(p, v2d_new(0, 0));
|
||||
p2d_append(p, v2d_new(1, 0));
|
||||
p2d_append(p, v2d_new(2, 3));
|
||||
forall_v2d_once(v, p->v)
|
||||
printf("%g %g\n", v->x, v->y);
|
||||
EOF
|
||||
|
||||
expect <<EOF
|
||||
0 0
|
||||
1 0
|
||||
2 3
|
||||
EOF
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
tst "forall_v2d_once, closed polygon" <<EOF
|
||||
struct p2d *p = p2d_new();
|
||||
const struct v2d *v;
|
||||
|
||||
p2d_append(p, v2d_new(0, 0));
|
||||
p2d_append(p, v2d_new(1, 0));
|
||||
p2d_append(p, v2d_new(2, 3));
|
||||
p2d_close(p);
|
||||
forall_v2d_once(v, p->v)
|
||||
printf("%g %g\n", v->x, v->y);
|
||||
EOF
|
||||
|
||||
expect <<EOF
|
||||
0 0
|
||||
1 0
|
||||
2 3
|
||||
EOF
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
tst "forall_v2d, open polygon" <<EOF
|
||||
struct p2d *p = p2d_new();
|
||||
const struct v2d *v;
|
||||
|
||||
p2d_append(p, v2d_new(0, 0));
|
||||
p2d_append(p, v2d_new(1, 0));
|
||||
p2d_append(p, v2d_new(2, 3));
|
||||
forall_v2d(v, p->v)
|
||||
printf("%g %g\n", v->x, v->y);
|
||||
EOF
|
||||
|
||||
expect <<EOF
|
||||
0 0
|
||||
1 0
|
||||
2 3
|
||||
EOF
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
tst "forall_v2d, closed polygon" <<EOF
|
||||
struct p2d *p = p2d_new();
|
||||
const struct v2d *v;
|
||||
|
||||
p2d_append(p, v2d_new(0, 0));
|
||||
p2d_append(p, v2d_new(1, 0));
|
||||
p2d_append(p, v2d_new(2, 3));
|
||||
p2d_close(p);
|
||||
forall_v2d(v, p->v)
|
||||
printf("%g %g\n", v->x, v->y);
|
||||
EOF
|
||||
|
||||
expect <<EOF
|
||||
0 0
|
||||
1 0
|
||||
2 3
|
||||
0 0
|
||||
EOF
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
tst "forall_edges, open polygon" <<EOF
|
||||
struct p2d *p = p2d_new();
|
||||
const struct v2d *a, *b;
|
||||
|
||||
p2d_append(p, v2d_new(0, 0));
|
||||
p2d_append(p, v2d_new(1, 0));
|
||||
p2d_append(p, v2d_new(2, 3));
|
||||
forall_edges(a, b, p->v)
|
||||
printf("%g %g %g %g\n", a->x, a->y, b->x, b->y);
|
||||
EOF
|
||||
|
||||
expect <<EOF
|
||||
0 0 1 0
|
||||
1 0 2 3
|
||||
EOF
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
tst "forall_edges, closed polygon" <<EOF
|
||||
struct p2d *p = p2d_new();
|
||||
const struct v2d *a, *b;
|
||||
|
||||
p2d_append(p, v2d_new(0, 0));
|
||||
p2d_append(p, v2d_new(1, 0));
|
||||
p2d_append(p, v2d_new(2, 3));
|
||||
p2d_close(p);
|
||||
forall_edges(a, b, p->v)
|
||||
printf("%g %g %g %g\n", a->x, a->y, b->x, b->y);
|
||||
EOF
|
||||
|
||||
expect <<EOF
|
||||
0 0 1 0
|
||||
1 0 2 3
|
||||
2 3 0 0
|
||||
EOF
|
||||
|
||||
###############################################################################
|
Loading…
Reference in New Issue
Block a user