]> rtime.felk.cvut.cz Git - frescor/fwp.git/blob - fwp/mngr/fwp_foreach.h
Enabled debugging, disabled gui
[frescor/fwp.git] / fwp / mngr / fwp_foreach.h
1 #ifndef FWP_FOREACH_H
2 #define FWP_FOREACH_H
3
4 #include <fwp_participant.h>
5 #include "fwp_participant_table.h"
6
7 struct foreach_contract {
8         fwp_participant_t *participant;    /**< Current participant */
9         fwp_contract_data_t *contdata;     /**< Current contract */
10         fwp_contract_data_t *contdata_new; /**< The contract being negotiated */
11 };
12
13 static inline fwp_contract_data_t *foreach_contract_begin(struct foreach_contract *fec)
14 {
15         fec->contdata = NULL;
16         fec->participant = fwp_participant_table_foreach_begin();
17         while (1) {
18                 if (fec->participant) {
19                         fec->contdata= fwp_contract_table_foreach_begin
20                                         (&fec->participant->contract_table);
21                 } else {
22                         break;
23                 }
24                 if (fec->contdata == NULL) {
25                         fwp_contract_table_foreach_end(&fec->participant->contract_table);
26                         fec->participant = fwp_participant_table_foreach_next(fec->participant);
27                         continue;
28                 }
29                 break;
30         };
31
32         if (fec->contdata == NULL) {
33                 fwp_participant_table_foreach_end();
34                 fec->contdata = fec->contdata_new;
35         }
36         return fec->contdata;
37 }
38
39 static inline fwp_contract_data_t *foreach_contract_next(struct foreach_contract *fec)
40 {
41         if (fec->contdata == fec->contdata_new) {
42                 /* This was the last contract */
43                 return NULL;
44         }
45         fec->contdata=fwp_contract_table_foreach_next(&fec->participant->contract_table, 
46                                                         fec->contdata);
47         while (1) {
48                 if (fec->contdata == NULL) {
49                         fwp_contract_table_foreach_end(&fec->participant->contract_table);
50                         fec->participant = fwp_participant_table_foreach_next(fec->participant);
51                         if (fec->participant == NULL) {
52                                 break;
53                         }
54                         fec->contdata= fwp_contract_table_foreach_begin(
55                                                 &fec->participant->contract_table);
56                         continue;
57                 }
58                 break;
59         };
60
61         if (fec->contdata == NULL) {
62                 fwp_participant_table_foreach_end();
63                 fec->contdata = fec->contdata_new;
64         }
65         return fec->contdata;
66 }
67
68 #endif