chiark / gitweb /
edge and node numbering
[trains.git] / layout / graph-data.h
1 /*
2  */
3
4 #ifndef GRAPH_DATA_H
5 #define GRAPH_DATA_H
6
7
8 typedef struct Edge Edge;
9 typedef struct Segment Segment;
10 typedef struct MovFeat MovFeat;
11 typedef struct EdgeEnd EdgeEnd;
12 typedef struct Node Node;
13 typedef struct NodeList NodeList;
14 typedef struct NodeSide NodeSide;
15
16 struct Segment {
17   const char *segname; /* 0 if unknown (usually elided by extractgraph) */
18   int n_movfeats;
19   MovFeat *movfeats; /* [0] is fixed */
20 };
21
22 struct MovFeat {
23   Segment *segment;
24   const char *movfeat; /* 0 if fixed */
25   int n_positions;
26 };
27
28 struct EdgeEnd {
29   EdgeEnd *back, *next; /* other ends at same side of same node */
30   Edge *edge; /* edge->ends[end].edge==edge */
31   int end; /* edge->ends[end].edge==end */
32   NodeSide *node;
33 };
34
35 struct Edge {
36   int edgenum;
37   double distance;
38   MovFeat *subseg;
39   int movpos; /* 0 if fixed */
40   EdgeEnd ends[2];
41 };
42
43 struct NodeSide {
44   Node *node; /* node->edges[side].node==node */
45   int side; /* node->edges[side].side==side */
46   EdgeEnd *head, *tail;
47 };
48
49 struct Node {
50   int nodenum;
51   Node *back, *next;
52   NodeSide sides[2];
53 };
54
55 struct NodeList {
56   Node *head, *tail;
57 };
58
59 extern NodeList all_nodes;
60
61
62 #endif /*GRAPH_DATA_H*/