Remove a couple of done TODO items.
1 #ifndef _RAZOR_INTERNAL_H_
2 #define _RAZOR_INTERNAL_H_
8 #if defined(__GNUC__) && __GNUC__ >= 4
9 #define RAZOR_EXPORT __attribute__ ((visibility("default")))
14 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
15 #define ALIGN(value, base) (((value) + (base - 1)) & ~((base) - 1))
17 void *zalloc(size_t size);
24 void array_init(struct array *array);
25 void array_release(struct array *array);
26 void *array_add(struct array *array, int size);
30 uint32_t list_ptr : 24;
39 void list_set_empty(struct list_head *head);
40 void list_set_ptr(struct list_head *head, uint32_t ptr);
41 void list_set_array(struct list_head *head, struct array *pool, struct array *items, int force_indirect);
43 struct list *list_first(struct list_head *head, struct array *pool);
44 struct list *list_next(struct list *list);
46 void list_remap_pool(struct array *pool, uint32_t *map);
47 void list_remap_head(struct list_head *list, uint32_t *map);
55 void hashtable_init(struct hashtable *table, struct array *pool);
56 void hashtable_release(struct hashtable *table);
57 uint32_t hashtable_insert(struct hashtable *table, const char *key);
58 uint32_t hashtable_lookup(struct hashtable *table, const char *key);
59 uint32_t hashtable_tokenize(struct hashtable *table, const char *string);
62 struct razor_set_section {
68 struct razor_set_header {
71 struct razor_set_section sections[0];
74 #define RAZOR_MAGIC 0x7a7a7a7a
75 #define RAZOR_DETAILS_MAGIC 0x7a7a7a7b
76 #define RAZOR_FILES_MAGIC 0x7a7a7a7c
77 #define RAZOR_VERSION 1
79 #define RAZOR_STRING_POOL 0
80 #define RAZOR_PACKAGES 1
81 #define RAZOR_PROPERTIES 2
82 #define RAZOR_PACKAGE_POOL 3
83 #define RAZOR_PROPERTY_POOL 4
85 #define RAZOR_DETAILS_STRING_POOL 0
88 #define RAZOR_FILE_POOL 1
89 #define RAZOR_FILE_STRING_POOL 2
91 struct razor_package {
100 struct list_head properties;
101 struct list_head files;
105 struct razor_property {
109 struct list_head packages;
116 struct list_head packages;
119 #define RAZOR_ENTRY_LAST 0x80
122 struct array string_pool;
123 struct array packages;
124 struct array properties;
126 struct array package_pool;
127 struct array property_pool;
128 struct array file_pool;
129 struct array file_string_pool;
130 struct array details_string_pool;
131 struct razor_set_header *header;
132 struct razor_set_header *details_header;
133 struct razor_set_header *files_header;
136 struct import_entry {
141 struct import_directory {
142 uint32_t name, count;
144 struct array packages;
145 struct import_directory *last;
148 struct razor_importer {
149 struct razor_set *set;
150 struct hashtable table;
151 struct hashtable file_table;
152 struct hashtable details_table;
153 struct razor_package *package;
154 struct array properties;
156 struct array file_requires;
159 struct razor_package_iterator {
160 struct razor_set *set;
161 struct razor_package *package, *end;
167 razor_package_iterator_init_for_property(struct razor_package_iterator *pi,
168 struct razor_set *set,
169 struct razor_property *property);
171 struct razor_property_iterator {
172 struct razor_set *set;
173 struct razor_property *property, *end;
178 razor_set_find_entry(struct razor_set *set,
179 struct razor_entry *dir, const char *pattern);
181 struct razor_merger *
182 razor_merger_create(struct razor_set *set1, struct razor_set *set2);
184 razor_merger_add_package(struct razor_merger *merger,
185 struct razor_package *package);
187 razor_merger_finish(struct razor_merger *merger);
189 /* Utility functions */
191 int razor_create_dir(const char *root, const char *path);
192 int razor_write(int fd, const void *data, size_t size);
195 typedef int (*razor_compare_with_data_func_t)(const void *p1,
199 razor_qsort_with_data(void *base, size_t nelem, size_t size,
200 razor_compare_with_data_func_t compare, void *data);
202 #endif /* _RAZOR_INTERNAL_H_ */