7 static const unsigned dx[2][V6]= {{ +1, 0, -1, -1, -1, 0 },
8 { +1, +1, 0, -1, 0, +1 }},
9 dy[V6]= { 0, -Y1, -Y1, 0, +Y1, +Y1 };
11 static int edge_end2(unsigned v1, int e) {
14 y= (v1 & ~XMASK) + dy[e];
15 if (y >= Y*Y1) return -1;
17 x= (v1 & XMASK) + dx[(v1 >> YSHIFT) & 1][e];
22 //printf("%40s %02x -%d-> %02x (was %02x) \n", "", v1, e, x|y, x|orgy);
28 short edge_end2_memo[N][V6];
30 void mgraph_prepare(void) {
34 edge_end2_memo[v][e]= edge_end2(v,e);
37 static const unsigned reverse[2][V6]= {{ 3, 4, 5, 0, 1, 2 },
38 { 3, 2, 1, 0, 5, 4 }};
40 int edge_reverse(int v1, int e) {
44 x2= (v1 & XMASK) + dx[(v1 >> YSHIFT) & 1][e];
45 flip= !!(x2 & ~XMASK);
46 eprime= reverse[flip][e];
47 // printf("%60s %02x -%d->,<-%d- (%02x) [x2=%x flip=%d]\n","",
48 // v1,e,eprime, EDGE_END2(v1,e), x2,flip);
52 int vertices_span_join_p(int v0, int v1) {
56 return diff < -2 || diff > 2;