%% options copyright owner = Dirk Krause copyright year = 2015-xxxx license = bsd %% header /** @file dk4dbit.h Text (dkChar) in database. */ #ifndef DK4DBI_H_INCLUDED #include #endif #ifndef DK4DBIT8_H_INCLUDED #include #endif #ifndef DK4DBITW_H_INCLUDED #include #endif #if DK4_CHAR_SIZE > 1 /** Function to traverse text database. */ typedef dk4dbi_wc_traverse_fct_t dk4dbi_text_traverse_fct; #else /** Function to traverse text database. */ typedef dk4dbi_c8_traverse_fct_t dk4dbi_text_traverse_fct; #endif #ifdef __cplusplus extern "C" { #endif /** Set text entry. @param db Database to modify. @param k Key text. @param v Value text. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if db, k or vis NULL, - DK4_E_SYNTAX
if the database was opened read-only or k or v is too long. - DK4_E_MATH_OVERFLOW
on numeric overflow in size calculation, - DK4_E_NOT_SUPPORTED
if db indicates an unsupported backend, - DK4_E_NOT_FOUND
if no record to delete was found, - DK4_E_MEMORY_ALLOCATION_FAILED
with mem.elsize and mem.nelem set if there is not enough memory available, - DK4_E_WRITE_FAILED
if modification of the database failed. */ int dk4dbi_text_set( dk4_dbi_t *db, const dkChar *k, const dkChar *v, dk4_er_t *erp ); /** Retrieve text entry. @param db Database to query. @param k Key text. @param vbuf Result buffer address. @param vsz Pointer to size variable (in: size, out: used), number of dkChar. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if db, k or vbufis NULL or vsz is 0, or the length of k exceeds the key size limit, - DK4_E_MATH_OVERFLOW
on numeric overflow in size calculation, - DK4_E_NOT_SUPPORTED
if db indicates an unsupported backend, - DK4_E_NOT_FOUND
if no record was found for the key, - DK4_E_BUFFER_TOO_SMALL
if the destination buffer is too small. */ int dk4dbi_text_get( dk4_dbi_t *db, const dkChar *k, dkChar *vbuf, size_t vsz, dk4_er_t *erp ); /** Delete text entry. @param db Database to modify. @param k Key text. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if db or k is NULL, - DK4_E_SYNTAX
if the database is opened read-only or the length of k exceeds the key size limit, - DK4_E_MATH_OVERFLOW
on numeric overflow in size calculation, - DK4_E_NOT_SUPPORTED
if db indicates an unsupported backend, - DK4_E_WRITE_FAILED
if modification of the database failed, - DK4_E_NOT_FOUND
if no record for the specified key is in the database. */ int dk4dbi_text_del( dk4_dbi_t *db, const dkChar *k, dk4_er_t *erp ); /** Traverse database, apply function to all text entries. @param db Database to traverse. @param obj Object to modify during traversal. @param fct Function to apply to all text entries. @return 1 on success, 0 on error (database traversed), -1 on error (traversal aborted). */ int dk4dbi_text_traverse( dk4_dbi_t *db, void *obj, dk4dbi_text_traverse_fct *fct ); #ifdef __cplusplus } #endif %% module #include "dk4conf.h" #include "dk4dbit8.h" #include "dk4dbitw.h" #include "dk4dbit.h" $!trace-include int dk4dbi_text_set( dk4_dbi_t *db, const dkChar *k, const dkChar *v, dk4_er_t *erp ) { #if DK4_CHAR_SIZE > 1 return (dk4dbi_wc_set(db, k, v, erp)); #else return (dk4dbi_c8_set(db, k, v, erp)); #endif } int dk4dbi_text_get( dk4_dbi_t *db, const dkChar *k, dkChar *vbuf, size_t vsz, dk4_er_t *erp ) { #if DK4_CHAR_SIZE > 1 return (dk4dbi_wc_get(db, k, vbuf, vsz, erp)); #else return (dk4dbi_c8_get(db, k, vbuf, vsz, erp)); #endif } int dk4dbi_text_del( dk4_dbi_t *db, const dkChar *k, dk4_er_t *erp ) { #if DK4_CHAR_SIZE > 1 return (dk4dbi_wc_del(db, k, erp)); #else return (dk4dbi_c8_del(db, k, erp)); #endif } int dk4dbi_text_traverse( dk4_dbi_t *db, void *obj, dk4dbi_text_traverse_fct *fct ) { #if DK4_CHAR_SIZE > 1 return (dk4dbi_wc_traverse(db, obj, fct)); #else return (dk4dbi_c8_traverse(db, obj, fct)); #endif }