]> git.lizzy.rs Git - nothing.git/blob - src/lt.h
Merge pull request #153 from tsoding/152
[nothing.git] / src / lt.h
1 #ifndef LT_H_
2 #define LT_H_
3
4 #define PUSH_LT(lt, resource, resource_destroy) \
5     lt_push(lt, (void*)resource, (lt_destroy_t)resource_destroy)
6
7 #define RESET_LT(lt, old_resource, new_resource)    \
8     lt_reset(lt, (void*)old_resource, (void*)new_resource)
9
10 #define RELEASE_LT(lt, resource)                \
11     lt_release(lt, (void*) resource)
12
13 #define RETURN_LT(lt, result)               \
14     do {                                    \
15         destroy_lt(lt);                     \
16         return result;                      \
17     } while (0)
18
19 #define RETURN_LT0(lt)                          \
20     do {                                        \
21         destroy_lt(lt);                         \
22         return;                                 \
23     } while (0)
24
25 typedef struct lt_t lt_t;
26 typedef void (*lt_destroy_t)(void*);
27
28 lt_t *create_lt(void);
29 void destroy_lt(lt_t *lt);
30
31 void *lt_push(lt_t *lt, void *resource, lt_destroy_t resource_destroy);
32 void *lt_reset(lt_t *lt, void *old_resource, void *new_resource);
33 void *lt_release(lt_t *lt, void *resource);
34
35 #endif  // LT_H_