#define RAZOR_PACKAGE_POOL 4
#define RAZOR_PROPERTY_POOL 5
#define RAZOR_FILE_POOL 6
+#define RAZOR_FILE_STRING_POOL 7
struct razor_package {
uint name : 24;
struct array package_pool;
struct array property_pool;
struct array file_pool;
+ struct array file_string_pool;
struct razor_set_header *header;
};
struct razor_importer {
struct razor_set *set;
struct hashtable table;
+ struct hashtable file_table;
struct razor_package *package;
struct array properties;
struct array files;
}
struct razor_set_section razor_sections[] = {
- { RAZOR_STRING_POOL, offsetof(struct razor_set, string_pool) },
- { RAZOR_PACKAGES, offsetof(struct razor_set, packages) },
- { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) },
- { RAZOR_FILES, offsetof(struct razor_set, files) },
- { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) },
- { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) },
- { RAZOR_FILE_POOL, offsetof(struct razor_set, file_pool) },
+ { RAZOR_STRING_POOL, offsetof(struct razor_set, string_pool) },
+ { RAZOR_PACKAGES, offsetof(struct razor_set, packages) },
+ { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) },
+ { RAZOR_FILES, offsetof(struct razor_set, files) },
+ { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) },
+ { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) },
+ { RAZOR_FILE_POOL, offsetof(struct razor_set, file_pool) },
+ { RAZOR_FILE_STRING_POOL, offsetof(struct razor_set, file_string_pool) },
};
struct razor_set *
e = array_add(&set->files, sizeof *e);
empty = array_add(&set->string_pool, 1);
*empty = '\0';
+ empty = array_add(&set->file_string_pool, 1);
+ *empty = '\0';
e->name = 0;
e->flags = RAZOR_ENTRY_LAST;
e->start = 0;
importer = zalloc(sizeof *importer);
importer->set = razor_set_create();
hashtable_init(&importer->table, &importer->set->string_pool);
+ hashtable_init(&importer->file_table, &importer->set->file_string_pool);
return importer;
}
compare_filenames,
NULL);
- root.name = hashtable_tokenize(&importer->table, "");
+ root.name = hashtable_tokenize(&importer->file_table, "");
array_init(&root.files);
array_init(&root.packages);
root.last = NULL;
length = end - f;
memcpy(dirname, f, length);
dirname[length] ='\0';
- name = hashtable_tokenize(&importer->table, dirname);
+ name = hashtable_tokenize(&importer->file_table, dirname);
if (d->last == NULL || d->last->name != name) {
d->last = array_add(&d->files, sizeof *d);
d->last->name = name;
set = importer->set;
hashtable_release(&importer->table);
+ hashtable_release(&importer->file_table);
free(importer);
return set;
find_entry(struct razor_set *set, struct razor_entry *dir, const char *pattern)
{
struct razor_entry *e;
- const char *n, *pool = set->string_pool.data;
+ const char *n, *pool = set->file_string_pool.data;
int len;
e = (struct razor_entry *) set->files.data + dir->start;
char *prefix, const char *pattern)
{
struct razor_entry *e;
- const char *n, *pool = set->string_pool.data;
+ const char *n, *pool = set->file_string_pool.data;
e = (struct razor_entry *) set->files.data + dir->start;
do {
int len;
entries = (struct razor_entry *) set->files.data;
- pool = set->string_pool.data;
+ pool = set->file_string_pool.data;
e = entries + dir->start;
do {
struct razor_merger {
struct razor_set *set;
struct hashtable table;
+ struct hashtable file_table;
struct source source1;
struct source source2;
};
merger = zalloc(sizeof *merger);
merger->set = razor_set_create();
hashtable_init(&merger->table, &merger->set->string_pool);
+ hashtable_init(&merger->file_table, &merger->set->file_string_pool);
merger->source1.set = set1;
count = set1->properties.size / sizeof (struct razor_property);
struct razor_entry *e;
e = array_add(&merger->set->files, sizeof *e);
- e->name = hashtable_tokenize(&merger->table, name);
+ e->name = hashtable_tokenize(&merger->file_table, name);
e->flags = 0;
e->start = 0;
result = merger->set;
hashtable_release(&merger->table);
+ hashtable_release(&merger->file_table);
free(merger);
return result;