Some development of dictionary. Not finished at all!
[idzebra-moved-to-github.git] / include / dict.h
1 /*
2  * Copyright (C) 1994, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: dict.h,v $
7  * Revision 1.3  1994-08-18 12:41:12  adam
8  * Some development of dictionary. Not finished at all!
9  *
10  * Revision 1.2  1994/08/17  13:32:33  adam
11  * Use cache in dict - not in bfile.
12  *
13  * Revision 1.1  1994/08/16  16:26:53  adam
14  * Added dict.
15  *
16  */
17
18 #ifndef DICT_H
19 #define DICT_H
20
21 #include <bfile.h>
22
23 typedef unsigned Dict_ptr;
24 typedef char Dict_char;
25
26 struct Dict_head {
27     char magic_str[8];
28     int page_size;
29     Dict_ptr free_list, last;
30 };
31
32 struct Dict_file_block
33 {
34     struct Dict_file_block *h_next, **h_prev;
35     struct Dict_file_block *lru_next, *lru_prev;
36     void *data;
37     int dirty;
38     int no;
39 };
40
41 typedef struct Dict_file_struct
42 {
43     int cache;
44     BFile bf;
45
46     struct Dict_file_block *all_blocks;
47     struct Dict_file_block *free_list;
48     struct Dict_file_block **hash_array;
49
50     struct Dict_file_block *lru_back, *lru_front;
51     int hash_size;
52     void *all_data;
53
54     int  hits;
55     int  misses;
56 } *Dict_BFile;
57
58 typedef struct Dict_struct {
59     Dict_BFile dbf;
60     struct Dict_head head;
61 } *Dict;
62
63 int dict_bf_readp (Dict_BFile bf, int no, void **bufp);
64 int dict_bf_newp (Dict_BFile bf, int no, void **bufp);
65 int dict_bf_touch (Dict_BFile bf, int no);
66 void dict_bf_flush_blocks (Dict_BFile bf, int no_to_flush);
67 Dict_BFile dict_bf_open (const char *name, int block_size, int cache, int rw);
68 int dict_bf_close (Dict_BFile dbf);
69 #define DICT_MAGIC "dict00"
70
71 typedef int Dict_info;
72
73 #define DICT_PAGESIZE 8192
74     
75 Dict dict_open (const char *name, int cache, int rw);
76 int dict_close (Dict dict);
77 int dict_insert (Dict dict, const Dict_char *p, void *userinfo);
78 int dict_lookup (Dict dict, Dict_char *p);
79 int dict_strcmp (const Dict_char *s1, const Dict_char *s2);
80 int dict_strlen (const Dict_char *s);
81
82 #define DICT_EOS        0
83 #define DICT_type(x)    0[(Dict_ptr*) x]
84 #define DICT_backptr(x) 1[(Dict_ptr*) x]
85 #define DICT_nextptr(x) 2[(Dict_ptr*) x]
86 #define DICT_nodir(x)   0[(short*)((char*)(x)+3*sizeof(Dict_ptr))]
87 #define DICT_size(x)    1[(short*)((char*)(x)+3*sizeof(Dict_ptr))]
88 #define DICT_infoffset  (3*sizeof(Dict_ptr)+2*sizeof(short))
89
90 #define DICT_to_str(x)  sizeof(Dict_info)+sizeof(Dict_ptr)
91
92 /*
93    type            type of page
94    backptr         pointer to parent
95    nextptr         pointer to next page (if any)
96    nodir           no of words
97    size            size of strings,info,ptr entries
98
99    dir[0..nodir-1]
100    ptr,info,string
101  */
102
103    
104 #endif