]> git.lizzy.rs Git - nothing.git/blob - src/system/lt/lt_slot.c
d6e848747f005165e663a98d3ea473a72210a621
[nothing.git] / src / system / lt / lt_slot.c
1 #include <assert.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 #include "lt_slot.h"
6 #include "system/nth_alloc.h"
7
8 struct Lt_slot
9 {
10     void *resource;
11     Lt_destroy resource_destroy;
12 };
13
14 Lt_slot *create_lt_slot(void *resource, Lt_destroy resource_destroy)
15 {
16     assert(resource);
17     assert(resource_destroy);
18
19     Lt_slot *lt_slot = nth_alloc(sizeof(Lt_slot));
20     if (lt_slot == NULL) {
21         return NULL;
22     }
23
24     lt_slot->resource = resource;
25     lt_slot->resource_destroy = resource_destroy;
26
27     return lt_slot;
28 }
29
30 void *release_lt_slot(Lt_slot *lt_slot)
31 {
32     assert(lt_slot);
33
34     void *resource = lt_slot->resource;
35     free(lt_slot);
36     return resource;
37 }
38
39 void destroy_lt_slot(Lt_slot *lt_slot)
40 {
41     assert(lt_slot);
42
43     lt_slot->resource_destroy(lt_slot->resource);
44     free(lt_slot);
45 }
46
47 void lt_slot_reset_resource(Lt_slot *lt_slot, void *resource)
48 {
49     assert(lt_slot);
50     assert(resource);
51
52     lt_slot->resource_destroy(lt_slot->resource);
53     lt_slot->resource = resource;
54 }
55
56 void lt_slot_replace_resource(Lt_slot *lt_slot, void *resource)
57 {
58     assert(lt_slot);
59     assert(resource);
60
61     lt_slot->resource = resource;
62 }
63
64 int lt_slot_contains_resource(const Lt_slot *lt_slot, void *resource)
65 {
66     assert(lt_slot);
67     assert(resource);
68
69     return lt_slot->resource == resource;
70 }