summaryrefslogtreecommitdiff
path: root/qdbm/villa.h
diff options
context:
space:
mode:
Diffstat (limited to 'qdbm/villa.h')
-rw-r--r--qdbm/villa.h758
1 files changed, 0 insertions, 758 deletions
diff --git a/qdbm/villa.h b/qdbm/villa.h
deleted file mode 100644
index 01f396bf..00000000
--- a/qdbm/villa.h
+++ /dev/null
@@ -1,758 +0,0 @@
-/*************************************************************************************************
- * The advanced API of QDBM
- * Copyright (C) 2000-2007 Mikio Hirabayashi
- * This file is part of QDBM, Quick Database Manager.
- * QDBM is free software; you can redistribute it and/or modify it under the terms of the GNU
- * Lesser General Public License as published by the Free Software Foundation; either version
- * 2.1 of the License or any later version. QDBM 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 Lesser General Public License for more
- * details.
- * You should have received a copy of the GNU Lesser General Public License along with QDBM; if
- * not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- * 02111-1307 USA.
- *************************************************************************************************/
-
-
-#ifndef _VILLA_H /* duplication check */
-#define _VILLA_H
-
-#if defined(__cplusplus) /* export for C++ */
-extern "C" {
-#endif
-
-
-#include <depot.h>
-#include <cabin.h>
-#include <stdlib.h>
-#include <time.h>
-
-
-#if defined(_MSC_VER) && !defined(QDBM_INTERNAL) && !defined(QDBM_STATIC)
-#define MYEXTERN extern __declspec(dllimport)
-#else
-#define MYEXTERN extern
-#endif
-
-
-
-/*************************************************************************************************
- * API
- *************************************************************************************************/
-
-
-#define VL_LEVELMAX 64 /* max level of B+ tree */
-
-typedef struct { /* type of structure for a record */
- CBDATUM *key; /* datum of the key */
- CBDATUM *first; /* datum of the first value */
- CBLIST *rest; /* list of the rest values */
-} VLREC;
-
-typedef struct { /* type of structure for index of a page */
- int pid; /* ID number of the referring page */
- CBDATUM *key; /* threshold key of the page */
-} VLIDX;
-
-typedef struct { /* type of structure for a leaf page */
- int id; /* ID number of the leaf */
- int dirty; /* whether to be written back */
- CBLIST *recs; /* list of records */
- int prev; /* ID number of the previous leaf */
- int next; /* ID number of the next leaf */
-} VLLEAF;
-
-typedef struct { /* type of structure for a node page */
- int id; /* ID number of the node */
- int dirty; /* whether to be written back */
- int heir; /* ID of the child before the first index */
- CBLIST *idxs; /* list of indexes */
-} VLNODE;
-
-/* type of the pointer to a comparing function.
- `aptr' specifies the pointer to the region of one key.
- `asiz' specifies the size of the region of one key.
- `bptr' specifies the pointer to the region of the other key.
- `bsiz' specifies the size of the region of the other key.
- The return value is positive if the former is big, negative if the latter is big, 0 if both
- are equivalent. */
-typedef int (*VLCFUNC)(const char *aptr, int asiz, const char *bptr, int bsiz);
-MYEXTERN VLCFUNC VL_CMPLEX; /* lexical comparing function */
-MYEXTERN VLCFUNC VL_CMPINT; /* native integer comparing function */
-MYEXTERN VLCFUNC VL_CMPNUM; /* big endian number comparing function */
-MYEXTERN VLCFUNC VL_CMPDEC; /* decimal string comparing function */
-
-typedef struct { /* type of structure for a database handle */
- DEPOT *depot; /* internal database handle */
- VLCFUNC cmp; /* pointer to the comparing function */
- int wmode; /* whether to be writable */
- int cmode; /* compression mode for leaves */
- int root; /* ID number of the root page */
- int last; /* ID number of the last leaf */
- int lnum; /* number of leaves */
- int nnum; /* number of nodes */
- int rnum; /* number of records */
- CBMAP *leafc; /* cache for leaves */
- CBMAP *nodec; /* cache for nodes */
- int hist[VL_LEVELMAX]; /* array history of visited nodes */
- int hnum; /* number of elements of the history */
- int hleaf; /* ID number of the leaf referred by the history */
- int lleaf; /* ID number of the last visited leaf */
- int curleaf; /* ID number of the leaf where the cursor is */
- int curknum; /* index of the key where the cursor is */
- int curvnum; /* index of the value where the cursor is */
- int leafrecmax; /* max number of records in a leaf */
- int nodeidxmax; /* max number of indexes in a node */
- int leafcnum; /* max number of caching leaves */
- int nodecnum; /* max number of caching nodes */
- int avglsiz; /* average size of each leave */
- int avgnsiz; /* average size of each node */
- int tran; /* whether in the transaction */
- int rbroot; /* root for rollback */
- int rblast; /* last for rollback */
- int rblnum; /* lnum for rollback */
- int rbnnum; /* nnum for rollback */
- int rbrnum; /* rnum for rollback */
-} VILLA;
-
-typedef struct { /* type of structure for a multiple cursor handle */
- VILLA *villa; /* database handle */
- int curleaf; /* ID number of the leaf where the cursor is */
- int curknum; /* index of the key where the cursor is */
- int curvnum; /* index of the value where the cursor is */
-} VLMULCUR;
-
-enum { /* enumeration for open modes */
- VL_OREADER = 1 << 0, /* open as a reader */
- VL_OWRITER = 1 << 1, /* open as a writer */
- VL_OCREAT = 1 << 2, /* a writer creating */
- VL_OTRUNC = 1 << 3, /* a writer truncating */
- VL_ONOLCK = 1 << 4, /* open without locking */
- VL_OLCKNB = 1 << 5, /* lock without blocking */
- VL_OZCOMP = 1 << 6, /* compress leaves with ZLIB */
- VL_OYCOMP = 1 << 7, /* compress leaves with LZO */
- VL_OXCOMP = 1 << 8 /* compress leaves with BZIP2 */
-};
-
-enum { /* enumeration for write modes */
- VL_DOVER, /* overwrite the existing value */
- VL_DKEEP, /* keep the existing value */
- VL_DCAT, /* concatenate values */
- VL_DDUP, /* allow duplication of keys */
- VL_DDUPR /* allow duplication with reverse order */
-};
-
-enum { /* enumeration for jump modes */
- VL_JFORWARD, /* step forward */
- VL_JBACKWARD /* step backward */
-};
-
-enum { /* enumeration for insertion modes */
- VL_CPCURRENT, /* overwrite the current record */
- VL_CPBEFORE, /* insert before the current record */
- VL_CPAFTER /* insert after the current record */
-};
-
-
-/* Get a database handle.
- `name' specifies the name of a database file.
- `omode' specifies the connection mode: `VL_OWRITER' as a writer, `VL_OREADER' as a reader.
- If the mode is `VL_OWRITER', the following may be added by bitwise or: `VL_OCREAT', which
- means it creates a new database if not exist, `VL_OTRUNC', which means it creates a new
- database regardless if one exists, `VL_OZCOMP', which means leaves in the database are
- compressed with ZLIB, `VL_OYCOMP', which means leaves in the database are compressed with LZO,
- `VL_OXCOMP', which means leaves in the database are compressed with BZIP2. Both of
- `VL_OREADER' and `VL_OWRITER' can be added to by bitwise or: `VL_ONOLCK', which means it opens
- a database file without file locking, or `VL_OLCKNB', which means locking is performed without
- blocking.
- `cmp' specifies a comparing function: `VL_CMPLEX' comparing keys in lexical order,
- `VL_CMPINT' comparing keys as objects of `int' in native byte order, `VL_CMPNUM' comparing
- keys as numbers of big endian, `VL_CMPDEC' comparing keys as decimal strings. Any function
- based on the declaration of the type `VLCFUNC' can be assigned to the comparing function.
- The comparing function should be kept same in the life of a database.
- The return value is the database handle or `NULL' if it is not successful.
- While connecting as a writer, an exclusive lock is invoked to the database file.
- While connecting as a reader, a shared lock is invoked to the database file. The thread
- blocks until the lock is achieved. `VL_OZCOMP', `VL_OYCOMP', and `VL_OXCOMP' are available
- only if QDBM was built each with ZLIB, LZO, and BZIP2 enabled. If `VL_ONOLCK' is used, the
- application is responsible for exclusion control. */
-VILLA *vlopen(const char *name, int omode, VLCFUNC cmp);
-
-
-/* Close a database handle.
- `villa' specifies a database handle.
- If successful, the return value is true, else, it is false.
- Because the region of a closed handle is released, it becomes impossible to use the handle.
- Updating a database is assured to be written when the handle is closed. If a writer opens
- a database but does not close it appropriately, the database will be broken. If the
- transaction is activated and not committed, it is aborted. */
-int vlclose(VILLA *villa);
-
-
-/* Store a record.
- `villa' specifies a database handle connected as a writer.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- `vbuf' specifies the pointer to the region of a value.
- `vsiz' specifies the size of the region of the value. If it is negative, the size is
- assigned with `strlen(vbuf)'.
- `dmode' specifies behavior when the key overlaps, by the following values: `VL_DOVER',
- which means the specified value overwrites the existing one, `VL_DKEEP', which means the
- existing value is kept, `VL_DCAT', which means the specified value is concatenated at the
- end of the existing value, `VL_DDUP', which means duplication of keys is allowed and the
- specified value is added as the last one, `VL_DDUPR', which means duplication of keys is
- allowed and the specified value is added as the first one.
- If successful, the return value is true, else, it is false.
- The cursor becomes unavailable due to updating database. */
-int vlput(VILLA *villa, const char *kbuf, int ksiz, const char *vbuf, int vsiz, int dmode);
-
-
-/* Delete a record.
- `villa' specifies a database handle connected as a writer.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- If successful, the return value is true, else, it is false. False is returned when no
- record corresponds to the specified key.
- When the key of duplicated records is specified, the first record of the same key is deleted.
- The cursor becomes unavailable due to updating database. */
-int vlout(VILLA *villa, const char *kbuf, int ksiz);
-
-
-/* Retrieve a record.
- `villa' specifies a database handle.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the value of the
- corresponding record, else, it is `NULL'. `NULL' is returned when no record corresponds to
- the specified key.
- When the key of duplicated records is specified, the value of the first record of the same
- key is selected. Because an additional zero code is appended at the end of the region of the
- return value, the return value can be treated as a character string. Because the region of
- the return value is allocated with the `malloc' call, it should be released with the `free'
- call if it is no longer in use. */
-char *vlget(VILLA *villa, const char *kbuf, int ksiz, int *sp);
-
-
-/* Get the size of the value of a record.
- `villa' specifies a database handle.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- If successful, the return value is the size of the value of the corresponding record, else,
- it is -1. If multiple records correspond, the size of the first is returned. */
-int vlvsiz(VILLA *villa, const char *kbuf, int ksiz);
-
-
-/* Get the number of records corresponding a key.
- `villa' specifies a database handle.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- The return value is the number of corresponding records. If no record corresponds, 0 is
- returned. */
-int vlvnum(VILLA *villa, const char *kbuf, int ksiz);
-
-
-/* Store plural records corresponding a key.
- `villa' specifies a database handle connected as a writer.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- `vals' specifies a list handle of values. The list should not be empty.
- If successful, the return value is true, else, it is false.
- The cursor becomes unavailable due to updating database. */
-int vlputlist(VILLA *villa, const char *kbuf, int ksiz, const CBLIST *vals);
-
-
-/* Delete all records corresponding a key.
- `villa' specifies a database handle connected as a writer.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- If successful, the return value is true, else, it is false. False is returned when no
- record corresponds to the specified key.
- The cursor becomes unavailable due to updating database. */
-int vloutlist(VILLA *villa, const char *kbuf, int ksiz);
-
-
-/* Retrieve values of all records corresponding a key.
- `villa' specifies a database handle.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- If successful, the return value is a list handle of the values of the corresponding records,
- else, it is `NULL'. `NULL' is returned when no record corresponds to the specified key.
- Because the handle of the return value is opened with the function `cblistopen', it should
- be closed with the function `cblistclose' if it is no longer in use. */
-CBLIST *vlgetlist(VILLA *villa, const char *kbuf, int ksiz);
-
-
-/* Retrieve concatenated values of all records corresponding a key.
- `villa' specifies a database handle.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the concatenated values of
- the corresponding record, else, it is `NULL'. `NULL' is returned when no record corresponds
- to the specified key. Because an additional zero code is appended at the end of the region of
- the return value, the return value can be treated as a character string. Because the region
- of the return value is allocated with the `malloc' call, it should be released with the `free'
- call if it is no longer in use. */
-char *vlgetcat(VILLA *villa, const char *kbuf, int ksiz, int *sp);
-
-
-/* Move the cursor to the first record.
- `villa' specifies a database handle.
- If successful, the return value is true, else, it is false. False is returned if there is
- no record in the database. */
-int vlcurfirst(VILLA *villa);
-
-
-/* Move the cursor to the last record.
- `villa' specifies a database handle.
- If successful, the return value is true, else, it is false. False is returned if there is
- no record in the database. */
-int vlcurlast(VILLA *villa);
-
-
-/* Move the cursor to the previous record.
- `villa' specifies a database handle.
- If successful, the return value is true, else, it is false. False is returned if there is
- no previous record. */
-int vlcurprev(VILLA *villa);
-
-
-/* Move the cursor to the next record.
- `villa' specifies a database handle.
- If successful, the return value is true, else, it is false. False is returned if there is
- no next record. */
-int vlcurnext(VILLA *villa);
-
-
-/* Move the cursor to a position around a record.
- `villa' specifies a database handle.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- `jmode' specifies detail adjustment: `VL_JFORWARD', which means that the cursor is set to
- the first record of the same key and that the cursor is set to the next substitute if
- completely matching record does not exist, `VL_JBACKWARD', which means that the cursor is
- set to the last record of the same key and that the cursor is set to the previous substitute
- if completely matching record does not exist.
- If successful, the return value is true, else, it is false. False is returned if there is
- no record corresponding the condition. */
-int vlcurjump(VILLA *villa, const char *kbuf, int ksiz, int jmode);
-
-
-/* Get the key of the record where the cursor is.
- `villa' specifies a database handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the key of the corresponding
- record, else, it is `NULL'. `NULL' is returned when no record corresponds to the cursor.
- Because an additional zero code is appended at the end of the region of the
- return value, the return value can be treated as a character string. Because the region of
- the return value is allocated with the `malloc' call, it should be released with the `free'
- call if it is no longer in use. */
-char *vlcurkey(VILLA *villa, int *sp);
-
-
-/* Get the value of the record where the cursor is.
- `villa' specifies a database handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the value of the
- corresponding record, else, it is `NULL'. `NULL' is returned when no record corresponds to
- the cursor.
- Because an additional zero code is appended at the end of the region of the
- return value, the return value can be treated as a character string. Because the region of
- the return value is allocated with the `malloc' call, it should be released with the `free'
- call if it is no longer in use. */
-char *vlcurval(VILLA *villa, int *sp);
-
-
-/* Insert a record around the cursor.
- `villa' specifies a database handle connected as a writer.
- `vbuf' specifies the pointer to the region of a value.
- `vsiz' specifies the size of the region of the value. If it is negative, the size is
- assigned with `strlen(vbuf)'.
- `cpmode' specifies detail adjustment: `VL_CPCURRENT', which means that the value of the
- current record is overwritten, `VL_CPBEFORE', which means that a new record is inserted before
- the current record, `VL_CPAFTER', which means that a new record is inserted after the current
- record.
- If successful, the return value is true, else, it is false. False is returned when no record
- corresponds to the cursor.
- After insertion, the cursor is moved to the inserted record. */
-int vlcurput(VILLA *villa, const char *vbuf, int vsiz, int cpmode);
-
-
-/* Delete the record where the cursor is.
- `villa' specifies a database handle connected as a writer.
- If successful, the return value is true, else, it is false. False is returned when no record
- corresponds to the cursor.
- After deletion, the cursor is moved to the next record if possible. */
-int vlcurout(VILLA *villa);
-
-
-/* Set the tuning parameters for performance.
- `villa' specifies a database handle.
- `lrecmax' specifies the max number of records in a leaf node of B+ tree. If it is not more
- than 0, the default value is specified.
- `nidxmax' specifies the max number of indexes in a non-leaf node of B+ tree. If it is not
- more than 0, the default value is specified.
- `lcnum' specifies the max number of caching leaf nodes. If it is not more than 0, the
- default value is specified.
- `ncnum' specifies the max number of caching non-leaf nodes. If it is not more than 0, the
- default value is specified.
- The default setting is equivalent to `vlsettuning(49, 192, 1024, 512)'. Because tuning
- parameters are not saved in a database, you should specify them every opening a database. */
-void vlsettuning(VILLA *villa, int lrecmax, int nidxmax, int lcnum, int ncnum);
-
-
-/* Set the size of the free block pool of a database handle.
- `villa' specifies a database handle connected as a writer.
- `size' specifies the size of the free block pool of a database.
- If successful, the return value is true, else, it is false.
- The default size of the free block pool is 256. If the size is greater, the space efficiency
- of overwriting values is improved with the time efficiency sacrificed. */
-int vlsetfbpsiz(VILLA *villa, int size);
-
-
-/* Synchronize updating contents with the file and the device.
- `villa' specifies a database handle connected as a writer.
- If successful, the return value is true, else, it is false.
- This function is useful when another process uses the connected database file. This function
- should not be used while the transaction is activated. */
-int vlsync(VILLA *villa);
-
-
-/* Optimize a database.
- `villa' specifies a database handle connected as a writer.
- If successful, the return value is true, else, it is false.
- In an alternating succession of deleting and storing with overwrite or concatenate,
- dispensable regions accumulate. This function is useful to do away with them. This function
- should not be used while the transaction is activated. */
-int vloptimize(VILLA *villa);
-
-
-/* Get the name of a database.
- `villa' specifies a database handle.
- If successful, the return value is the pointer to the region of the name of the database,
- else, it is `NULL'.
- Because the region of the return value is allocated with the `malloc' call, it should be
- released with the `free' call if it is no longer in use. */
-char *vlname(VILLA *villa);
-
-
-/* Get the size of a database file.
- `villa' specifies a database handle.
- If successful, the return value is the size of the database file, else, it is -1.
- Because of the I/O buffer, the return value may be less than the hard size. */
-int vlfsiz(VILLA *villa);
-
-
-/* Get the number of the leaf nodes of B+ tree.
- `villa' specifies a database handle.
- If successful, the return value is the number of the leaf nodes, else, it is -1. */
-int vllnum(VILLA *villa);
-
-
-/* Get the number of the non-leaf nodes of B+ tree.
- `villa' specifies a database handle.
- If successful, the return value is the number of the non-leaf nodes, else, it is -1. */
-int vlnnum(VILLA *villa);
-
-
-/* Get the number of the records stored in a database.
- `villa' specifies a database handle.
- If successful, the return value is the number of the records stored in the database, else,
- it is -1. */
-int vlrnum(VILLA *villa);
-
-
-/* Check whether a database handle is a writer or not.
- `villa' specifies a database handle.
- The return value is true if the handle is a writer, false if not. */
-int vlwritable(VILLA *villa);
-
-
-/* Check whether a database has a fatal error or not.
- `villa' specifies a database handle.
- The return value is true if the database has a fatal error, false if not. */
-int vlfatalerror(VILLA *villa);
-
-
-/* Get the inode number of a database file.
- `villa' specifies a database handle.
- The return value is the inode number of the database file. */
-int vlinode(VILLA *villa);
-
-
-/* Get the last modified time of a database.
- `villa' specifies a database handle.
- The return value is the last modified time of the database. */
-time_t vlmtime(VILLA *villa);
-
-
-/* Begin the transaction.
- `villa' specifies a database handle connected as a writer.
- If successful, the return value is true, else, it is false.
- Because this function does not perform mutual exclusion control in multi-thread, the
- application is responsible for it. Only one transaction can be activated with a database
- handle at the same time. */
-int vltranbegin(VILLA *villa);
-
-
-/* Commit the transaction.
- `villa' specifies a database handle connected as a writer.
- If successful, the return value is true, else, it is false.
- Updating a database in the transaction is fixed when it is committed successfully. */
-int vltrancommit(VILLA *villa);
-
-
-/* Abort the transaction.
- `villa' specifies a database handle connected as a writer.
- If successful, the return value is true, else, it is false.
- Updating a database in the transaction is discarded when it is aborted. The state of the
- database is rollbacked to before transaction. */
-int vltranabort(VILLA *villa);
-
-
-/* Remove a database file.
- `name' specifies the name of a database file.
- If successful, the return value is true, else, it is false. */
-int vlremove(const char *name);
-
-
-/* Repair a broken database file.
- `name' specifies the name of a database file.
- `cmp' specifies the comparing function of the database file.
- If successful, the return value is true, else, it is false.
- There is no guarantee that all records in a repaired database file correspond to the original
- or expected state. */
-int vlrepair(const char *name, VLCFUNC cmp);
-
-
-/* Dump all records as endian independent data.
- `villa' specifies a database handle.
- `name' specifies the name of an output file.
- If successful, the return value is true, else, it is false. */
-int vlexportdb(VILLA *villa, const char *name);
-
-
-/* Load all records from endian independent data.
- `villa' specifies a database handle connected as a writer. The database of the handle must
- be empty.
- `name' specifies the name of an input file.
- If successful, the return value is true, else, it is false. */
-int vlimportdb(VILLA *villa, const char *name);
-
-
-
-/*************************************************************************************************
- * features for experts
- *************************************************************************************************/
-
-
-/* Number of division of the database for Vista. */
-#define vlcrdnum (*vlcrdnumptr())
-
-
-/* Get the pointer of the variable of the number of division of the database for Vista.
- The return value is the pointer of the variable. */
-int *vlcrdnumptr(void);
-
-
-/* Synchronize updating contents on memory.
- `villa' specifies a database handle connected as a writer.
- If successful, the return value is true, else, it is false. */
-int vlmemsync(VILLA *villa);
-
-
-/* Synchronize updating contents on memory, not physically.
- `villa' specifies a database handle connected as a writer.
- If successful, the return value is true, else, it is false. */
-int vlmemflush(VILLA *villa);
-
-
-/* Refer to volatile cache of a value of a record.
- `villa' specifies a database handle.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the value of the
- corresponding record, else, it is `NULL'. `NULL' is returned when no record corresponds to
- the specified key.
- Because the region of the return value is volatile and it may be spoiled by another operation
- of the database, the data should be copied into another involatile buffer immediately. */
-const char *vlgetcache(VILLA *villa, const char *kbuf, int ksiz, int *sp);
-
-
-/* Refer to volatile cache of the key of the record where the cursor is.
- `villa' specifies a database handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the key of the corresponding
- record, else, it is `NULL'. `NULL' is returned when no record corresponds to the cursor.
- Because the region of the return value is volatile and it may be spoiled by another operation
- of the database, the data should be copied into another involatile buffer immediately. */
-const char *vlcurkeycache(VILLA *villa, int *sp);
-
-
-/* Refer to volatile cache of the value of the record where the cursor is.
- `villa' specifies a database handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the value of the
- corresponding record, else, it is `NULL'. `NULL' is returned when no record corresponds to
- the cursor.
- Because an additional zero code is appended at the end of the region of the
- return value, the return value can be treated as a character string. Because the region of
- the return value is allocated with the `malloc' call, it should be released with the `free'
- call if it is no longer in use. */
-const char *vlcurvalcache(VILLA *villa, int *sp);
-
-
-/* Get a multiple cursor handle.
- `villa' specifies a database handle connected as a reader.
- The return value is a multiple cursor handle or `NULL' if it is not successful.
- The returned object is should be closed before the database handle is closed. Even if plural
- cursors are fetched out of a database handle, they does not share the locations with each
- other. Note that this function can be used only if the database handle is connected as a
- reader. */
-VLMULCUR *vlmulcuropen(VILLA *villa);
-
-
-/* Close a multiple cursor handle.
- `mulcur' specifies a multiple cursor handle. */
-void vlmulcurclose(VLMULCUR *mulcur);
-
-
-/* Move a multiple cursor to the first record.
- `mulcur' specifies a multiple cursor handle.
- If successful, the return value is true, else, it is false. False is returned if there is
- no record in the database. */
-int vlmulcurfirst(VLMULCUR *mulcur);
-
-
-/* Move a multiple cursor to the last record.
- `mulcur' specifies a multiple cursor handle.
- If successful, the return value is true, else, it is false. False is returned if there is
- no record in the database. */
-int vlmulcurlast(VLMULCUR *mulcur);
-
-
-/* Move a multiple cursor to the previous record.
- `mulcur' specifies a multiple cursor handle.
- If successful, the return value is true, else, it is false. False is returned if there is
- no previous record. */
-int vlmulcurprev(VLMULCUR *mulcur);
-
-
-/* Move a multiple cursor to the next record.
- `mulcur' specifies a multiple cursor handle.
- If successful, the return value is true, else, it is false. False is returned if there is
- no next record. */
-int vlmulcurnext(VLMULCUR *mulcur);
-
-
-/* Move a multiple cursor to a position around a record.
- `mulcur' specifies a multiple cursor handle.
- `kbuf' specifies the pointer to the region of a key.
- `ksiz' specifies the size of the region of the key. If it is negative, the size is assigned
- with `strlen(kbuf)'.
- `jmode' specifies detail adjustment: `VL_JFORWARD', which means that the cursor is set to
- the first record of the same key and that the cursor is set to the next substitute if
- completely matching record does not exist, `VL_JBACKWARD', which means that the cursor is
- set to the last record of the same key and that the cursor is set to the previous substitute
- if completely matching record does not exist.
- If successful, the return value is true, else, it is false. False is returned if there is
- no record corresponding the condition. */
-int vlmulcurjump(VLMULCUR *mulcur, const char *kbuf, int ksiz, int jmode);
-
-
-/* Get the key of the record where a multiple cursor is.
- `mulcur' specifies a multiple cursor handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the key of the corresponding
- record, else, it is `NULL'. `NULL' is returned when no record corresponds to the cursor.
- Because an additional zero code is appended at the end of the region of the
- return value, the return value can be treated as a character string. Because the region of
- the return value is allocated with the `malloc' call, it should be released with the `free'
- call if it is no longer in use. */
-char *vlmulcurkey(VLMULCUR *mulcur, int *sp);
-
-
-/* Get the value of the record where a multiple cursor is.
- `mulcur' specifies a multiple cursor handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the value of the
- corresponding record, else, it is `NULL'. `NULL' is returned when no record corresponds to
- the cursor.
- Because an additional zero code is appended at the end of the region of the
- return value, the return value can be treated as a character string. Because the region of
- the return value is allocated with the `malloc' call, it should be released with the `free'
- call if it is no longer in use. */
-char *vlmulcurval(VLMULCUR *mulcur, int *sp);
-
-
-/* Refer to volatile cache of the key of the record where a multiple cursor is.
- `mulcur' specifies a multiple cursor handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the key of the corresponding
- record, else, it is `NULL'. `NULL' is returned when no record corresponds to the cursor.
- Because the region of the return value is volatile and it may be spoiled by another operation
- of the database, the data should be copied into another involatile buffer immediately. */
-const char *vlmulcurkeycache(VLMULCUR *mulcur, int *sp);
-
-
-/* Refer to volatile cache of the value of the record where a multiple cursor is.
- `mulcur' specifies a multiple cursor handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the region of the value of the
- corresponding record, else, it is `NULL'. `NULL' is returned when no record corresponds to
- the cursor.
- Because an additional zero code is appended at the end of the region of the
- return value, the return value can be treated as a character string. Because the region of
- the return value is allocated with the `malloc' call, it should be released with the `free'
- call if it is no longer in use. */
-const char *vlmulcurvalcache(VLMULCUR *mulcur, int *sp);
-
-
-/* Get flags of a database.
- `villa' specifies a database handle.
- The return value is the flags of a database. */
-int vlgetflags(VILLA *villa);
-
-
-/* Set flags of a database.
- `villa' specifies a database handle connected as a writer.
- `flags' specifies flags to set. Least ten bits are reserved for internal use.
- If successful, the return value is true, else, it is false. */
-int vlsetflags(VILLA *villa, int flags);
-
-
-
-#undef MYEXTERN
-
-#if defined(__cplusplus) /* export for C++ */
-}
-#endif
-
-#endif /* duplication check */
-
-
-/* END OF FILE */