summaryrefslogtreecommitdiff
path: root/qdbm/cabin.h
diff options
context:
space:
mode:
Diffstat (limited to 'qdbm/cabin.h')
-rw-r--r--qdbm/cabin.h1544
1 files changed, 0 insertions, 1544 deletions
diff --git a/qdbm/cabin.h b/qdbm/cabin.h
deleted file mode 100644
index 230ec150..00000000
--- a/qdbm/cabin.h
+++ /dev/null
@@ -1,1544 +0,0 @@
-/*************************************************************************************************
- * The utitlity 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 _CABIN_H /* duplication check */
-#define _CABIN_H
-
-#if defined(__cplusplus) /* export for C++ */
-extern "C" {
-#endif
-
-
-#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 CB_DATUMUNIT 12 /* allocation unit size of a datum handle */
-#define CB_LISTUNIT 64 /* allocation unit number of a list handle */
-#define CB_MAPBNUM 4093 /* bucket size of a map handle */
-
-typedef struct { /* type of structure for a basic datum */
- char *dptr; /* pointer to the region */
- int dsize; /* size of the region */
- int asize; /* size of the allocated region */
-} CBDATUM;
-
-typedef struct { /* type of structure for an element of a list */
- char *dptr; /* pointer to the region */
- int dsize; /* size of the effective region */
-} CBLISTDATUM;
-
-typedef struct { /* type of structure for a list */
- CBLISTDATUM *array; /* array of data */
- int anum; /* number of the elements of the array */
- int start; /* start index of using elements */
- int num; /* number of using elements */
-} CBLIST;
-
-typedef struct _CBMAPDATUM { /* type of structure for an element of a map */
- int ksiz; /* size of the region of the key */
- int vsiz; /* size of the region of the value */
- int hash; /* second hash value */
- struct _CBMAPDATUM *left; /* pointer to the left child */
- struct _CBMAPDATUM *right; /* pointer to the right child */
- struct _CBMAPDATUM *prev; /* pointer to the previous element */
- struct _CBMAPDATUM *next; /* pointer to the next element */
-} CBMAPDATUM;
-
-typedef struct { /* type of structure for a map */
- CBMAPDATUM **buckets; /* bucket array */
- CBMAPDATUM *first; /* pointer to the first element */
- CBMAPDATUM *last; /* pointer to the last element */
- CBMAPDATUM *cur; /* pointer to the current element */
- int bnum; /* number of buckets */
- int rnum; /* number of records */
-} CBMAP;
-
-typedef struct { /* type of structure for a heap */
- char *base; /* base pointer */
- char *swap; /* region for swapping */
- int size; /* size of each record */
- int num; /* currnet number of records */
- int max; /* maximum number of records */
- int(*compar)(const void *, const void *); /* comparing function */
-} CBHEAP;
-
-
-/* Call back function for handling a fatal error.
- The argument specifies the error message. The initial value of this variable is `NULL'.
- If the value is `NULL', the default function is called when a fatal error occurs. A fatal
- error occurs when memory allocation is failed. */
-MYEXTERN void (*cbfatalfunc)(const char *);
-
-
-/* Allocate a region on memory.
- `size' specifies the size of the region.
- The return value is the pointer to the allocated region.
- 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. */
-void *cbmalloc(size_t size);
-
-
-/* Re-allocate a region on memory.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region.
- The return value is the pointer to the re-allocated region.
- Because the region of the return value is allocated with the `realloc' call, it should be
- released with the `free' call if it is no longer in use. */
-void *cbrealloc(void *ptr, size_t size);
-
-
-/* Duplicate a region on memory.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is the pointer to the allocated region of the duplicate.
- 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 *cbmemdup(const char *ptr, int size);
-
-
-/* Free a region on memory.
- `ptr' specifies the pointer to a region. If it is `NULL', this function has no effect.
- Although this function is just a wrapper of `free' call, this is useful in applications using
- another package of the `malloc' series. */
-void cbfree(void *ptr);
-
-
-/* Register the pointer or handle of an object to the global garbage collector.
- `ptr' specifies the pointer or handle of an object.
- `func' specifies the pointer to a function to release resources of the object. Its argument
- is the pointer or handle of the object to release.
- This function assures that resources of an object are released when the process exits
- normally by returning from the `main' function or calling the `exit' function. */
-void cbglobalgc(void *ptr, void (*func)(void *));
-
-
-/* Exercise the global garbage collector explicitly.
- Note that you should not use objects registered to the global garbage collector any longer
- after calling this function. Because the global garbage collecter is initialized and you
- can register new objects into it. */
-void cbggcsweep(void);
-
-
-/* Check availability of allocation of the virtual memory.
- `size' specifies the size of region to be allocated newly.
- The return value is true if allocation should be success, or false if not. */
-int cbvmemavail(size_t size);
-
-
-/* Sort an array using insert sort.
- `base' spacifies the pointer to an array.
- `nmemb' specifies the number of elements of the array.
- `size' specifies the size of each element.
- `compar' specifies the pointer to comparing function. The two arguments specify the pointers
- of elements. The comparing function should returns positive if the former is big, negative
- if the latter is big, 0 if both are equal.
- Insert sort is useful only if most elements have been sorted already. */
-void cbisort(void *base, int nmemb, int size, int(*compar)(const void *, const void *));
-
-
-/* Sort an array using shell sort.
- `base' spacifies the pointer to an array.
- `nmemb' specifies the number of elements of the array.
- `size' specifies the size of each element.
- `compar' specifies the pointer to comparing function. The two arguments specify the pointers
- of elements. The comparing function should returns positive if the former is big, negative
- if the latter is big, 0 if both are equal.
- If most elements have been sorted, shell sort may be faster than heap sort or quick sort. */
-void cbssort(void *base, int nmemb, int size, int(*compar)(const void *, const void *));
-
-
-/* Sort an array using heap sort.
- `base' spacifies the pointer to an array.
- `nmemb' specifies the number of elements of the array.
- `size' specifies the size of each element.
- `compar' specifies the pointer to comparing function. The two arguments specify the pointers
- of elements. The comparing function should returns positive if the former is big, negative
- if the latter is big, 0 if both are equal.
- Although heap sort is robust against bias of input, quick sort is faster in most cases. */
-void cbhsort(void *base, int nmemb, int size, int(*compar)(const void *, const void *));
-
-
-/* Sort an array using quick sort.
- `base' spacifies the pointer to an array.
- `nmemb' specifies the number of elements of the array.
- `size' specifies the size of each element.
- `compar' specifies the pointer to comparing function. The two arguments specify the pointers
- of elements. The comparing function should returns positive if the former is big, negative
- if the latter is big, 0 if both are equal.
- Being sensitive to bias of input, quick sort is the fastest sorting algorithm. */
-void cbqsort(void *base, int nmemb, int size, int(*compar)(const void *, const void *));
-
-
-/* Compare two strings with case insensitive evaluation.
- `astr' specifies the pointer of one string.
- `astr' specifies the pointer of the other string.
- The return value is positive if the former is big, negative if the latter is big, 0 if both
- are equivalent.
- Upper cases and lower cases of alphabets in ASCII code are not distinguished. */
-int cbstricmp(const char *astr, const char *bstr);
-
-
-/* Check whether a string begins with a key.
- `str' specifies the pointer of a target string.
- `key' specifies the pointer of a forward matching key string.
- The return value is true if the target string begins with the key, else, it is false. */
-int cbstrfwmatch(const char *str, const char *key);
-
-
-/* Check whether a string begins with a key, with case insensitive evaluation.
- `str' specifies the pointer of a target string.
- `key' specifies the pointer of a forward matching key string.
- The return value is true if the target string begins with the key, else, it is false.
- Upper cases and lower cases of alphabets in ASCII code are not distinguished. */
-int cbstrfwimatch(const char *str, const char *key);
-
-
-/* Check whether a string ends with a key.
- `str' specifies the pointer of a target string.
- `key' specifies the pointer of a backward matching key string.
- The return value is true if the target string ends with the key, else, it is false. */
-int cbstrbwmatch(const char *str, const char *key);
-
-
-/* Check whether a string ends with a key, with case insensitive evaluation.
- `str' specifies the pointer of a target string.
- `key' specifies the pointer of a backward matching key string.
- The return value is true if the target string ends with the key, else, it is false.
- Upper cases and lower cases of alphabets in ASCII code are not distinguished. */
-int cbstrbwimatch(const char *str, const char *key);
-
-
-/* Locate a substring in a string using KMP method.
- `haystack' specifies the pointer of a target string.
- `needle' specifies the pointer of a substring to be found.
- The return value is the pointer to the beginning of the substring or `NULL' if the substring
- is not found.
- In most cases, `strstr' as a built-in function of the compiler is faster than this function. */
-char *cbstrstrkmp(const char *haystack, const char *needle);
-
-
-/* Locate a substring in a string using BM method.
- `haystack' specifies the pointer of a target string.
- `needle' specifies the pointer of a substring to be found.
- The return value is the pointer to the beginning of the substring or `NULL' if the substring
- is not found.
- In most cases, `strstr' as a built-in function of the compiler is faster than this function. */
-char *cbstrstrbm(const char *haystack, const char *needle);
-
-
-/* Convert the letters of a string to upper case.
- `str' specifies the pointer of a string to convert.
- The return value is the pointer to the string. */
-char *cbstrtoupper(char *str);
-
-
-/* Convert the letters of a string to lower case.
- `str' specifies the pointer of a string to convert.
- The return value is the pointer to the string. */
-char *cbstrtolower(char *str);
-
-
-/* Cut space characters at head or tail of a string.
- `str' specifies the pointer of a string to convert.
- The return value is the pointer to the string. */
-char *cbstrtrim(char *str);
-
-
-/* Squeeze space characters in a string and trim it.
- `str' specifies the pointer of a string to convert.
- The return value is the pointer to the string. */
-char *cbstrsqzspc(char *str);
-
-
-/* Count the number of characters in a string of UTF-8.
- `str' specifies the pointer of a string of UTF-8.
- The return value is the number of characters in the string. */
-int cbstrcountutf(const char *str);
-
-
-/* Cut a string of UTF-8 at the specified number of characters.
- `str' specifies the pointer of a string of UTF-8.
- `num' specifies the number of characters to be kept.
- The return value is the pointer to the string. */
-char *cbstrcututf(char *str, int num);
-
-
-/* Get a datum handle.
- `ptr' specifies the pointer to the region of the initial content. If it is `NULL', an empty
- datum is created.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is a datum handle. */
-CBDATUM *cbdatumopen(const char *ptr, int size);
-
-
-/* Copy a datum.
- `datum' specifies a datum handle.
- The return value is a new datum handle. */
-CBDATUM *cbdatumdup(const CBDATUM *datum);
-
-
-/* Free a datum handle.
- `datum' specifies a datum handle.
- Because the region of a closed handle is released, it becomes impossible to use the handle. */
-void cbdatumclose(CBDATUM *datum);
-
-
-/* Concatenate a datum and a region.
- `datum' specifies a datum handle.
- `ptr' specifies the pointer to the region to be appended.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'. */
-void cbdatumcat(CBDATUM *datum, const char *ptr, int size);
-
-
-/* Get the pointer of the region of a datum.
- `datum' specifies a datum handle.
- The return value is the pointer of the region of a datum.
- 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. */
-const char *cbdatumptr(const CBDATUM *datum);
-
-
-/* Get the size of the region of a datum.
- `datum' specifies a datum handle.
- The return value is the size of the region of a datum. */
-int cbdatumsize(const CBDATUM *datum);
-
-
-/* Change the size of the region of a datum.
- `datum' specifies a datum handle.
- `size' specifies the new size of the region.
- If the new size is bigger than the one of old, the surplus region is filled with zero codes. */
-void cbdatumsetsize(CBDATUM *datum, int size);
-
-
-/* Perform formatted output into a datum.
- `format' specifies a printf-like format string.
- The conversion character `%' can be used with such flag characters as `s', `d', `o', `u',
- `x', `X', `c', `e', `E', `f', `g', `G', `@', `?', `:', `%'. `@' works as with `s' but escapes
- meta characters of XML. `?' works as with `s' but escapes meta characters of URL. `:' works
- as with `s' but performs MIME encoding as UTF-8. The other conversion character work as with
- each original. */
-void cbdatumprintf(CBDATUM *datum, const char *format, ...);
-
-
-/* Convert a datum to an allocated region.
- `datum' specifies a datum 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.
- The return value is the pointer to the region of the datum.
- 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. Because the region of the original datam is released, it should not be
- released again. */
-char *cbdatumtomalloc(CBDATUM *datum, int *sp);
-
-
-/* Get a list handle.
- The return value is a list handle. */
-CBLIST *cblistopen(void);
-
-
-/* Copy a list.
- `list' specifies a list handle.
- The return value is a new list handle. */
-CBLIST *cblistdup(const CBLIST *list);
-
-
-/* Close a list handle.
- `list' specifies a list handle.
- Because the region of a closed handle is released, it becomes impossible to use the handle. */
-void cblistclose(CBLIST *list);
-
-
-/* Get the number of elements of a list.
- `list' specifies a list handle.
- The return value is the number of elements of the list. */
-int cblistnum(const CBLIST *list);
-
-
-/* Get the pointer to the region of an element of a list.
- `list' specifies a list handle.
- `index' specifies the index of an element.
- `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.
- The return value is the pointer to the region of the value.
- 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. If `index' is equal to or more than
- the number of elements, the return value is `NULL'. */
-const char *cblistval(const CBLIST *list, int index, int *sp);
-
-
-/* Add an element at the end of a list.
- `list' specifies a list handle.
- `ptr' specifies the pointer to the region of an element.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'. */
-void cblistpush(CBLIST *list, const char *ptr, int size);
-
-
-/* Remove an element of the end of a list.
- `list' specifies a list 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.
- The return value is the pointer to the region of the value.
- 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. If the list is empty, the return value is `NULL'. */
-char *cblistpop(CBLIST *list, int *sp);
-
-
-/* Add an element at the top of a list.
- `list' specifies a list handle.
- `ptr' specifies the pointer to the region of an element.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'. */
-void cblistunshift(CBLIST *list, const char *ptr, int size);
-
-
-/* Remove an element of the top of a list.
- `list' specifies a list 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.
- The return value is the pointer to the region of the value.
- 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. If the list is empty, the return value is `NULL'. */
-char *cblistshift(CBLIST *list, int *sp);
-
-
-/* Add an element at the specified location of a list.
- `list' specifies a list handle.
- `index' specifies the index of an element.
- `ptr' specifies the pointer to the region of the element.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'. */
-void cblistinsert(CBLIST *list, int index, const char *ptr, int size);
-
-
-/* Remove an element at the specified location of a list.
- `list' specifies a list handle.
- `index' specifies the index of an element.
- `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.
- The return value is the pointer to the region of the value.
- 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. If `index' is equal to or more than the number of elements, no element
- is removed and the return value is `NULL'. */
-char *cblistremove(CBLIST *list, int index, int *sp);
-
-
-/* Overwrite an element at the specified location of a list.
- `list' specifies a list handle.
- `index' specifies the index of an element.
- `ptr' specifies the pointer to the region of the new content.
- `size' specifies the size of the new content. If it is negative, the size is assigned with
- `strlen(ptr)'.
- If `index' is equal to or more than the number of elements, this function has no effect. */
-void cblistover(CBLIST *list, int index, const char *ptr, int size);
-
-
-/* Sort elements of a list in lexical order.
- `list' specifies a list handle.
- Quick sort is used for sorting. */
-void cblistsort(CBLIST *list);
-
-
-/* Search a list for an element using liner search.
- `list' specifies a list handle.
- `ptr' specifies the pointer to the region of a key.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is the index of a corresponding element or -1 if there is no corresponding
- element. If two or more elements corresponds, the former returns. */
-int cblistlsearch(const CBLIST *list, const char *ptr, int size);
-
-
-/* Search a list for an element using binary search.
- `list' specifies a list handle. It should be sorted in lexical order.
- `ptr' specifies the pointer to the region of a key.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is the index of a corresponding element or -1 if there is no corresponding
- element. If two or more elements corresponds, which returns is not defined. */
-int cblistbsearch(const CBLIST *list, const char *ptr, int size);
-
-
-/* Serialize a list into a byte array.
- `list' specifies a list handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned.
- The return value is the pointer to the region of the result serial region.
- 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 *cblistdump(const CBLIST *list, int *sp);
-
-
-/* Redintegrate a serialized list.
- `ptr' specifies the pointer to a byte array.
- `size' specifies the size of the region.
- The return value is a new list handle. */
-CBLIST *cblistload(const char *ptr, int size);
-
-
-/* Get a map handle.
- The return value is a map handle. */
-CBMAP *cbmapopen(void);
-
-
-/* Copy a map.
- `map' specifies a map handle.
- The return value is a new map handle.
- The iterator of the source map is initialized. */
-CBMAP *cbmapdup(CBMAP *map);
-
-
-/* Close a map handle.
- `map' specifies a map handle.
- Because the region of a closed handle is released, it becomes impossible to use the handle. */
-void cbmapclose(CBMAP *map);
-
-
-/* Store a record into a map.
- `map' specifies a map 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)'.
- `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)'.
- `over' specifies whether the value of the duplicated record is overwritten or not.
- If `over' is false and the key is duplicated, the return value is false, else, it is true. */
-int cbmapput(CBMAP *map, const char *kbuf, int ksiz, const char *vbuf, int vsiz, int over);
-
-
-/* Concatenate a value at the end of the value of the existing record.
- `map' specifies a map 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)'.
- `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)'.
- If there is no corresponding record, a new record is created. */
-void cbmapputcat(CBMAP *map, const char *kbuf, int ksiz, const char *vbuf, int vsiz);
-
-
-/* Delete a record in a map.
- `map' specifies a map 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 true. False is returned when no record corresponds to
- the specified key. */
-int cbmapout(CBMAP *map, const char *kbuf, int ksiz);
-
-
-/* Retrieve a record in a map.
- `map' specifies a map 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. `NULL' is returned when no record corresponds.
- 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. */
-const char *cbmapget(const CBMAP *map, const char *kbuf, int ksiz, int *sp);
-
-
-/* Move a record to the edge of a map.
- `map' specifies a map 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)'.
- `head' specifies the destination which is head if it is true or tail if else.
- If successful, the return value is true. False is returned when no record corresponds to
- the specified key. */
-int cbmapmove(CBMAP *map, const char *kbuf, int ksiz, int head);
-
-
-/* Initialize the iterator of a map.
- `map' specifies a map handle.
- The iterator is used in order to access the key of every record stored in a map. */
-void cbmapiterinit(CBMAP *map);
-
-
-/* Get the next key of the iterator of a map.
- `map' specifies a map 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 next key, else, it is
- `NULL'. `NULL' is returned when no record is to be get out of the iterator.
- 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. The order of iteration is assured
- to be the same of the one of storing. */
-const char *cbmapiternext(CBMAP *map, int *sp);
-
-
-/* Get the value binded to the key fetched from the iterator of a map.
- `kbuf' specifies the pointer to the region of a iteration key.
- `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.
- The return value is the pointer to the region of the value of the corresponding record.
- 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. */
-const char *cbmapiterval(const char *kbuf, int *sp);
-
-
-/* Get the number of the records stored in a map.
- `map' specifies a map handle.
- The return value is the number of the records stored in the map. */
-int cbmaprnum(const CBMAP *map);
-
-
-/* Get the list handle contains all keys in a map.
- `map' specifies a map handle.
- The return value is the list handle contains all keys in the map.
- 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 *cbmapkeys(CBMAP *map);
-
-
-/* Get the list handle contains all values in a map.
- `map' specifies a map handle.
- The return value is the list handle contains all values in the map.
- 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 *cbmapvals(CBMAP *map);
-
-
-/* Serialize a map into a byte array.
- `map' specifies a map handle.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned.
- The return value is the pointer to the region of the result serial region.
- 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 *cbmapdump(CBMAP *map, int *sp);
-
-
-/* Redintegrate a serialized map.
- `ptr' specifies the pointer to a byte array.
- `size' specifies the size of the region.
- The return value is a new map handle. */
-CBMAP *cbmapload(const char *ptr, int size);
-
-
-/* Extract a record from a serialized map.
- `ptr' specifies the pointer to a byte array.
- `size' specifies the size of the region.
- `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. `NULL' is returned when no record corresponds.
- 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. */
-char *cbmaploadone(const char *ptr, int size, const char *kbuf, int ksiz, int *sp);
-
-
-/* Get a heap handle.
- `size' specifies the size of each record.
- `max' specifies the maximum number of records in the heap.
- `compar' specifies the pointer to comparing function. The two arguments specify the pointers
- of records. The comparing function should returns positive if the former is big, negative
- if the latter is big, 0 if both are equal.
- The return value is a heap handle. */
-CBHEAP *cbheapopen(int size, int max, int(*compar)(const void *, const void *));
-
-
-/* Copy a heap.
- `heap' specifies a heap handle.
- The return value is a new heap handle. */
-CBHEAP *cbheapdup(CBHEAP *heap);
-
-
-/* Close a heap handle.
- `heap' specifies a heap handle.
- Because the region of a closed handle is released, it becomes impossible to use the handle. */
-void cbheapclose(CBHEAP *heap);
-
-
-/* Get the number of the records stored in a heap.
- `heap' specifies a heap handle.
- The return value is the number of the records stored in the heap. */
-int cbheapnum(CBHEAP *heap);
-
-
-/* Insert a record into a heap.
- `heap' specifies a heap handle.
- `ptr' specifies the pointer to the region of a record.
- The return value is true if the record is added, else false.
- If the new record is bigger than the biggest existing regord, the new record is not added.
- If the new record is added and the number of records exceeds the maximum number, the biggest
- existing record is removed. */
-int cbheapinsert(CBHEAP *heap, const void *ptr);
-
-
-/* Get the pointer to the region of a record in a heap.
- `heap' specifies a heap handle.
- `index' specifies the index of a record.
- The return value is the pointer to the region of the record.
- If `index' is equal to or more than the number of records, the return value is `NULL'. Note
- that records are organized by the nagative order the comparing function. */
-const void *cbheapval(CBHEAP *heap, int index);
-
-
-/* Convert a heap to an allocated region.
- `heap' specifies a heap handle.
- `np' specifies the pointer to a variable to which the number of records of the return value
- is assigned. If it is `NULL', it is not used.
- The return value is the pointer to the region of the heap. Records are sorted.
- 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. Because the region of the original
- heap is released, it should not be released again. */
-void *cbheaptomalloc(CBHEAP *heap, int *np);
-
-
-/* Allocate a formatted string on memory.
- `format' specifies a printf-like format string. The conversion character `%' can be used
- with such flag characters as `d', `o', `u', `x', `X', `e', `E', `f', `g', `G', `c', `s', and
- `%'. Specifiers of the field length and the precision can be put between the conversion
- characters and the flag characters. The specifiers consist of decimal characters, `.', `+',
- `-', and the space character.
- The other arguments are used according to the format string.
- The return value is the pointer to the allocated region of the result 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 *cbsprintf(const char *format, ...);
-
-
-/* Replace some patterns in a string.
- `str' specifies the pointer to a source string.
- `pairs' specifies the handle of a map composed of pairs of replacement. The key of each pair
- specifies a pattern before replacement and its value specifies the pattern after replacement.
- The return value is the pointer to the allocated region of the result 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 *cbreplace(const char *str, CBMAP *pairs);
-
-
-/* Make a list by splitting a serial datum.
- `ptr' specifies the pointer to the region of the source content.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- `delim' specifies a string containing delimiting characters. If it is `NULL', zero code is
- used as a delimiter.
- The return value is a list handle.
- If two delimiters are successive, it is assumed that an empty element is between the two.
- Because the handle of the return value is opened with the function `cblistopen', it should
- be closed with the function `cblistclose'. */
-CBLIST *cbsplit(const char *ptr, int size, const char *delim);
-
-
-/* Read whole data of a file.
- `name' specifies the name of a file. If it is `NULL', the standard input is specified.
- `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.
- The return value is the pointer to the allocated region of the read data. 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 *cbreadfile(const char *name, int *sp);
-
-
-/* Write a serial datum into a file.
- `name specifies the name of a file. If it is `NULL', the standard output is specified.
- `ptr' specifies the pointer to the region of the source content.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- If successful, the return value is true, else, it is false.
- If the file exists, it is overwritten. Else, a new file is created. */
-int cbwritefile(const char *name, const char *ptr, int size);
-
-
-/* Read every line of a file.
- `name' specifies the name of a file. If it is `NULL', the standard input is specified.
- The return value is a list handle of the lines if successful, else it is NULL. Line
- separators are cut out. 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 *cbreadlines(const char *name);
-
-
-/* Read names of files in a directory.
- `name' specifies the name of a directory.
- The return value is a list handle of names if successful, else it is NULL.
- 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 *cbdirlist(const char *name);
-
-
-/* Get the status of a file or a directory.
- `name' specifies the name of a file or a directory.
- `dirp' specifies the pointer to a variable to which whether the file is a directory is
- assigned. If it is `NULL', it is not used.
- `sizep' specifies the pointer to a variable to which the size of the file is assigned. If it
- is `NULL', it is not used.
- `mtimep' specifies the pointer to a variable to which the last modified time of the file is
- assigned. If it is `NULL', it is not used.
- If successful, the return value is true, else, false. False is returned when the file does
- not exist or the permission is denied. */
-int cbfilestat(const char *name, int *isdirp, int *sizep, time_t *mtimep);
-
-
-/* Remove a file or a directory and its sub ones recursively.
- `name' specifies the name of a file or a directory.
- If successful, the return value is true, else, false. False is returned when the file does
- not exist or the permission is denied. */
-int cbremove(const char *name);
-
-
-/* Break up a URL into elements.
- `str' specifies the pointer to a string of URL.
- The return value is a map handle. Each key of the map is the name of an element. The key
- "self" specifies the URL itself. The key "scheme" specifies the scheme. The key "host"
- specifies the host of the server. The key "port" specifies the port number of the server.
- The key "authority" specifies the authority information. The key "path" specifies the path
- of the resource. The key "file" specifies the file name without the directory section. The
- key "query" specifies the query string. The key "fragment" specifies the fragment string.
- Supported schema are HTTP, HTTPS, FTP, and FILE. Absolute URL and relative URL are supported.
- Because the handle of the return value is opened with the function `cbmapopen', it should
- be closed with the function `cbmapclose' if it is no longer in use. */
-CBMAP *cburlbreak(const char *str);
-
-
-/* Resolve a relative URL with another absolute URL.
- `base' specifies an absolute URL of a base location.
- `target' specifies a URL to be resolved.
- The return value is a resolved URL. If the target URL is relative, a new URL of relative
- location from the base location is returned. Else, a copy of the target URL is returned.
- 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 *cburlresolve(const char *base, const char *target);
-
-
-/* Encode a serial object with URL encoding.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is the pointer to the result 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 *cburlencode(const char *ptr, int size);
-
-
-/* Decode a string encoded with URL encoding.
- `str' specifies the pointer to an encoded string.
- `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.
- The return value is the pointer to the region of the result.
- 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 *cburldecode(const char *str, int *sp);
-
-
-/* Encode a serial object with Base64 encoding.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is the pointer to the result 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 *cbbaseencode(const char *ptr, int size);
-
-
-/* Decode a string encoded with Base64 encoding.
- `str' specifies the pointer to an encoded string.
- `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.
- The return value is the pointer to the region of the result.
- 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 *cbbasedecode(const char *str, int *sp);
-
-
-/* Encode a serial object with quoted-printable encoding.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is the pointer to the result 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 *cbquoteencode(const char *ptr, int size);
-
-
-/* Decode a string encoded with quoted-printable encoding.
- `str' specifies the pointer to an encoded string.
- `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.
- The return value is the pointer to the region of the result.
- 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 *cbquotedecode(const char *str, int *sp);
-
-
-/* Split a string of MIME into headers and the body.
- `ptr' specifies the pointer to the region of MIME data.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- `attrs' specifies a map handle to store attributes. If it is `NULL', it is not used. Each
- key of the map is an attribute name uncapitalized.
- `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.
- The return value is the pointer of the body data.
- If the content type is defined, the attribute map has the key "TYPE" specifying the type. If
- the character encoding is defined, the key "CHARSET" specifies the encoding name. If the
- boundary string of multipart is defined, the key "BOUNDARY" specifies the string. If the
- content disposition is defined, the key "DISPOSITION" specifies the direction. If the file
- name is defined, the key "FILENAME" specifies the name. If the attribute name is defined,
- the key "NAME" specifies the name. 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 *cbmimebreak(const char *ptr, int size, CBMAP *attrs, int *sp);
-
-
-/* Split multipart data of MIME into its parts.
- `ptr' specifies the pointer to the region of multipart data of MIME.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- `boundary' specifies the pointer to the region of the boundary string.
- The return value is a list handle. Each element of the list is the string of a part.
- 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 *cbmimeparts(const char *ptr, int size, const char *boundary);
-
-
-/* Encode a string with MIME encoding.
- `str' specifies the pointer to a string.
- `encname' specifies a string of the name of the character encoding.
- The return value is the pointer to the result string.
- `base' specifies whether to use Base64 encoding. If it is false, quoted-printable is used.
- 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 *cbmimeencode(const char *str, const char *encname, int base);
-
-
-/* Decode a string encoded with MIME encoding.
- `str' specifies the pointer to an encoded string.
- `enp' specifies the pointer to a region into which the name of encoding is written. If it is
- `NULL', it is not used. The size of the buffer should be equal to or more than 32 bytes.
- The return value is the pointer to the result 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 *cbmimedecode(const char *str, char *enp);
-
-
-/* Split a string of CSV into rows.
- `str' specifies the pointer to the region of an CSV string.
- The return value is a list handle. Each element of the list is a string of a row.
- 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. The character encoding
- of the input string should be US-ASCII, UTF-8, ISO-8859-*, EUC-*, or Shift_JIS. Being
- compatible with MS-Excel, these functions for CSV can handle cells including such meta
- characters as comma, between double quotation marks. */
-CBLIST *cbcsvrows(const char *str);
-
-
-/* Split the string of a row of CSV into cells.
- `str' specifies the pointer to the region of a row of CSV.
- The return value is a list handle. Each element of the list is the unescaped string of a
- cell of the row.
- 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 *cbcsvcells(const char *str);
-
-
-/* Escape a string with the meta characters of CSV.
- `str' specifies the pointer to the region of a string.
- The return value is the pointer to the escaped string sanitized of meta characters.
- 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 *cbcsvescape(const char *str);
-
-
-/* Unescape a string with the escaped meta characters of CSV.
- `str' specifies the pointer to the region of a string with meta characters.
- The return value is the pointer to the unescaped 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 *cbcsvunescape(const char *str);
-
-
-/* Split a string of XML into tags and text sections.
- `str' specifies the pointer to the region of an XML string.
- `cr' specifies whether to remove comments.
- The return value is a list handle. Each element of the list is the string of a tag or a
- text section.
- 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. The character encoding
- of the input string should be US-ASCII, UTF-8, ISO-8859-*, EUC-*, or Shift_JIS. Because
- these functions for XML are not XML parser with validation check, it can handle also HTML
- and SGML. */
-CBLIST *cbxmlbreak(const char *str, int cr);
-
-
-/* Get the map of attributes of an XML tag.
- `str' specifies the pointer to the region of a tag string.
- The return value is a map handle. Each key of the map is the name of an attribute. Each
- value is unescaped. You can get the name of the tag with the key of an empty string.
- Because the handle of the return value is opened with the function `cbmapopen', it should
- be closed with the function `cbmapclose' if it is no longer in use. */
-CBMAP *cbxmlattrs(const char *str);
-
-
-/* Escape a string with the meta characters of XML.
- `str' specifies the pointer to the region of a string.
- The return value is the pointer to the escaped string sanitized of meta characters.
- This function converts only `&', `<', `>', and `"'. 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 *cbxmlescape(const char *str);
-
-
-/* Unescape a string with the entity references of XML.
- `str' specifies the pointer to the region of a string with meta characters.
- The return value is the pointer to the unescaped string.
- This function restores only `&amp;', `&lt;', `&gt;', and `&quot;'. 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 *cbxmlunescape(const char *str);
-
-
-/* Compress a serial object with ZLIB.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned.
- If successful, the return value is the pointer to the result object, 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. This function is available only if
- QDBM was built with ZLIB enabled. */
-char *cbdeflate(const char *ptr, int size, int *sp);
-
-
-/* Decompress a serial object compressed with ZLIB.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region.
- `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 result object, else, it is `NULL'.
- 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. This function is available only if QDBM was built with ZLIB enabled. */
-char *cbinflate(const char *ptr, int size, int *sp);
-
-
-/* Compress a serial object with GZIP.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned.
- If successful, the return value is the pointer to the result object, 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. This function is available only if
- QDBM was built with ZLIB enabled. */
-char *cbgzencode(const char *ptr, int size, int *sp);
-
-
-/* Decompress a serial object compressed with GZIP.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region.
- `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 result object, else, it is `NULL'.
- 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. This function is available only if QDBM was built with ZLIB enabled. */
-char *cbgzdecode(const char *ptr, int size, int *sp);
-
-
-/* Get the CRC32 checksum of a serial object.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is the CRC32 checksum of the object.
- This function is available only if QDBM was built with ZLIB enabled. */
-unsigned int cbgetcrc(const char *ptr, int size);
-
-
-/* Compress a serial object with LZO.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned.
- If successful, the return value is the pointer to the result object, 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. This function is available only if
- QDBM was built with LZO enabled. */
-char *cblzoencode(const char *ptr, int size, int *sp);
-
-
-/* Decompress a serial object compressed with LZO.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region.
- `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 result object, else, it is `NULL'.
- 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. This function is available only if QDBM was built with LZO enabled. */
-char *cblzodecode(const char *ptr, int size, int *sp);
-
-
-/* Compress a serial object with BZIP2.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- `sp' specifies the pointer to a variable to which the size of the region of the return
- value is assigned.
- If successful, the return value is the pointer to the result object, 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. This function is available only if
- QDBM was built with LZO enabled. */
-char *cbbzencode(const char *ptr, int size, int *sp);
-
-
-/* Decompress a serial object compressed with BZIP2.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region.
- `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 result object, else, it is `NULL'.
- 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. This function is available only if QDBM was built with LZO enabled. */
-char *cbbzdecode(const char *ptr, int size, int *sp);
-
-
-/* Convert the character encoding of a string.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- `icode' specifies the name of encoding of the input string.
- `ocode' specifies the name of encoding of the output string.
- `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.
- `mp' specifies the pointer to a variable to which the number of missing characters by failure
- of conversion is assigned. If it is `NULL', it is not used.
- If successful, the return value is the pointer to the result object, else, it is `NULL'.
- 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. This function is available only if QDBM was built with ICONV enabled. */
-char *cbiconv(const char *ptr, int size, const char *icode, const char *ocode, int *sp, int *mp);
-
-
-/* Detect the encoding of a string automatically.
- `ptr' specifies the pointer to a region.
- `size' specifies the size of the region. If it is negative, the size is assigned with
- `strlen(ptr)'.
- The return value is the string of the encoding name of the string.
- As it stands, US-ASCII, ISO-2022-JP, Shift_JIS, CP932, EUC-JP, UTF-8, UTF-16, UTF-16BE,
- and UTF-16LE are supported. If none of them matches, ISO-8859-1 is selected. This function
- is available only if QDBM was built with ICONV enabled. */
-const char *cbencname(const char *ptr, int size);
-
-
-/* Get the jet lag of the local time in seconds.
- The return value is the jet lag of the local time in seconds. */
-int cbjetlag(void);
-
-
-/* Get the Gregorian calendar of a time.
- `t' specifies a source time. If it is negative, the current time is specified.
- `jl' specifies the jet lag of a location in seconds.
- `yearp' specifies the pointer to a variable to which the year is assigned. If it is `NULL',
- it is not used.
- `monp' specifies the pointer to a variable to which the month is assigned. If it is `NULL',
- it is not used. 1 means January and 12 means December.
- `dayp' specifies the pointer to a variable to which the day of the month is assigned. If it
- is `NULL', it is not used.
- `hourp' specifies the pointer to a variable to which the hours is assigned. If it is `NULL',
- it is not used.
- `minp' specifies the pointer to a variable to which the minutes is assigned. If it is `NULL',
- it is not used.
- `secp' specifies the pointer to a variable to which the seconds is assigned. If it is `NULL',
- it is not used. */
-void cbcalendar(time_t t, int jl, int *yearp, int *monp, int *dayp,
- int *hourp, int *minp, int *secp);
-
-
-/* Get the day of week of a date.
- `year' specifies the year of a date.
- `mon' specifies the month of the date.
- `day' specifies the day of the date.
- The return value is the day of week of the date. 0 means Sunday and 6 means Saturday. */
-int cbdayofweek(int year, int mon, int day);
-
-
-/* Get the string for a date in W3CDTF.
- `t' specifies a source time. If it is negative, the current time is specified.
- `jl' specifies the jet lag of a location in seconds.
- The return value is the string of the date in W3CDTF (YYYY-MM-DDThh:mm:ddTZD).
- 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 *cbdatestrwww(time_t t, int jl);
-
-
-/* Get the string for a date in RFC 1123 format.
- `t' specifies a source time. If it is negative, the current time is specified.
- `jl' specifies the jet lag of a location in seconds.
- The return value is the string of the date in RFC 1123 format (Wdy, DD-Mon-YYYY hh:mm:dd TZD).
- 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 *cbdatestrhttp(time_t t, int jl);
-
-
-/* Get the time value of a date string in decimal, hexadecimal, W3CDTF, or RFC 822 (1123).
- `str' specifies a date string in decimal, hexadecimal, W3CDTF, or RFC 822 (1123).
- The return value is the time value of the date or -1 if the format is invalid.
- Decimal can be trailed by "s" for in seconds, "m" for in minutes, "h" for in hours,
- and "d" for in days. */
-time_t cbstrmktime(const char *str);
-
-
-/* Get user and system processing times.
- `usrp' specifies the pointer to a variable to which the user processing time is assigned.
- If it is `NULL', it is not used. The unit of time is seconds.
- `sysp' specifies the pointer to a variable to which the system processing time is assigned.
- If it is `NULL', it is not used. The unit of time is seconds. */
-void cbproctime(double *usrp, double *sysp);
-
-
-/* Ensure that the standard I/O is binary mode.
- This function is useful for applications on dosish file systems. */
-void cbstdiobin(void);
-
-
-
-/*************************************************************************************************
- * features for experts
- *************************************************************************************************/
-
-
-/* Show error message on the standard error output and exit.
- `message' specifies an error message.
- This function does not return. */
-void *cbmyfatal(const char *message);
-
-
-/* Create a datum handle from an allocated region.
- `ptr' specifies the pointer to the region of an element. The region should be allocated with
- malloc and it is released by the function.
- `size' specifies the size of the region. */
-CBDATUM *cbdatumopenbuf(char *ptr, int size);
-
-
-/* Set a buffer to a datum handle.
- `ptr' specifies the pointer to the region of an element. The region should be allocated with
- malloc and it is released by the function.
- `size' specifies the size of the region. */
-void cbdatumsetbuf(CBDATUM *datum, char *ptr, int size);
-
-
-/* Add an allocated element at the end of a list.
- `list' specifies a list handle.
- `ptr' specifies the pointer to the region of an element. The region should be allocated with
- malloc and it is released by the function.
- `size' specifies the size of the region. */
-void cblistpushbuf(CBLIST *list, char *ptr, int size);
-
-
-/* Get a map handle with specifying the number of buckets.
- `bnum' specifies the number of buckets.
- The return value is a map handle. */
-CBMAP *cbmapopenex(int bnum);
-
-
-/* Alias of `cbmalloc'. */
-#define CB_MALLOC(CB_ptr, CB_size) \
- (((CB_ptr) = malloc(CB_size)) ? (CB_ptr) : cbmyfatal("out of memory"))
-
-
-/* Alias of `cbrealloc'. */
-#define CB_REALLOC(CB_ptr, CB_size) \
- (((CB_ptr) = realloc((CB_ptr), (CB_size))) ? (CB_ptr) : cbmyfatal("out of memory"))
-
-
-/* Alias of `cbmemdup'.
- However, `size' should not be negative. */
-#define CB_MEMDUP(CB_res, CB_ptr, CB_size) \
- do { \
- CB_MALLOC((CB_res), (CB_size) + 1); \
- memcpy((CB_res), (CB_ptr), (CB_size)); \
- (CB_res)[(CB_size)] = '\0'; \
- } while(FALSE)
-
-
-/* Get the size of padding bytes for pointer alignment.
- `hsiz' specifies the header size of the object.
- The return value is the size of padding bytes. */
-#define CB_ALIGNPAD(CB_hsiz) \
- (((CB_hsiz | ~-(int)sizeof(void *)) + 1) - CB_hsiz)
-
-
-/* Alias of `cbdatumopen'.
- However, no dafault data is specified. */
-#define CB_DATUMOPEN(CB_datum) \
- do { \
- CB_MALLOC((CB_datum), sizeof(*(CB_datum))); \
- CB_MALLOC((CB_datum)->dptr, CB_DATUMUNIT); \
- (CB_datum)->dptr[0] = '\0'; \
- (CB_datum)->dsize = 0; \
- (CB_datum)->asize = CB_DATUMUNIT; \
- } while(FALSE)
-
-
-/* Alias of `cbdatumopen'.
- However, `size' should not be negative. */
-#define CB_DATUMOPEN2(CB_datum, CB_ptr, CB_size) \
- do { \
- CB_DATUMOPEN((CB_datum)); \
- CB_DATUMCAT((CB_datum), (CB_ptr), (CB_size)); \
- } while(FALSE)
-
-
-/* Alias of `cbdatumclose'. */
-#define CB_DATUMCLOSE(CB_datum) \
- do { \
- free((CB_datum)->dptr); \
- free((CB_datum)); \
- } while(FALSE)
-
-
-/* Alias of `cbdatumcat'.
- However, `size' should not be negative. */
-#define CB_DATUMCAT(CB_datum, CB_ptr, CB_size) \
- do { \
- if((CB_datum)->dsize + (CB_size) >= (CB_datum)->asize){ \
- (CB_datum)->asize = (CB_datum)->asize * 2 + (CB_size) + 1; \
- CB_REALLOC((CB_datum)->dptr, (CB_datum)->asize); \
- } \
- memcpy((CB_datum)->dptr + (CB_datum)->dsize, (CB_ptr), (CB_size)); \
- (CB_datum)->dsize += (CB_size); \
- (CB_datum)->dptr[(CB_datum)->dsize] = '\0'; \
- } while(FALSE)
-
-
-/* Alias of `cbdatumptr'. */
-#define CB_DATUMPTR(CB_datum) ((const char *)((CB_datum)->dptr))
-
-
-/* Alias of `cbdatumsize'. */
-#define CB_DATUMSIZE(CB_datum) ((int)((CB_datum)->dsize))
-
-
-/* Alias of `cbdatumsetsize'. */
-#define CB_DATUMSETSIZE(CB_datum, CB_size) \
- do { \
- if((CB_size) <= (CB_datum)->dsize){ \
- (CB_datum)->dsize = (CB_size); \
- (CB_datum)->dptr[(CB_size)] = '\0'; \
- } else { \
- if((CB_size) >= (CB_datum)->asize){ \
- (CB_datum)->asize = (CB_datum)->asize * 2 + (CB_size) + 1; \
- CB_REALLOC((CB_datum)->dptr, (CB_datum)->asize); \
- } \
- memset((CB_datum)->dptr + (CB_datum)->dsize, 0, ((CB_size) - (CB_datum)->dsize) + 1); \
- (CB_datum)->dsize = (CB_size); \
- } \
- } while(FALSE)
-
-
-/* Alias of `cbdatumtomalloc'. */
-#define CB_DATUMTOMALLOC(CB_datum, CB_ptr, CB_size) \
- do { \
- (CB_ptr) = (CB_datum)->dptr; \
- (CB_size) = (CB_datum)->dsize; \
- free((CB_datum)); \
- } while(FALSE)
-
-
-/* Alias of `cblistopen'. */
-#define CB_LISTOPEN(CB_list) \
- do { \
- CB_MALLOC((CB_list), sizeof(*(CB_list))); \
- (CB_list)->anum = CB_LISTUNIT; \
- CB_MALLOC((CB_list)->array, sizeof((CB_list)->array[0]) * (CB_list)->anum); \
- (CB_list)->start = 0; \
- (CB_list)->num = 0; \
- } while(FALSE)
-
-
-/* Alias of `cblistopen'.
- However, `anum' is specified for the number of initial allocated elements. */
-#define CB_LISTOPEN2(CB_list, CB_anum) \
- do { \
- CB_MALLOC((CB_list), sizeof(*(CB_list))); \
- (CB_list)->anum = (CB_anum) > 4 ? (CB_anum) : 4; \
- CB_MALLOC((CB_list)->array, sizeof((CB_list)->array[0]) * (CB_list)->anum); \
- (CB_list)->start = 0; \
- (CB_list)->num = 0; \
- } while(FALSE)
-
-
-/* Alias of `cblistclose'. */
-#define CB_LISTCLOSE(CB_list) \
- do { \
- int _CB_i, _CB_end; \
- _CB_end = (CB_list)->start + (CB_list)->num; \
- for(_CB_i = (CB_list)->start; _CB_i < _CB_end; _CB_i++){ \
- free((CB_list)->array[_CB_i].dptr); \
- } \
- free((CB_list)->array); \
- free((CB_list)); \
- } while(FALSE)
-
-
-/* Alias of `cblistnum'. */
-#define CB_LISTNUM(CB_list) \
- ((int)((CB_list)->num))
-
-
-/* Alias of `cblistval'.
- However, `sp' is ignored. */
-#define CB_LISTVAL(CB_list, CB_index) \
- ((const char *)((CB_list)->array[(CB_list)->start+(CB_index)].dptr))
-
-
-/* Alias of `cblistval'.
- However, `size' is used instead of `sp'. */
-#define CB_LISTVAL2(CB_list, CB_index, CB_size) \
- ((CB_size) = (CB_list)->array[(CB_list)->start+(CB_index)].dsize, \
- (const char *)((CB_list)->array[(CB_list)->start+(CB_index)].dptr))
-
-
-/* Alias of `cblistpush'.
- However, `size' should not be negative. */
-#define CB_LISTPUSH(CB_list, CB_ptr, CB_size) \
- do { \
- int _CB_index; \
- _CB_index = (CB_list)->start + (CB_list)->num; \
- if(_CB_index >= (CB_list)->anum){ \
- (CB_list)->anum *= 2; \
- CB_REALLOC((CB_list)->array, (CB_list)->anum * sizeof((CB_list)->array[0])); \
- } \
- CB_MALLOC((CB_list)->array[_CB_index].dptr, \
- ((CB_size) < CB_DATUMUNIT ? CB_DATUMUNIT : (CB_size)) + 1); \
- memcpy((CB_list)->array[_CB_index].dptr, (CB_ptr), (CB_size)); \
- (CB_list)->array[_CB_index].dptr[(CB_size)] = '\0'; \
- (CB_list)->array[_CB_index].dsize = (CB_size); \
- (CB_list)->num++; \
- } while(FALSE)
-
-
-/* Remove and free an element of the end of a list.
- `list' specifies a list handle. */
-#define CB_LISTDROP(CB_list) \
- do { \
- if((CB_list)->num > 0){ \
- free((CB_list)->array[(CB_list)->start+(CB_list)->num-1].dptr); \
- (CB_list)->num--; \
- } \
- } while(FALSE)
-
-
-/* Alias of `cblistinsert'.
- However, `index' is not checked and `size' should not be negative. */
-#define CB_LISTINSERT(CB_list, CB_index, CB_ptr, CB_size) \
- do { \
- int _CB_index = (CB_index); \
- _CB_index += (CB_list)->start; \
- if((CB_list)->start + (CB_list)->num >= (CB_list)->anum){ \
- (CB_list)->anum *= 2; \
- CB_REALLOC((CB_list)->array, (CB_list)->anum * sizeof((CB_list)->array[0])); \
- } \
- memmove((CB_list)->array + _CB_index + 1, (CB_list)->array + _CB_index, \
- sizeof((CB_list)->array[0]) * ((CB_list)->start + (CB_list)->num - _CB_index)); \
- CB_MEMDUP((CB_list)->array[_CB_index].dptr, (CB_ptr), (CB_size)); \
- (CB_list)->array[_CB_index].dsize = (CB_size); \
- (CB_list)->num++; \
- } while(FALSE)
-
-
-/* Alias of `cblistpushbuf'. */
-#define CB_LISTPUSHBUF(CB_list, CB_ptr, CB_size) \
- do{ \
- int _CB_index; \
- _CB_index = (CB_list)->start + (CB_list)->num; \
- if(_CB_index >= (CB_list)->anum){ \
- (CB_list)->anum *= 2; \
- CB_REALLOC((CB_list)->array, (CB_list)->anum * sizeof((CB_list)->array[0])); \
- } \
- (CB_list)->array[_CB_index].dptr = (CB_ptr); \
- (CB_list)->array[_CB_index].dsize = (CB_size); \
- (CB_list)->num++; \
- } while(FALSE) \
-
-
-/* Alias of `cbmapiterval'.
- However, `size' is used instead of `sp'. */
-#define CB_MAPITERVAL(CB_vbuf, CB_kbuf, CB_vsiz) \
- do { \
- CBMAPDATUM *_CB_datum; \
- _CB_datum = (CBMAPDATUM *)((CB_kbuf) - sizeof(*_CB_datum)); \
- (CB_vsiz) = _CB_datum->vsiz; \
- (CB_vbuf) = (char *)_CB_datum + sizeof(*_CB_datum) + \
- _CB_datum->ksiz + CB_ALIGNPAD(_CB_datum->ksiz); \
- } while(FALSE)
-
-
-
-#undef MYEXTERN
-
-#if defined(__cplusplus) /* export for C++ */
-}
-#endif
-
-#endif /* duplication check */
-
-
-/* END OF FILE */