X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=isamc%2Fisamc-p.h;h=27c245494d87744d6572260802177d2c0e5064b0;hb=2b33b395b50c562323ea2b0251f9b798cf5241d2;hp=47015c048db10cbca3ce1bdbc3a2ac8c5480157d;hpb=932697e4b6d6dd00a210b84b285bd8c0000f379f;p=idzebra-moved-to-github.git diff --git a/isamc/isamc-p.h b/isamc/isamc-p.h index 47015c0..27c2454 100644 --- a/isamc/isamc-p.h +++ b/isamc/isamc-p.h @@ -4,7 +4,27 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: isamc-p.h,v $ - * Revision 1.1 1996-10-29 13:40:47 adam + * Revision 1.7 1999-05-26 07:49:14 adam + * C++ compilation. + * + * Revision 1.6 1998/03/18 09:23:55 adam + * Blocks are stored in chunks on free list - up to factor 2 in speed. + * Fixed bug that could occur in block category rearrangemen. + * + * Revision 1.5 1998/03/16 10:37:24 adam + * Added more statistics. + * + * Revision 1.4 1996/11/08 11:15:28 adam + * Number of keys in chain are stored in first block and the function + * to retrieve this information, isc_pp_num is implemented. + * + * Revision 1.3 1996/11/04 14:08:55 adam + * Optimized free block usage. + * + * Revision 1.2 1996/11/01 08:59:13 adam + * First version of isc_merge that supports update/delete. + * + * Revision 1.1 1996/10/29 13:40:47 adam * First work. * */ @@ -12,34 +32,73 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { int lastblock; int freelist; } ISAMC_head; +typedef unsigned ISAMC_BLOCK_SIZE; + typedef struct ISAMC_file_s { ISAMC_head head; BFile bf; int head_is_dirty; + + int no_writes; + int no_reads; + int no_skip_writes; + int no_allocated; + int no_released; + int no_remap; + + int no_forward; + int no_backward; + int sum_forward; + int sum_backward; + int no_next; + int no_prev; + + char *alloc_buf; + int alloc_entries_num; + int alloc_entries_max; + + int fc_max; + int *fc_list; } *ISAMC_file; struct ISAMC_s { int no_files; int max_cat; - char *r_buf; + char *merge_buf; ISAMC_M method; ISAMC_file files; }; struct ISAMC_PP_s { char *buf; - int offset; - int size; + ISAMC_BLOCK_SIZE offset; + ISAMC_BLOCK_SIZE size; int cat; int pos; int next; ISAMC is; void *decodeClientData; + int deleteFlag; + int numKeys; }; -#define ISAMC_BLOCK_OFFSET (sizeof(int)+sizeof(int)) +#define ISAMC_BLOCK_OFFSET_N (sizeof(int)+sizeof(ISAMC_BLOCK_SIZE)) +#define ISAMC_BLOCK_OFFSET_1 (sizeof(int)+sizeof(ISAMC_BLOCK_SIZE)+sizeof(int)) +int isc_alloc_block (ISAMC is, int cat); +void isc_release_block (ISAMC is, int cat, int pos); +int isc_read_block (ISAMC is, int cat, int pos, char *dst); +int isc_write_block (ISAMC is, int cat, int pos, char *src); + +#ifdef __cplusplus +} +#endif +