1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-11-04 08:17:17 -05:00
elinks/src/util/fastfind.h

58 lines
1.5 KiB
C
Raw Normal View History

#ifndef EL__UTIL_FASTFIND_H
#define EL__UTIL_FASTFIND_H
/* Whether to use these routines or not. */
#ifndef CONFIG_SMALL
#define USE_FASTFIND 1
#else
#undef USE_FASTFIND
#endif
#ifdef USE_FASTFIND
struct fastfind_key_value {
unsigned char *key;
void *data;
};
enum fastfind_flags {
FF_NONE = 0,
FF_CASE_AWARE = 1, /* honour case when comparing */
FF_COMPRESS = 2, /* compress nodes if possible */
};
struct fastfind_index {
/* Description useful for debugging mode. */
unsigned char *comment;
/* Start over. */
void (*reset)(void);
/* Get next struct fastfind_key_value in line. */
struct fastfind_key_value *(*next)(void);
/* Internal reference */
void *handle;
};
#define INIT_FASTFIND_INDEX(comment, reset, next) \
{ (comment), (reset), (next) }
/* Initialize and index a list of keys. */
/* Keys are iterated using:
* @index index info
* @flags control case sensitivity, compression */
/* This function must be called once and only once per list. */
/* Failure is not an option, so call it at startup. */
struct fastfind_index *fastfind_index(struct fastfind_index *index, enum fastfind_flags flags);
/* The main reason of all that stuff is here. */
/* Search the index for @key with length @key_len using the
* @index' handle created with fastfind_index(). */
void *fastfind_search(struct fastfind_index *index, unsigned char *key, int key_len);
/* Fastfind cleanup. It frees the index given by the @fastfind_handle. */
/* Must be called once per list. */
void fastfind_done(struct fastfind_index *index);
#endif
#endif /* EL__UTIL_FASTFIND_H */