xref: /php-src/ext/dom/lexbor/lexbor/core/dobject.h (revision bffab33a)
1 /*
2  * Copyright (C) 2018 Alexander Borisov
3  *
4  * Author: Alexander Borisov <borisov@lexbor.com>
5  */
6 
7 #ifndef LEXBOR_DOBJECT_H
8 #define LEXBOR_DOBJECT_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include "lexbor/core/base.h"
15 #include "lexbor/core/mem.h"
16 #include "lexbor/core/array.h"
17 
18 
19 typedef struct {
20     lexbor_mem_t   *mem;
21     lexbor_array_t *cache;
22 
23     size_t         allocated;
24     size_t         struct_size;
25 }
26 lexbor_dobject_t;
27 
28 
29 LXB_API lexbor_dobject_t *
30 lexbor_dobject_create(void);
31 
32 LXB_API lxb_status_t
33 lexbor_dobject_init(lexbor_dobject_t *dobject,
34                     size_t chunk_size, size_t struct_size);
35 
36 LXB_API void
37 lexbor_dobject_clean(lexbor_dobject_t *dobject);
38 
39 LXB_API lexbor_dobject_t *
40 lexbor_dobject_destroy(lexbor_dobject_t *dobject, bool destroy_self);
41 
42 
43 LXB_API uint8_t *
44 lexbor_dobject_init_list_entries(lexbor_dobject_t *dobject, size_t pos);
45 
46 
47 LXB_API void *
48 lexbor_dobject_alloc(lexbor_dobject_t *dobject);
49 
50 LXB_API void *
51 lexbor_dobject_calloc(lexbor_dobject_t *dobject);
52 
53 LXB_API void *
54 lexbor_dobject_free(lexbor_dobject_t *dobject, void *data);
55 
56 
57 LXB_API void *
58 lexbor_dobject_by_absolute_position(lexbor_dobject_t *dobject, size_t pos);
59 
60 
61 /*
62  * Inline functions
63  */
64 lxb_inline size_t
lexbor_dobject_allocated(lexbor_dobject_t * dobject)65 lexbor_dobject_allocated(lexbor_dobject_t *dobject)
66 {
67     return dobject->allocated;
68 }
69 
70 lxb_inline size_t
lexbor_dobject_cache_length(lexbor_dobject_t * dobject)71 lexbor_dobject_cache_length(lexbor_dobject_t *dobject)
72 {
73     return lexbor_array_length(dobject->cache);
74 }
75 
76 /*
77  * No inline functions for ABI.
78  */
79 LXB_API size_t
80 lexbor_dobject_allocated_noi(lexbor_dobject_t *dobject);
81 
82 LXB_API size_t
83 lexbor_dobject_cache_length_noi(lexbor_dobject_t *dobject);
84 
85 
86 #ifdef __cplusplus
87 } /* extern "C" */
88 #endif
89 
90 #endif /* LEXBOR_DOBJECT_H */
91 
92 
93