int n_movfeats;
MovFeat *movfeats; /* [0] is fixed */
MovFeat *starfeature; /* set by movfeatmultedges */
+ int u;
};
struct MovFeat {
struct Node {
const char *pname;
Node *back, *next;
+ double x,y,a;
+ int layermin,layermax;
NodeSide sides[2];
};
extern NodeList all_nodes;
extern int next_nodenum, next_edgenum;
+extern Segment *all_segments[];
+
#define FOR_ALL_NODES(node) for (node=all_nodes.head; node; node=node->next)
#define FOR_BOTH(sideend) for (sideend=0; sideend<2; sideend++)
+#define FOR_NODE_EDGEENDS(side,edgeend, node) \
+ FOR_BOTH(side) \
+ FOR_SIDE_EDGEENDS(edgeend, (node),side)
+
+#define FOR_SIDE_EDGEENDS(edgeend, node,side) \
+ for (edgeend=(node)->sides[(side)].head; edgeend; edgeend=edgeend->next)
+
#define FOR_SEGMENT_MOVFEATS(i,f, segment) \
for (i=0, f=segment->movfeats; i < segment->n_movfeats; i++, f++)
* appropriately. edgeend must be of type EdgeEnd*, and side of type
* int; these are used as working variables by FOR_EDGES.
*/
-#define FOR_EDGES(edge, node,side,edgeend) \
- FOR_BOTH(side) \
- for (edgeend=node->sides[side].head; edgeend; edgeend=edgeend->next) \
- if ((edge= edgeend->edge), edgeend->end) { \
- /* do each edge once, from end 0, only */ \
+#define FOR_EDGES(edge, node,side,edgeend) \
+ FOR_NODE_EDGEENDS(side,edgeend, node) \
+ if ((edge= edgeend->edge), edgeend->end) { \
+ /* do each edge once, from end 0, only */ \
} else
-
+
+#define FOR_ALL_SEGMENTS(segmentp,segment) \
+ for (segmentp=all_segments; \
+ (segment= *segmentp); \
+ segmentp++)
#endif /*GRAPH_DATA_H*/