X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Frecindex.h;h=0376f6de8d5abed3abdc03e1f433f22c03b097b8;hb=527dab66d9847bb7f8a931c558306a070064bf25;hp=6d0b23c43c66b18f96fa6721de8947b037c72fd8;hpb=5214040d316f7b5228e46e1749505e3c0c8869d4;p=idzebra-moved-to-github.git diff --git a/index/recindex.h b/index/recindex.h index 6d0b23c..0376f6d 100644 --- a/index/recindex.h +++ b/index/recindex.h @@ -1,30 +1,130 @@ -/* - * Copyright (C) 1994-1995, Index Data I/S - * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: recindex.h,v $ - * Revision 1.1 1995-11-15 14:46:21 adam - * Started work on better record management system. - * - */ +/* $Id: recindex.h,v 1.33 2007-11-28 11:16:32 adam Exp $ + Copyright (C) 1995-2007 + Index Data ApS + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ -#include +#ifndef RECINDEX_H +#define RECINDEX_H -typedef struct records_info { - int fd; - char *fname; - struct records_head { - char magic[8]; - int no_records; - int freelist; - } head; -} *Records; +#include +#include +#include + +YAZ_BEGIN_CDECL + +#define REC_NO_INFO 8 typedef struct record_info { - int sysno; - char *type; - char *fname; - char *kinfo; + zint sysno; + int newFlag; + char *info[REC_NO_INFO]; + size_t size[REC_NO_INFO]; + char buf_size[REC_NO_INFO][6]; + size_t size_size[REC_NO_INFO]; + Zebra_mutex mutex; } *Record; +typedef struct records_info *Records; + +/** \brief marks record for deletion (on file storage) + \param p records handle + \param recpp record pointer + \returns ZEBRA_OK / ZEBRA_FAIL +*/ +ZEBRA_RES rec_del(Records p, Record *recpp); + +/** \brief frees record (from memory) + \param recpp record pointer +*/ +void rec_free(Record *recpp); + +/** \brief puts record (writes into file storage) + \param p records handle + \param recpp record pointer + \returns ZEBRA_OK / ZEBRA_FAIL +*/ +ZEBRA_RES rec_put(Records p, Record *recpp); + +/** \brief creates new record (to be written to file storage) + \param p records handle + \returns record pointer (or NULL on error) +*/ +Record rec_new(Records p); +/** \brief gets record - with given system number + \param p records handle + \param sysno system ID (external number) + \returns record pointer (or NULL on error) +*/ +Record rec_get(Records p, zint sysno); + +/** \brief gets root record + \param p records handle + \returns record pointer (or NULL on error) +*/ +Record rec_get_root(Records p); +ZEBRA_RES rec_close (Records *p); + +/** \brief opens records system + \param bfs block file storage + \param rw read-write flag(0=read only, 1=write) + \param compression_method REC_COMPRESS_ type +*/ +Records rec_open(BFiles bfs, int rw, int compression_method); + +char *rec_strdup(const char *s, size_t *len); +void rec_prstat(Records p); + +zint rec_sysno_to_int(zint sysno); + +/** \brief compression types */ +#define REC_COMPRESS_NONE 0 +#define REC_COMPRESS_BZIP2 1 + +enum { + recInfo_fileType, + recInfo_filename, + recInfo_delKeys, + recInfo_databaseName, + recInfo_storeData, + recInfo_attr, + recInfo_sortKeys +}; + +typedef struct recindex *recindex_t; + +recindex_t recindex_open(BFiles bfs, int rw, int use_isamb); +void recindex_close(recindex_t p); +int recindex_read_head(recindex_t p, void *buf); +const char *recindex_get_fname(recindex_t p); +ZEBRA_RES recindex_write_head(recindex_t p, const void *buf, size_t len); +int recindex_read_indx(recindex_t p, zint sysno, void *buf, int itemsize, + int ignoreError); +void recindex_write_indx(recindex_t p, zint sysno, void *buf, int itemsize); + +YAZ_END_CDECL +#endif +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +