Fixed another unlikely difflen bug
[idzebra-moved-to-github.git] / isamc / isamh-p.h
1 /*
2  * Copyright (c) 1995-1996, Index Data.
3  * See the file LICENSE for details.
4  * Heikki Levanto
5  *
6  *
7  */
8
9 #include <bfile.h>
10 #include <isamh.h>
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 typedef struct {
17     int lastblock;
18     int freelist;
19 } ISAMH_head;
20
21 typedef unsigned ISAMH_BLOCK_SIZE;
22
23 typedef struct ISAMH_file_s {
24     ISAMH_head head;
25     BFile bf;
26     int head_is_dirty;
27     
28     int no_writes;
29     int no_reads;
30     int no_skip_writes;
31     int no_allocated;
32     int no_released;
33     int no_remap;
34
35     int no_forward;
36     int no_backward;
37     int sum_forward;
38     int sum_backward;
39     int no_next;
40     int no_prev;
41
42     char *alloc_buf;
43     int alloc_entries_num;
44     int alloc_entries_max;
45
46     int fc_max;
47     int *fc_list;
48 } *ISAMH_file;
49
50 struct ISAMH_s {
51     int no_files;
52     int max_cat;
53   //  char *merge_buf;
54     char *startblock; /* start of the chain, update lastptr and numKeys here */
55     char *lastblock;  /* end of the chain, append here */
56     ISAMH_M method;
57     ISAMH_file files;
58 }; 
59
60 struct ISAMH_PP_s {
61     char *buf;
62     ISAMH_BLOCK_SIZE offset;
63     ISAMH_BLOCK_SIZE size;
64     int cat;  /* category of this block */
65     int pos;  /* block number of this block */
66     int next; /* number of the next block */
67     ISAMH is;
68     void *decodeClientData;
69     int deleteFlag;
70     int numKeys;
71     ISAMH_BLOCK_SIZE lastblock;  /* last block in chain */
72 };
73
74 #define ISAMH_BLOCK_OFFSET_N (sizeof(int) +  \
75                               sizeof(ISAMH_BLOCK_SIZE)) 
76 /* == 8 */
77 #define ISAMH_BLOCK_OFFSET_1 (sizeof(int) + \
78                               sizeof(ISAMH_BLOCK_SIZE) + \
79                               sizeof(int) + \
80                               sizeof(ISAMH_BLOCK_SIZE)) 
81 /* == 16 */
82 int isamh_alloc_block (ISAMH is, int cat);
83 void isamh_release_block (ISAMH is, int cat, int pos);
84 int isamh_read_block (ISAMH is, int cat, int pos, char *dst);
85 int isamh_write_block (ISAMH is, int cat, int pos, char *src);
86
87 #ifdef __cplusplus
88 }
89 #endif
90
91
92
93 /*
94  * $Log: isamh-p.h,v $
95  * Revision 1.3  1999-07-07 09:36:04  heikki
96  * Fixed an assertion in isamh
97  *
98  * Revision 1.2  1999/07/06 09:37:05  heikki
99  * Working on isamh - not ready yet.
100  *
101  * Revision 1.1  1999/06/30 15:05:45  heikki
102  * opied from isamc.p.h, starting to simplify
103  *
104  */