]> rtime.felk.cvut.cz Git - frescor/fwp.git/blob - fwp/mngr/fwp_participant_table.c
Last changes before demo in the first day
[frescor/fwp.git] / fwp / mngr / fwp_participant_table.c
1 #include "fwp_participant_table.h"
2 #include <pthread.h>
3
4 typedef
5 struct {
6         unsigned int                    nr_participants;
7         /*gavl_cust_root_field_t        root;*/
8         gavl_node_t                     *participant_tree;
9         pthread_mutex_t                 lock;
10 } fwp_participant_table_t;
11
12 int fwp_cmp_participant_id(const void *a, const void *b)
13 {
14   if (((fwp_participant_id_t*)a)->node_id > ((fwp_participant_id_t*)b)->node_id) 
15           return 1;
16   if (((fwp_participant_id_t*)a)->node_id < ((fwp_participant_id_t*)b)->node_id)
17           return -1;
18   
19   if (((fwp_participant_id_t*)a)->app_id > ((fwp_participant_id_t*)b)->app_id) 
20           return 1;
21   if (((fwp_participant_id_t*)a)->app_id < ((fwp_participant_id_t*)b)->app_id) 
22           return -1;
23   
24       return 0;
25 }
26
27 GAVL_CUST_NODE_INT_DEC(_fwp_participant_table, fwp_participant_table_t, 
28                         fwp_participant_t, fwp_participant_id_t, 
29                         participant_tree, participant_tree_node, id, 
30                         fwp_cmp_participant_id);
31
32 GAVL_CUST_NODE_INT_IMP(_fwp_participant_table, fwp_participant_table_t, 
33                         fwp_participant_t, fwp_participant_id_t, 
34                         participant_tree, participant_tree_node, id, 
35                         fwp_cmp_participant_id);
36
37 fwp_participant_table_t  fwp_participant_table = {
38                 .nr_participants = 0,
39                 .participant_tree = NULL,
40                 .lock = PTHREAD_MUTEX_INITIALIZER,
41 };
42
43 void fwp_participant_table_insert(fwp_participant_t *participant)
44 {
45         pthread_mutex_lock(&fwp_participant_table.lock);
46         _fwp_participant_table_insert(&fwp_participant_table, participant);
47         fwp_participant_table.nr_participants++;
48         pthread_mutex_unlock(&fwp_participant_table.lock);
49 }
50
51 fwp_participant_t* 
52 fwp_participant_table_find(fwp_participant_id_t *participant_id)
53 {
54         return _fwp_participant_table_find(&fwp_participant_table, 
55                                                 participant_id);
56 }
57
58 int fwp_participant_table_delete(fwp_participant_t *participant)
59 {
60         int rv;
61
62         pthread_mutex_lock(&fwp_participant_table.lock);
63         rv = _fwp_participant_table_delete(&fwp_participant_table, participant); 
64         fwp_participant_table.nr_participants--;
65         pthread_mutex_unlock(&fwp_participant_table.lock);
66         
67         return rv;
68 }
69
70 fwp_participant_t* fwp_participant_table_foreach_begin(void)
71 {
72         pthread_mutex_lock(&fwp_participant_table.lock);
73         return _fwp_participant_table_first(&fwp_participant_table);
74 }
75
76 void fwp_participant_table_foreach_end(void)
77 {
78         pthread_mutex_unlock(&fwp_participant_table.lock);
79 }
80
81 fwp_participant_t* fwp_participant_table_foreach_next(fwp_participant_t *current)
82 {
83         return _fwp_participant_table_next(&fwp_participant_table, current);
84 }
85