]> rtime.felk.cvut.cz Git - frescor/fwp.git/blob - fwp/lib/mngt/fwp_contract_table.c
adding negt functions
[frescor/fwp.git] / fwp / lib / mngt / fwp_contract_table.c
1 #include "fwp_contract_table.h"
2 #include "ul_gavl.h"
3
4 GAVL_CUST_NODE_INT_DEC(_fwp_contract_table, fwp_contract_table_t, 
5                         fwp_contract_data_t, unsigned int, 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, unsigned int, contract_tree, 
10                         tree_node, id, gavl_cmp_int);
11
12 fwp_contract_data_t* fwp_contract_data_new()
13 {
14         return memset(malloc(sizeof (fwp_contract_data_t)),'\0', 
15                         sizeof(fwp_contract_data_t));
16 }
17
18 void fwp_contract_table_init(struct fwp_contract_table *tbl)
19 {
20         tbl->id_counter = 0;
21         _fwp_contract_table_init_root_field(tbl);
22         pthread_mutex_init(&tbl->lock, NULL); /* fast mutex */
23         tbl->nr_contracts = 0;
24 }
25
26 int fwp_contract_table_insert(fwp_contract_table_t *tbl, 
27                           fwp_contract_data_t *contdata)
28 {
29         unsigned int id = tbl->id_counter++;
30         
31         pthread_mutex_lock(&tbl->lock);
32         contdata->vres_params.id = id;
33         _fwp_contract_table_insert(tbl, contdata);
34         tbl->nr_contracts++;
35         pthread_mutex_unlock(&tbl->lock);
36         
37         return id;
38 }
39
40 fwp_contract_data_t* fwp_contract_table_find(fwp_contract_table_t *tbl, 
41                                                 unsigned int id)
42 {
43         return _fwp_contract_table_find(tbl, &id);
44 }
45
46 int fwp_contract_table_delete(fwp_contract_table_t *tbl,
47                           fwp_contract_data_t *contdata)
48 {
49         int rv;
50
51         pthread_mutex_lock(&tbl->lock);
52         rv = _fwp_contract_table_delete(tbl, contdata); 
53         tbl->nr_contracts--;
54         pthread_mutex_unlock(&tbl->lock);
55         
56         return rv;
57 }
58