- 论坛徽章:
- 0
|
/**
* db_list.h : public header for application
*/
#ifndef DB_LIST_H
#define DB_LIST_H
/**
* type defines
*/
typedef enum
{
FALSE,
TRUE
} bool_t;
typedef enum
{
DBL_NORMAL, /* normal operation */
DBL_EMEM, /* malloc error */
DBL_ZERO_INFO, /* sizeof(Info) is zero */
DBL_NULL_LIST, /* list is NULL */
DBL_NOT_FOUND, /* record not found */
DBL_EOPEN, /* can not open file */
DBL_EWRITE, /* file write error */
DBL_EREAD, /* file read error */
DBL_NOT_MODIFIED, /* unmodified list */
DBL_NULL_FUNCTION /* NULL function pointer */
} return_t;
typedef enum
{
DBL_ORIGIN_DEFAULT, /* use current origin setting */
DBL_HEAD, /* set origin to head pointer */
DBL_CURRENT, /* set origin to current pointer */
DBL_TAIL, /* set origin to tail pointer */
} search_origin;
typedef enum
{
DBL_DIRECTION_DEFAULT, /* use current directino setting */
DBL_DOWN, /* set direction to down */
DBL_UP /* set direction to up */
} search_direction;
typedef enum
{
DBL_INSERT_DEFAULT, /* use current pointerition for insert */
DBL_BEFORE, /* insert new node before current node */
DBL_AFTER /* insert new node after current node */
} insert_direction;
/**
* Basic structures
*/
typedef struct node
{
void *info;
struct node *next;
struct node *prev;
} node_t;
typedef struct list
{
node_t *head;
node_t *tail;
node_t *current;
node_t *saved;
size_t info_size;
uint64_t list_size;
uint64_t current_index;
uint64_t save_index;
bool_t modified;
search_origin srch_ori;
search_direction srch_dir;
} list_t
typedef struct search_mode
{
search_origin srch_ori;
search_direction srch_dir;
} srch_mode_t;
/**
* Prototypes
*/
/* Initialization routines */
list_t *create_list(list_t **list);
return_t init_list(list_t *list, size_t info_size);
void destroy_list(list_t **list);
/* Status and state routines */
bool_t is_empty(list_t *list);
bool_t is_full(list_t *list);
uint64_t get_current_index(list_t *list);
uint64_t get_record_counter(list_t *list);
srch_mode_t get_srch_mode(list_t *list, srch_mode_t *mode);
return_t set_srch_mode(list_t *list, search_origin origin,
search_direction direct);
/* Pointer manipulation routines */
return_t current_pointer_to_head(list_t *list);
return_t current_pointer_to_tail(list_t *list);
return_t increment_current_pointer(list_t *list);
return_t decrement_current_pointer(list_t *list);
return_t save_current_pointer(list_t *list);
return_t restore_current_pointer(list_t *list);
/* List update routines */
return_t add_node(list_t *list, void *info,
int (*func)(void *, void *));
return_t insert_record(list_t *list, void *info, insert_direction direct);
return_t swap_record(list_t *list, insert_direction direct);
return_t update_current_record(list_t *list, void *record);
return_t del_current_node(list_t *list);
return_t remove_list(list_t *list);
/* List search routines */
return_t find_record(list_t, void *record, void *match,
int (*func)(void *, void *));
return_t find_nth_record(list_t *list, void *record, uint64_t nRec);
return_t get_current_record(list_t *list, void *record);
return_t get_next_record(list_t *list Info *record);
return_t get_prev_record(list_t *list,Info *record);
/* Input/Output routines */
return_t import_list(list_t *list, const char *path,
int (*func)(void *, void *));
return_t export_list(list_t *list, const char *path);
#endif /* DB_LIST_H */ |
[ 本帖最后由 wangdan1600 于 2009-7-4 09:11 编辑 ] |
|