]> rtime.felk.cvut.cz Git - frescor/fwp.git/blob - fwp/lib/mngt/fwp_contract_table.c
Added support for contract negotiation
[frescor/fwp.git] / fwp / lib / mngt / fwp_contract_table.c
1 #include "fwp_contract_table.h"
2 #include <pthread.h>
3
4 GAVL_CUST_NODE_INT_DEC(_fwp_contract_table, fwp_contract_table_t, 
5                         fwp_contract_data_t, fwp_contract_id_t, contract_tree, 
6                         tree_node, id, gavl_cmp_int);
7
8 GAVL_CUST_NODE_INT_IMP(_fwp_contract_table, fwp_contract_table_t, 
9                         fwp_contract_data_t, fwp_contract_id_t, contract_tree, 
10                         tree_node, id, gavl_cmp_int);
11
12 void fwp_contract_table_init(struct fwp_contract_table *tbl)
13 {
14         tbl->id_counter = 0;
15         _fwp_contract_table_init_root_field(tbl);
16         pthread_mutex_init(&tbl->lock, NULL); /* fast mutex */
17         tbl->nr_contracts = 0;
18 }
19
20 int fwp_contract_table_insert(fwp_contract_table_t *tbl, 
21                           fwp_contract_data_t *contdata)
22 {
23         unsigned int id = tbl->id_counter++;
24         
25         pthread_mutex_lock(&tbl->lock);
26         contdata->vres_params.id = id;
27         _fwp_contract_table_insert(tbl, contdata);
28         tbl->nr_contracts++;
29         pthread_mutex_unlock(&tbl->lock);
30         
31         return id;
32 }
33
34 fwp_contract_data_t* fwp_contract_table_find(fwp_contract_table_t *tbl, 
35                                                 unsigned int id)
36 {
37         return _fwp_contract_table_find(tbl, &id);
38 }
39
40 int fwp_contract_table_delete(fwp_contract_table_t *tbl, 
41                                 fwp_contract_data_t *contdata)
42 {
43         int rv;
44
45         pthread_mutex_lock(&tbl->lock);
46         rv = _fwp_contract_table_delete(tbl, contdata); 
47         tbl->nr_contracts--;
48         pthread_mutex_unlock(&tbl->lock);
49         
50         return rv;
51 }
52
53 fwp_contract_data_t* 
54 fwp_contract_table_foreach_begin(fwp_contract_table_t *tbl)
55 {
56         pthread_mutex_lock(&tbl->lock);
57         return _fwp_contract_table_first(tbl);
58 }
59
60 fwp_contract_data_t* 
61 fwp_contract_table_foreach_next(fwp_contract_table_t *tbl, 
62                                         fwp_contract_data_t *current)
63 {
64         return _fwp_contract_table_next(tbl, current);
65 }
66
67 void fwp_contract_table_foreach_end(fwp_contract_table_t *tbl)
68 {
69         pthread_mutex_unlock(&tbl->lock);
70 }