* Sebastian Hammer, Adam Dickmeiss
*
* $Log: isamc-p.h,v $
- * Revision 1.3 1996-11-04 14:08:55 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
#include <bfile.h>
#include <isamc.h>
+#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 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_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_write_dblock (ISAMC is, int cat, int pos, char *src,
- int nextpos, int offset);
+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