1 | #include <collections/list.hfa>
|
---|
2 |
|
---|
3 |
|
---|
4 |
|
---|
5 |
|
---|
6 | int main() {
|
---|
7 |
|
---|
8 |
|
---|
9 |
|
---|
10 |
|
---|
11 |
|
---|
12 |
|
---|
13 |
|
---|
14 |
|
---|
15 |
|
---|
16 |
|
---|
17 |
|
---|
18 |
|
---|
19 |
|
---|
20 | struct req {
|
---|
21 | int pri, rqr;
|
---|
22 | inline struct by_pri { inline dlink(req); };
|
---|
23 | inline struct by_rqr { inline dlink(req); };
|
---|
24 | };
|
---|
25 |
|
---|
26 |
|
---|
27 |
|
---|
28 |
|
---|
29 |
|
---|
30 |
|
---|
31 |
|
---|
32 | // need to spice this case; can't forward declare nested struct
|
---|
33 | P9_EMBEDDED_INFUNC(req, req.by_pri)
|
---|
34 | P9_EMBEDDED_INFUNC(req, req.by_rqr)
|
---|
35 | P9_EMBEDDED_INFUNC(req.by_pri, dlink(req))
|
---|
36 | P9_EMBEDDED_INFUNC(req.by_rqr, dlink(req))
|
---|
37 |
|
---|
38 |
|
---|
39 |
|
---|
40 |
|
---|
41 |
|
---|
42 |
|
---|
43 |
|
---|
44 | dlist(req, req.by_pri) reqs_pri_global;
|
---|
45 | dlist(req, req.by_rqr) reqs_rqr_42;
|
---|
46 | dlist(req, req.by_rqr) reqs_rqr_17;
|
---|
47 | dlist(req, req.by_rqr) reqs_rqr_99;
|
---|
48 |
|
---|
49 | struct req
|
---|
50 | r42a = {1, 42},
|
---|
51 | r42b = {2, 42},
|
---|
52 | r17a = {2, 17},
|
---|
53 | r17b = {3, 17},
|
---|
54 | r17c = {4, 17},
|
---|
55 | r99a = {3, 99};
|
---|
56 |
|
---|
57 | insert_first(reqs_pri_global, r17c);
|
---|
58 | insert_first(reqs_pri_global, r99a);
|
---|
59 | insert_first(reqs_pri_global, r17b);
|
---|
60 | insert_first(reqs_pri_global, r42b);
|
---|
61 | insert_first(reqs_pri_global, r17a);
|
---|
62 | insert_first(reqs_pri_global, r42a);
|
---|
63 |
|
---|
64 | insert_first(reqs_rqr_42, r42b);
|
---|
65 | insert_first(reqs_rqr_42, r42a);
|
---|
66 |
|
---|
67 | insert_first(reqs_rqr_17, r17c);
|
---|
68 | insert_first(reqs_rqr_17, r17b);
|
---|
69 | insert_first(reqs_rqr_17, r17a);
|
---|
70 |
|
---|
71 | insert_first(reqs_rqr_99, r99a);
|
---|
72 |
|
---|
73 |
|
---|
74 |
|
---|
75 |
|
---|
76 |
|
---|
77 |
|
---|
78 |
|
---|
79 |
|
---|
80 | with(DLINK_VIA(req, req.by_pri)) {
|
---|
81 | while( req & cur = iter( reqs_pri_global ); advance( cur ) )
|
---|
82 | printf("{%d %d} ", cur.pri, cur.rqr);
|
---|
83 | printf("| ");
|
---|
84 | }
|
---|
85 |
|
---|
86 | with(DLINK_VIA(req, req.by_rqr)) {
|
---|
87 | while( req & cur = iter( reqs_rqr_42 ); advance( cur ) )
|
---|
88 | printf("{%d %d} ", cur.pri, cur.rqr);
|
---|
89 | printf("| ");
|
---|
90 | while( req & cur = iter( reqs_rqr_17 ); advance( cur ) )
|
---|
91 | printf("{%d %d} ", cur.pri, cur.rqr);
|
---|
92 | printf("| ");
|
---|
93 | while( req & cur = iter( reqs_rqr_99 ); advance( cur ) )
|
---|
94 | printf("{%d %d} ", cur.pri, cur.rqr);
|
---|
95 | printf("\n");
|
---|
96 | }
|
---|
97 |
|
---|
98 |
|
---|
99 |
|
---|
100 |
|
---|
101 | }
|
---|