sensitise trayicon's 'get mail' and 'exit'
[claws.git] / src / plugins / vcalendar / libical / libical / pvl.h
1 /*======================================================================
2  FILE: pvl.h
3  CREATOR: eric November, 1995
4
5
6  (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
7 ======================================================================*/
8
9
10 #ifndef __PVL_H__
11 #define __PVL_H__
12
13 typedef void* pvl_list;
14 typedef void* pvl_elem;
15
16 /*
17   struct pvl_elem_t
18
19   This type is private. Always use pvl_elem instead. The struct would
20   not even appear in this header except to make code in the USE_MACROS
21   blocks work
22
23   */
24 typedef struct pvl_elem_t
25 {
26         int MAGIC;                      /* Magic Identifier */
27         void *d;                        /* Pointer to data user is storing */
28         struct pvl_elem_t *next;        /* Next element */
29         struct pvl_elem_t *prior;       /* prior element */
30 } pvl_elem_t;
31
32
33
34 /* This global is incremented for each call to pvl_new_element(); it gives each
35  * list a unique identifer */
36
37 extern int  pvl_elem_count;
38 extern int  pvl_list_count;
39
40 /* Create new lists or elements */
41 pvl_elem pvl_new_element(void* d, pvl_elem next,pvl_elem prior);
42 pvl_list pvl_newlist(void);
43 void pvl_free(pvl_list);
44
45 /* Add, remove, or get the head of the list */
46 void pvl_unshift(pvl_list l,void *d);
47 void* pvl_shift(pvl_list l);
48 pvl_elem pvl_head(pvl_list);
49
50 /* Add, remove or get the tail of the list */
51 void pvl_push(pvl_list l,void *d);
52 void* pvl_pop(pvl_list l);
53 pvl_elem pvl_tail(pvl_list);
54
55 /* Insert elements in random places */
56 typedef int (*pvl_comparef)(void* a, void* b); /* a, b are of the data type*/
57 void pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d);
58 void pvl_insert_after(pvl_list l,pvl_elem e,void *d);
59 void pvl_insert_before(pvl_list l,pvl_elem e,void *d);
60
61 /* Remove an element, or clear the entire list */
62 void* pvl_remove(pvl_list,pvl_elem); /* Remove element, return data */
63 void pvl_clear(pvl_list); /* Remove all elements, de-allocate all data */
64
65 int pvl_count(pvl_list);
66
67 /* Navagate the list */
68 pvl_elem pvl_next(pvl_elem e);
69 pvl_elem pvl_prior(pvl_elem e);
70
71 /* get the data in the list */
72 #ifndef PVL_USE_MACROS
73 void* pvl_data(pvl_elem);
74 #else
75 #define pvl_data(x) x==0 ? 0 : ((struct pvl_elem_t *)x)->d;
76 #endif
77
78
79 /* Find an element for which a function returns true */
80 typedef int (*pvl_findf)(void* a, void* b); /*a is list elem, b is other data*/
81 pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v);
82 pvl_elem pvl_find_next(pvl_list l,pvl_findf f,void* v);
83
84 /* Pass each element in the list to a function */
85 typedef void (*pvl_applyf)(void* a, void* b); /*a is list elem, b is other data*/
86 void pvl_apply(pvl_list l,pvl_applyf f, void *v);
87
88
89 #endif /* __PVL_H__ */
90
91
92
93
94