1 #ifndef STRING_STORE_H
2 #define STRING_STORE_H
3 
4 #include "config.h"
5 
6 #include <stddef.h>
7 
8 #define INVALID_INDEX 0xFFFFFFFF
9 
10 typedef struct string_store_t string_store_t;
11 typedef struct string_store_writer_t string_store_writer_t;
12 typedef struct string_store_reader_t string_store_reader_t;
13 
14 string_store_t *string_store_create(const char *Prefix, size_t RequestedSize, size_t ChunkSize RADB_MEM_PARAMS);
15 string_store_t *string_store_open(const char *Prefix RADB_MEM_PARAMS);
16 void string_store_close(string_store_t *Store);
17 
18 size_t string_store_num_entries(string_store_t *Store);
19 
20 size_t string_store_size(string_store_t *Store, size_t Index);
21 size_t string_store_get(string_store_t *Store, size_t Index, void *Buffer, size_t Space);
22 void string_store_set(string_store_t *Store, size_t Index, const void *Buffer, size_t Length);
23 
24 int string_store_compare(string_store_t *Store, const void *Other, size_t Length, size_t Index);
25 int string_store_compare2(string_store_t *Store, size_t Index1, size_t Index2);
26 
27 size_t string_store_alloc(string_store_t *Store);
28 void string_store_free(string_store_t *Store, size_t Index);
29 
30 struct string_store_writer_t {
31 	string_store_t *Store;
32 	size_t Node, Index, Remain;
33 };
34 
35 void string_store_writer_open(string_store_writer_t *Writer, string_store_t *Store, size_t Index);
36 size_t string_store_writer_write(string_store_writer_t *Writer, const void *Buffer, size_t Length);
37 
38 struct string_store_reader_t {
39 	string_store_t *Store;
40 	size_t Node, Offset, Remain;
41 };
42 
43 void string_store_reader_open(string_store_reader_t *Reader, string_store_t *Store, size_t Index);
44 size_t string_store_reader_read(string_store_reader_t *Reader, void *Buffer, size_t Length);
45 
46 #endif
47