*
* We label edges as follows:
*
- * \0 /1
+ * e: \2 /1
* \ /
* ___ 0 __
- * 2 1 3
+ * 3 1 0
* / \
* 4/ 5\
- *
- * (This numbering permits the order-4 nodes at the strip's edge
- * to have a contiguous edge numbering 2..5 or 0..3.)
- *
- * When we iterate over edges, we iterate first over vertices and then
- * over edges 0 to 2, disregarding edges 3 to 5.
*/
#ifndef MGRAPH_H
#define MGRAPH_H
-#define XBITS 4
+#include "common.h"
+
+#define XBITS 3
#define X (1<<XBITS)
-#define YBITS 4
+#define YBITS 3
#define Y (1<<YBITS)
/* vertex number: 0000 | y | x
#define XMASK (X-1)
#define YSHIFT XBITS
#define Y1 (1 << YSHIFT)
-#define YMASK (Y-1 << YSHIFT)
+#define YMASK ((Y-1) << YSHIFT)
+
+#define DIM (N*D3)
#define V6 6
#define FOR_VERTEX(v) \
for ((v)=0; (v)<N; (v)++)
-#define VE_MIN(v) ((v) & YMASK ? 0 : 2)
-#define VE_MAX(v) (~(v) & YMASK ? V6 : 4)
-
#define FOR_VPEDGE(v,e) \
- for ((e)=VE_MIN(v); (e)<VE_MAX(v); (e)++)
+ for ((e)=0; (e)<V6; (e)++)
extern int edge_end2(unsigned v1, int e);
#define EDGE_END2 edge_end2
FOR_VPEDGE((v1),(e)) \
if (((v2)= EDGE_END2((v1),(e)), \
(init), \
- (v2)) < 0) { otherwise } else
+ (v2)) < 0) { otherwise; } else
#define NOTHING ((void)0)
FOR_VERTEX((v1)) \
FOR_VEDGE((v1),(e),(v2))
-#define FOR_COORD(k) \
- for ((k)=0; (k)<D3; (k)++)
-
-#define K FOR_COORD(k)
-
#define FOR_RIM_VERTEX(vy,vx,v) \
for ((vy)=0; (vy)<Y; (vy)+=Y-1) \
for ((vx)=0; (v)= (vy)<<YSHIFT | (vx), (vx)<X; (vx)++)