c8870320681a41e4a36a9f82e7a0d4ae6fdb8231
[idzebra-moved-to-github.git] / isamb / isamb.c
1 #if 0
2 #include <isamb.h>
3
4 ISAMB isamb_open (const char *name, ISAMC_M method)
5 {
6     ISAMB isamb = xmalloc (sizeof(*isamb));
7     return isamb;
8 }
9
10 int isamb_insert (ISAMB is, ISAMB_pos *pos, const void *data)
11 {
12     void *decodeClientData;
13
14     void *page;
15     if (*pos == 0)
16     {
17         *pos = isamb_alloc_block (is, isamb->block_size[0], &page);
18         isamb_page_set_leaf (page);
19         isamb_page_set_no (page, 0);
20     }
21     else     /* find leaf ... */
22     {
23         const char *src;
24         char dst[200];
25         int no, i;
26         while (1)
27         {
28             ISAMB_pos subptr;
29             
30             isamb_get_block (is, *pos, &page);
31             if (isamb_page_isleaf (page))
32                 break;
33             src = isamb_page_datalist (page);
34             no = isamb_page_get_no (page);
35             decodeClientData = (*is->method->code_start)(ISAMC_DECODE);
36
37             isamb_read_subptr (&subptr, &src);
38             for (i = 0; i<no; i++)
39             {
40                 const char *src0 = src;
41
42                 (*is->method->code_item)(ISAMC_DECODE, decodeClientData,
43                                          dst, &src);
44                 if ((*is->method->compare_item)(data, dst) < 0)
45                     break;
46
47                 isamb_read_subptr (&subptr, src);
48             }
49             *pos = subptr;
50             (*is->method->code_stop)(ISAMC_DECODE, decodeClientData);
51         }
52         src = isamb_page_datalist (page);
53         no = isamb_page_get_no (page);
54         decodeClientData = (*is->method->code_start)(ISAMC_DECODE);
55         diff = -1;
56         for (i = 0; i<no; i++)
57         {
58             int diff;
59             (*is->method->code_item)(ISAMC_DECODE, decodeClientData,
60                                      dst, &src);
61             diff = (*is->method->compare_item)(data, dst);
62             if (diff <= 0)
63                 break;
64         }
65         if (diff < 0)
66         {
67             int j;
68             src = isamb_page_datalist (page);
69             page2 = isamb_page_dup (is, page);
70             dst2 = isamb_page_datalist (page2);
71             src2 = data;
72             for (j = 0; j <= no; j++)
73             {
74                 if ( i == j)
75                     (*is->method->code_item)(ISAMC_ENCODE, encodeClientData,
76                                              &dst2, &src2);
77                 if (j < no)
78                 {
79                     char *dst0 = dst;
80                     (*is->method->code_item)(ISAMC_DECODE, decodeClientData,
81                                              &dst, &src);
82                     (*is->method->code_item)(ISAMC_ENCODE, encodeClientData,
83                                              &dst2, &dst0);
84                 }
85             }
86         }
87     }
88 }
89 #endif