Disk Based Hashtables (DBH) 64 bit

Disk Based Hashtables (DBH) 64 bit — Library to create and manage hash tables residing on disk. Associations are made between keys and values so that for a given a key the value can be found and loaded into memory quickly. Being disk based allows for large and persistent hashes. 64 bit support allows for hashtables with sizes over 4 Gigabytes on 32 bit systems. Cuantified key generation allows for minimum access time on balanced multidimensional trees.

Stability Level

Stable, unless otherwise indicated

Synopsis

#include <dbh.h>

#define             DBH_VERSION
#define             DBH_FILE_VERSION
#define             FILE_POINTER
                    dbh_header_t;
                    DBHashTable;
#define             DBH_KEYLENGTH                       (dbh)
#define             DBH_RECORD_SIZE                     (dbh)
#define             DBH_KEY                             (dbh)
#define             DBH_DATA                            (dbh)
#define             DBH_ERASED_SPACE                    (dbh)
#define             DBH_DATA_SPACE                      (dbh)
#define             DBH_TOTAL_SPACE                     (dbh)
#define             DBH_FORMAT_SPACE                    (dbh)
#define             DBH_RECORDS                         (dbh)
#define             DBH_MAXIMUM_RECORD_SIZE             (dbh)
#define             DBH_PATH                            (dbh)
void                (*DBHashFunc)                       (DBHashTable *dbh);
int                 dbh_close                           (DBHashTable *dbh);
int                 dbh_destroy                         (DBHashTable *dbh);
DBHashTable *       dbh_create                          (const char *path,
                                                         unsigned char key_length);
DBHashTable *       dbh_open                            (const char *path);
DBHashTable *       dbh_open_ro                         (const char *path);
int                 dbh_erase                           (DBHashTable *dbh);
int                 dbh_unerase                         (DBHashTable *dbh);
int                 dbh_prune                           (DBHashTable *dbh,
                                                         unsigned char *key,
                                                         unsigned char subtree_length);
int                 dbh_unprune                         (DBHashTable *dbh,
                                                         unsigned char *key,
                                                         unsigned char subtree_length);
FILE_POINTER        dbh_find                            (DBHashTable *dbh,
                                                         int n);
void                dbh_genkey                          (unsigned char *key,
                                                         unsigned char length,
                                                         unsigned int n);
void                dbh_genkey2                         (unsigned char *key,
                                                         unsigned char length,
                                                         unsigned int n);
void                dbh_orderkey                        (unsigned char *key,
                                                         unsigned char length,
                                                         unsigned int n,
                                                         unsigned char base);
FILE_POINTER        dbh_load                            (DBHashTable *dbh);
unsigned char       dbh_load_address                    (DBHashTable *dbh,
                                                         FILE_POINTER currentseek);
FILE_POINTER        dbh_load_parent                     (DBHashTable *dbh);
FILE_POINTER        dbh_load_child                      (DBHashTable *dbh,
                                                         unsigned char key_index);
DBHashTable *       dbh_regen_sweep                     (DBHashTable *dbh);
DBHashTable *       dbh_regen_fanout                    (DBHashTable *dbh);
int                 dbh_settempdir                      (DBHashTable *dbh,
                                                         char *temp_dir);
void                dbh_set_data                        (DBHashTable *dbh,
                                                         void *data,
                                                         FILE_POINTER size);
void                dbh_set_key                         (DBHashTable *dbh,
                                                         unsigned char *key);
int                 dbh_set_size                        (DBHashTable *dbh,
                                                         FILE_POINTER size);
void                dbh_set_recordsize                  (DBHashTable *dbh,
                                                         int record_size);
int                 dbh_sweep                           (DBHashTable *dbh,
                                                         DBHashFunc operate,
                                                         unsigned char *key1,
                                                         unsigned char *key2,
                                                         unsigned char ignore_portion);
int                 dbh_fanout                          (DBHashTable *dbh,
                                                         DBHashFunc operate,
                                                         unsigned char *key1,
                                                         unsigned char *key2,
                                                         unsigned char ignore_portion);
int                 dbh_foreach_sweep                   (DBHashTable *dbh,
                                                         DBHashFunc operate);
int                 dbh_foreach_fanout                  (DBHashTable *dbh,
                                                         DBHashFunc operate);
void                dbh_exit_sweep                      (DBHashTable *dbh);
void                dbh_exit_fanout                     (DBHashTable *dbh);
FILE_POINTER        dbh_update                          (DBHashTable *dbh);
int                 dbh_writeheader                     (DBHashTable *dbh);

Description

A DBHashTable provides associations between keys and values which is optimized so that given a key, the associated value can be found very quickly.

Note that only one hash record is loaded from disk to memory at any given moment for a DBHashTable. Both keys and values should be copied into the DBHashTable record, so they need not exist for the lifetime of the DBHashTable. This means that the use of static strings and temporary strings (i.e. those created in buffers and those returned by GTK+ widgets) should be copied with dbh_set_key() and dbh_set_data() into the DBHashTable record before being inserted.

You must be careful to ensure that copied key length matches the defined key length of the DBHashTable, and also that the copied data does not exceed the maximum length of the DBHashTable record (1024 bytes by default, and expandable by dbh_set_size() ). If the DBHashTable record length is to be variable, be sure to set the appropriate length before each dbh_update(), with dbh_set_recordsize(), otherwise the record length need only be set before the first dbh_update().

To create a DBHashTable, use dbh_create().

To insert a key and value into a DBHashTable, use dbh_update(). The DBHashTable will not be modified until this command is given. All changes to the current DBHashTable record only reside in memory. dbh_update() is necessary to commit the changes to the DBHashTable.

To lookup a value corresponding to a given key, use dbh_load().

To erase and unerase a key and value, use dbh_erase() and dbh_unerase().

To call a function for each key and value pair (using a sweep route) use dbh_foreach_sweep() and dbh_sweep().

To call a function for each key and value pair (using a fanout route) use dbh_foreach_fanout() and dbh_foreach_fanout().

To destroy a DBHashTable use dbh_destroy().

This is dbh version 2, incompatible with dbh version 1 files. The main difference between the two version is the handling of file pointers. In version 1, file pointers were 32 bits in length, while in version 2, file pointers are 64 bits in length. This allows for DBHashTables with sizes greater than 2 GBytes.

Cuantified numbers are an alternate way to view the set of natural numbers {1, 2, 3, ...} where order is defined in two levels. In natural numbers there is only one level of order (defined by the > boolean operator). In cuantified numbers the first level of order is defined by the cuanta or quantity. The cuanta is obtained by adding all the digits of the cuantified number. Thus, for example, 10022, 5, 32, and 11111 are all equal at the first level of order since they all add up to 5. The second level or order may be obtained in different manners. In functions dbh_genkey() and dbh_genkey2() the corresponding order of the natural numbers from which they are associated is not conserved.

In dbh_orderkey() the corresponding order of the natural numbers from which they are associated is conserved, but at a price. The base, or maximum value each digit may reach, must be defined. This effectively puts a limit on the number of keys which may be generated for a given number of digits.

When a DBHashTable is constructed with cuantified keys, the maximum amount of disk access instructions generated to access any given record is equal to the cuanta of the cuantified number represented by the key. This allows a DBHashTable to be constructed with minimum access time across all records.

Details

DBH_VERSION

#define DBH_VERSION 		"4.6.0"

Disk Based Hashtables library version


DBH_FILE_VERSION

#define DBH_FILE_VERSION 	"DBH_2.0/64bit"

Disk Based Hashtables library file version compatibility


FILE_POINTER

#define             FILE_POINTER

Architecture independent 64 bit integer type


dbh_header_t

typedef struct {
  unsigned char n_limit;	
  unsigned char user_chars[5];	
  FILE_POINTER bof;		
  FILE_POINTER erased_space;	
  FILE_POINTER data_space;	
  FILE_POINTER total_space;	
				   
  FILE_POINTER records;		
  FILE_POINTER record_length;	
  FILE_POINTER user_filepointer[6];	
  char version[16];		
  char copyright[128];		
} dbh_header_t;

dbh_header_t is the structural information written at the first 256 bytes of a DBHashTable file.

unsigned char n_limit;

Maximum toplevel branches

unsigned char user_chars[5];

Five unsigned chars available to user

FILE_POINTER bof;

File pointer to root of tree

FILE_POINTER erased_space;

Amount of bytes marked as erased

FILE_POINTER data_space;

Amount of bytes ocuppied by data

FILE_POINTER total_space;

Amount of bytes ocuppied by data and format

FILE_POINTER records;

Number of records

FILE_POINTER record_length;

Maximum record length

FILE_POINTER user_filepointer[6];

Six 64-bit filepointers available to user

char version[16];

DBHashTable version compatibility information

char copyright[128];

DBH sourcecode distribution copyright and download information

DBHashTable

typedef struct {
  unsigned char branches;		    
  FILE_POINTER bytes_userdata;		   
  unsigned char *key;			 
  void *data;				 
  int fd;				 
  dbh_header_t *head_info;		 
  char *path;				
} DBHashTable;

DBHashTable is a data structure containing the record information for an open DBHashTable file.

unsigned char branches;

Maximum toplevel branches

FILE_POINTER bytes_userdata;

size of data record

unsigned char *key;

access key

void *data;

record data pointer

int fd;

file descriptor

dbh_header_t *head_info;

nonvolatile header information

char *path;

file path

DBH_KEYLENGTH()

#define             DBH_KEYLENGTH(dbh)

This macro returns the keylenth in bytes associated to the DBHashTable. The value is fixed when the DBHashTable is created with dbh_create.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_RECORD_SIZE()

#define             DBH_RECORD_SIZE(dbh)

This macro returns the size of the current record loaded in memory. If no record has been loaded, then the return value is not defined.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_KEY()

#define             DBH_KEY(dbh)

This macro returns a pointer to the current DBHashTable key area.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_DATA()

#define             DBH_DATA(dbh)

This macro returns a pointer to the current DBHashTable data area.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_ERASED_SPACE()

#define             DBH_ERASED_SPACE(dbh)

This macro returns the amount of bytes taken up by erased data in the DBHashTable.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_DATA_SPACE()

#define             DBH_DATA_SPACE(dbh)

This macro returns the amount of bytes taken up by valid data in the DBHashTable.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_TOTAL_SPACE()

#define             DBH_TOTAL_SPACE(dbh)

This macro returns the total amount of bytes taken up by the DBHashTable.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_FORMAT_SPACE()

#define             DBH_FORMAT_SPACE(dbh)

This macro returns the total amount of bytes taken up by the format of the DBHashTable.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_RECORDS()

#define             DBH_RECORDS(dbh)

This macro returns the number of records in the DBHashTable.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_MAXIMUM_RECORD_SIZE()

#define             DBH_MAXIMUM_RECORD_SIZE(dbh)

This macro returns the maximum allocated space for data in the current DBHashTable record.

dbh :

A DBHashTable pointer (DBHashTable *)

DBH_PATH()

#define             DBH_PATH(dbh)

This macro returns a pointer to a string containing the path to the current DBHashTable.

dbh :

A DBHashTable pointer (DBHashTable *)

DBHashFunc ()

void                (*DBHashFunc)                       (DBHashTable *dbh);

Pointer to function to apply during dbh_sweep(), dbh_fanout(), dbh_foreach_sweep() and dbh_foreach_fanout().

This function will be applied to all data records involved in the sweep or fanout process

dbh :

A DBHashTable pointer (DBHashTable *)

dbh_close ()

int                 dbh_close                           (DBHashTable *dbh);

Close hash file (thus flushing io buffer).

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

0 on error, 1 otherwise.

dbh_destroy ()

int                 dbh_destroy                         (DBHashTable *dbh);

Close an open DBHashTable and erase file from disk. Convenience function that does a close and rm.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

0 if error, 1 otherwise

dbh_create ()

DBHashTable *       dbh_create                          (const char *path,
                                                         unsigned char key_length);

Create a new hash file (overwriting old version). Creates and opens for writing a new DBHashTable. This function will overwrite any file with the specified path, including any previous DBH file. The key_length is fixed. If you want variable length, use a g_hash_table to associate cuantified keys generated by genkey(), and create an extra DBHashTable to save the g_hash. Cuantified keys assure that large DBHashes are spread out optimally.

path :

Path on disk where DBHashTable will reside.

key_length :

The length of the key to access the DBHashTable.

Returns :

A pointer to the newly created and opened DBHashTable, or NULL if it fails.

dbh_open ()

DBHashTable *       dbh_open                            (const char *path);

Open an existing hash in read-write mode. A file write lock will be placed on the file until dbh_close() is called.

path :

Path on disk where DBHashTable resides.

Returns :

A pointer to the newly opened DBHashTable, or NULL if it fails.

dbh_open_ro ()

DBHashTable *       dbh_open_ro                         (const char *path);

Open an existing hash in read-only mode. A file read lock will be placed on the file until dbh_close() is called.

path :

Path on disk where DBHashTable resides.

Returns :

A pointer to the newly opened read-only DBHashTable, or NULL if it fails.

dbh_erase ()

int                 dbh_erase                           (DBHashTable *dbh);

Mark the record currently loaded into memory as erased. If no record is currently loaded, behaviour is undefined.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

0 on error, 1 otherwise.

dbh_unerase ()

int                 dbh_unerase                         (DBHashTable *dbh);

This is the opposite of dbh_erase(). Mark the record currently loaded into memory as unerased. If no record is currently loaded, behaviour is undefined.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

0 on error, 1 otherwise.

dbh_prune ()

int                 dbh_prune                           (DBHashTable *dbh,
                                                         unsigned char *key,
                                                         unsigned char subtree_length);

Erases a whole subtree from the record currently loaded into memory. Records are not really removed fisically, but rather marked erased so they may be recovered (if not overwritten later on). Records are permanently removed after DBHashTable is reconstructed with dbh_regen_sweep() or dbh_regen_fanout().

dbh :

A DBHashTable pointer (DBHashTable *).

key :

key of top level record of subtree to erase.

subtree_length :

number of branches to erase.

Returns :

0 on error, 1 otherwise.

dbh_unprune ()

int                 dbh_unprune                         (DBHashTable *dbh,
                                                         unsigned char *key,
                                                         unsigned char subtree_length);

Does the opposite of dbh_prune(), marking entire subtree as unerased. May fail to work if records have been overwritten since the dbh_prune() instruction was issued.

dbh :

A DBHashTable pointer (DBHashTable *).

key :

key of top level record of subtree to erase.

subtree_length :

number of branches to erase.

Returns :

0 on error, 1 otherwise.

dbh_find ()

FILE_POINTER        dbh_find                            (DBHashTable *dbh,
                                                         int n);

Find the top level subtree FILE_POINTER for the currently loaded record, but ignoring the last n branches.

dbh :

A DBHashTable pointer (DBHashTable *).

n :

Number of branches to ignore on top record.

Returns :

0 on error, byte offset of loaded record otherwise.

dbh_genkey ()

void                dbh_genkey                          (unsigned char *key,
                                                         unsigned char length,
                                                         unsigned int n);

Obtain a key from a secuential series of natural numbers (positive integers without zero) which does not conserve the order of the natural numbers, but which are optimized for construction of a balanced hash tree. These keys are expressed in cuantified numbers based on the 0 digit.

key :

The address where to put the generated key

length :

The key length

n :

The natural number from which to generate the key

dbh_genkey2 ()

void                dbh_genkey2                         (unsigned char *key,
                                                         unsigned char length,
                                                         unsigned int n);

Obtain a key from a secuential series of natural numbers (positive integers without zero) which does not conserve the order of the natural numbers, but which are optimized for construction of a balanced hash tree. These keys are expressed in cuantified numbers based on the A symbol.

key :

The address where to put the generated key

length :

The key length

n :

The natural number from which to generate the key

dbh_orderkey ()

void                dbh_orderkey                        (unsigned char *key,
                                                         unsigned char length,
                                                         unsigned int n,
                                                         unsigned char base);

Obtain a key from a secuential series of natural numbers (positive integers without zero) which conserves the order of the natural numbers. This function generates a key that belongs to a finite subset of the cuantified numbers, but which preserves the order of the natural numbers (up to the supreme, of course)

key :

The address where to put the generated key

length :

The key length

n :

The natural number for which to generate the key

base :

The number system base to use. This will equal the maximum number of nodes per branch. This ---along with the keylength--- will also define a maximum number of records for the DBHashTable

dbh_load ()

FILE_POINTER        dbh_load                            (DBHashTable *dbh);

Load a record using the currently set key. This function will also load erased values, except that it will return 0.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

0 on error, byte offset of loaded record otherwise.

dbh_load_address ()

unsigned char       dbh_load_address                    (DBHashTable *dbh,
                                                         FILE_POINTER currentseek);

Load a record from hash table directly from byte offset currentseek

dbh :

A DBHashTable pointer (DBHashTable *).

currentseek :

A byte offset.

Returns :

0 on error, number of branches otherwise.

dbh_load_parent ()

FILE_POINTER        dbh_load_parent                     (DBHashTable *dbh);

Load the parent of the currently loaded record.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

0 on error, byte offset of loaded record otherwise.

dbh_load_child ()

FILE_POINTER        dbh_load_child                      (DBHashTable *dbh,
                                                         unsigned char key_index);

Load the first child of the currently loaded record, on branch identified by key_index. Since the number of childs (or branches) of each record is variable, this may be tricky. Top level records have DBH_KEYLENGTH branches. Lower level records have less. Each byte of a key represents a branch on top level records.

dbh :

A DBHashTable pointer (DBHashTable *).

key_index :

branch number on which to return the child.

Returns :

0 on error, byte offset of loaded record otherwise.

dbh_regen_sweep ()

DBHashTable *       dbh_regen_sweep                     (DBHashTable *dbh);

Regenerate the DBHashTable, eliminating erased records and optimizing disk access and speed for sweep access. This is done by creating a new DBHashTable where the physical structure matches the logical sweep structure. The temporary directory where the new DBHashTable is created may be set with dbh_settempdir(). Current DBHashTable is closed before removed. New DBHashTable is opened after renamed.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

A pointer to the new DBHashTable.

dbh_regen_fanout ()

DBHashTable *       dbh_regen_fanout                    (DBHashTable *dbh);

Regenerate the DBHashTable, eliminating erased records and optimizing disk access and speed for fanout access. This is done by creating a new DBHashTable where the physical structure matches the logical fanout structure. The temporary directory where the new DBHashTable is created may be set with dbh_settempdir(). Current DBHashTable is closed before removed. New DBHashTable is opened after renamed.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

A pointer to the new DBHashTable.

dbh_settempdir ()

int                 dbh_settempdir                      (DBHashTable *dbh,
                                                         char *temp_dir);

Sets the temporary directory to be used by dbh_regen_sweep() or dbh_regen_fanout(). It is usually best to set temporary directory on the same filesystem device. The default value for the temporary directory is the directory where dbh is located.

dbh :

A DBHashTable pointer (DBHashTable *).

temp_dir :

path to temporary directory to use.

Returns :

0 if error, 1 otherwise

dbh_set_data ()

void                dbh_set_data                        (DBHashTable *dbh,
                                                         void *data,
                                                         FILE_POINTER size);

This function copies the user data into the current DBHashTable record and along with function dbh_set_key(), makes the current DBHashTable record ready for the dbh_update() function to commit to the actual DBHashTable on disk.

dbh :

A DBHashTable pointer (DBHashTable *).

data :

Pointer to the data to copy to the current DBHashTable record

size :

The amount of bytes to copy to the current DBHashTable record

dbh_set_key ()

void                dbh_set_key                         (DBHashTable *dbh,
                                                         unsigned char *key);

This function sets the key of the current DBHashTable record.

dbh :

A DBHashTable pointer (DBHashTable *).

key :

The key to set as the current DBHashTable record key.

dbh_set_size ()

int                 dbh_set_size                        (DBHashTable *dbh,
                                                         FILE_POINTER size);

Defines the maximum amount of memory to be allocated to the DBHashTable records. This is nonvolatile information which need to be set only once. The default is 1Kbyte.

dbh :

A DBHashTable pointer (DBHashTable *).

size :

size in bytes.

Returns :

0 on error, 1 otherwise.

dbh_set_recordsize ()

void                dbh_set_recordsize                  (DBHashTable *dbh,
                                                         int record_size);

This sets the recordsize of the the data in the current DBHashTable record. It is called implicitly by calling dbh_set_data(). It is very important to call this function. Unpredictable results will follow if record_size is not set. DBHashTable records are variable in length, so use this function at least once if you are planning to use fixed length records. This function is not needed if dbh_set_data() is used to set the record data.

dbh :

A DBHashTable pointer (DBHashTable *).

record_size :

The amount of bytes in the current DBHashTable record.

dbh_sweep ()

int                 dbh_sweep                           (DBHashTable *dbh,
                                                         DBHashFunc operate,
                                                         unsigned char *key1,
                                                         unsigned char *key2,
                                                         unsigned char ignore_portion);

Apply a function to subtree members of the hash, following a sweep trajectory (vertically through branches).

In order for dbh_sweep() to be extremely fast, you should prepare the DBHashTable for the trajectory with dbh_regen_sweep() first. This allows for extremely efficient use of hardware and operating system caches.

dbh :

A DBHashTable pointer (DBHashTable *).

operate :

The function to apply to each selected member of the DBHashTable

key1 :

The key from which to start the sweep or NULL if you don't care. Make sure it is a top level node of a subtree with dbh_find() first.

key2 :

The key which will trigger an exit condition from the sweep, or NULL if don't care.

ignore_portion :

The ignored trailing bytes of key1 which will define the magnitud of the subtree to be sweeped, or zero if don't care.

Returns :

0 on error, 1 otherwise.

dbh_fanout ()

int                 dbh_fanout                          (DBHashTable *dbh,
                                                         DBHashFunc operate,
                                                         unsigned char *key1,
                                                         unsigned char *key2,
                                                         unsigned char ignore_portion);

Apply a function to subtree members of the hash, following a fanout trajectory (horizontally through records).

In order for dbh_fanout() to be extremely fast, you should prepare the DBHashTable for the trajectory with dbh_regen_fanout() first. This allows for extremely efficient use of hardware and operating system caches.

dbh :

A DBHashTable pointer (DBHashTable *).

operate :

The function to apply to each selected member of the DBHashTable

key1 :

The key from which to start the fanout or NULL if you don't care. Make sure it is a top level node of a subtree with dbh_find() first.

key2 :

The key which will trigger an exit condition from the sweep, or NULL if don't care.

ignore_portion :

The ignored trailing bytes of key1 which will define the magnitud of the subtree to be sweeped, or zero if don't care.

Returns :

0 on error, 1 otherwise.

dbh_foreach_sweep ()

int                 dbh_foreach_sweep                   (DBHashTable *dbh,
                                                         DBHashFunc operate);

Apply a function to each member of the hash, following a sweep trajectory. Sweep is done by traversing the DBHashTable in a vertical direction through all branches.

In order for dbh_foreach_sweep() to be extremely fast, you should prepare the DBHashTable for the trajectory with dbh_regen_sweep() first. This allows for extremely efficient use of hardware and operating system caches.

dbh :

A DBHashTable pointer (DBHashTable *).

operate :

A DBHashFunc() to execute on all records

Returns :

0 on error, 1 otherwise.

dbh_foreach_fanout ()

int                 dbh_foreach_fanout                  (DBHashTable *dbh,
                                                         DBHashFunc operate);

Apply a function to each member of the hash, following a fanout trajectory (horizontally through records). dbh_foreach_fanout() is done by traversing the DBHashTable in a horizontal direction through all records.

In order for dbh_foreach_fanout() to be extremely fast, you should prepare the DBHashTable for the trajectory with dbh_regen_fanout() first. This allows for extremely efficient use of hardware and operating system caches.

dbh :

A DBHashTable pointer (DBHashTable *).

operate :

A DBHashFunc() to execute on all records

Returns :

0 on error, 1 otherwise.

dbh_exit_sweep ()

void                dbh_exit_sweep                      (DBHashTable *dbh);

Calling this function from within a DBHashFunc will cause an exit of a currently running sweep.

dbh :

A DBHashTable pointer (DBHashTable *).

dbh_exit_fanout ()

void                dbh_exit_fanout                     (DBHashTable *dbh);

Calling this function from within a DBHashFunc will cause an exit of a currently running fanout.

dbh :

A DBHashTable pointer (DBHashTable *).

dbh_update ()

FILE_POINTER        dbh_update                          (DBHashTable *dbh);

Update the current record in memory to the disk based hash. Update function will update erased records as well as unerased records, but if an erased record is updated, it is automatically unerased.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

0 on error, byte offset of loaded record otherwise.

dbh_writeheader ()

int                 dbh_writeheader                     (DBHashTable *dbh);

Write out the DBHashTable header information. It is advisable to call this function inmediately after creation of a new DBHashTable to force a buffer flush.

dbh :

A DBHashTable pointer (DBHashTable *).

Returns :

0 if error, 1 otherwise

See Also

GHashTables