📄 tstisamb.c
字号:
/* $Id: tstisamb.c,v 1.1 2003/06/23 15:36:11 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003 Index Data ApsThis file is part of the Zebra server.Zebra is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.Zebra is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public Licensealong with Zebra; see the file LICENSE.zebra. If not, write to theFree Software Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA.*/#include <string.h>#include <yaz/xmalloc.h>#include <yaz/log.h>#include <isamb.h>#include <assert.h>int compare_item(const void *a, const void *b){ int ia, ib; memcpy(&ia, a, sizeof(int)); memcpy(&ib, b, sizeof(int)); return ia - ib;}void *code_start(int mode){ return 0;}void code_item(int mode, void *p, char **dst, char **src){ memcpy (*dst, *src, sizeof(int)); (*dst) += sizeof(int); (*src) += sizeof(int);}void code_reset(void *p){}void code_stop(int mode, void *p){}struct read_info { int no; int max;};int code_read(void *vp, char **dst, int *insertMode){ struct read_info *ri = (struct read_info *)vp; int x; if (ri->no > ri->max) exit(3); if (ri->no == ri->max) return 0; x = ri->no; memcpy (*dst, &x, sizeof(int)); (*dst)+=sizeof(int); (ri->no)++; *insertMode = 1; return 1;}void tst_insert(ISAMB isb, int n){ ISAMC_I isamc_i; ISAMC_P isamc_p; struct read_info ri; ISAMB_PP pp; char key_buf[10]; /* insert a number of entries */ ri.no = 0; ri.max = n; isamc_i.clientData = &ri; isamc_i.read_item = code_read; isamc_p = isamb_merge (isb, 0 /* new list */ , &isamc_i); /* read the entries */ pp = isamb_pp_open (isb, isamc_p); ri.no = 0; while(isamb_pp_read (pp, key_buf)) { int x; memcpy (&x, key_buf, sizeof(int)); if (x != ri.no) { yaz_log(LOG_DEBUG, "isamb_pp_read. Got %d (expected %d)", x, ri.no); exit(3); } ri.no++; } if (ri.no != ri.max) { yaz_log(LOG_DEBUG, "ri.max != ri.max (%d != %d)", ri.no, ri.max); exit(3); } isamb_pp_close(pp); isamb_unlink(isb, isamc_p);}int main(int argc, char **argv){ BFiles bfs; ISAMB isb; ISAMC_M method; if (argc == 2) yaz_log_init_level(LOG_ALL); /* setup method (attributes) */ method.compare_item = compare_item; method.code_start = code_start; method.code_item = code_item; method.code_reset = code_reset; method.code_stop = code_stop; /* create block system */ bfs = bfs_create(0, 0); if (!bfs) { yaz_log(LOG_DEBUG, "bfs_create failed"); exit(1); } /* create isam handle */ isb = isamb_open (bfs, "isamb", 1, &method, 0); if (!isb) { yaz_log(LOG_DEBUG, "isamb_open failed"); exit(2); } tst_insert(isb, 1); tst_insert(isb, 2); tst_insert(isb, 20); tst_insert(isb, 100); tst_insert(isb, 500); tst_insert(isb, 10000); /* close isam handle */ isamb_close(isb); /* exit block system */ bfs_destroy(bfs); exit(0); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -