00001
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __UTILS_H
00020 #define __UTILS_H
00021
00022 #include <time.h>
00023 #include <sys/types.h>
00024
00025
00029
00030
00036 typedef struct s_mem_pool {
00037 unsigned long len;
00038 unsigned long reserved;
00039 void *content;
00040 } t_mem_pool;
00041
00047 void mem_init(t_mem_pool *pool);
00048
00054 void mem_cleanup(t_mem_pool *pool);
00055
00064 size_t mem_set(t_mem_pool *pool,const void *src,size_t length);
00065
00075 void *mem_append(t_mem_pool *pool,const void *src,size_t len);
00076
00077
00078
00079
00080
00084
00085
00091 typedef struct s_string {
00092 unsigned long len;
00093 unsigned long reserved;
00094 u_char *content;
00095 } t_string;
00096
00102 void str_init(t_string *str);
00103
00109 void str_cleanup(t_string *str);
00110
00118 size_t str_char_append(t_string *str,const u_char content);
00119
00128 size_t str_chars_append(t_string *str,const u_char *content,size_t length);
00129
00137 size_t str_str_append(t_string *str,t_string *content);
00138
00148 size_t str_char_set(t_string *str,const u_char *content,size_t length);
00149
00158 size_t str_str_set(t_string *str,t_string *content);
00159
00167 int str_equal_string(const t_string *str1,const t_string *str2);
00168
00177 int str_equal_chars(const t_string *str1,const u_char *str2, size_t len);
00178
00179
00180
00181
00182
00192 size_t split(const u_char *big,const u_char *small,u_char ***ulist);
00193
00200 time_t transform_date(const u_char *datestr);
00201
00209 int gen_unid(u_char *buff,int maxlen);
00210
00219 void *fo_alloc(void *ptr,size_t nmemb,size_t size,int type);
00220
00221 #define FO_ALLOC_MALLOC 0
00222 #define FO_ALLOC_CALLOC 1
00223 #define FO_ALLOC_REALLOC 2
00225 #ifdef NOSTRDUP
00226
00232 u_char *strdup(const u_char *str);
00233 #endif
00234
00235 #ifdef NOSTRNDUP
00236
00243 u_char *strndup(const u_char *str,size_t len);
00244 #endif
00245
00246 #ifdef HAS_NO_GETLINE
00247
00254 ssize_t getline(char **lineptr,size_t *n,FILE *stream);
00255 #endif
00256
00257 #ifdef HAS_NO_GETDELIM
00258
00266 ssize_t getdelim(char **lineptr,size_t *n,int delim,FILE *stream);
00267 #endif
00268
00276 void *memdup(void *inptr,size_t size);
00277
00278
00279
00283
00284
00290 typedef struct s_array {
00291 size_t elements,
00292 reserved,
00293 element_size;
00295 void (*array_destroy)(void *);
00296 void *array;
00297 } t_array;
00298
00299
00307 void array_init(t_array *ary,size_t element_size,void (*array_destroy)(void *));
00308
00317 void array_push(t_array *ary,const void *element);
00318
00326 void *array_pop(t_array *ary);
00327
00335 void *array_shift(t_array *ary);
00336
00343 void array_unshift(t_array *ary,const void *element);
00344
00351 void array_sort(t_array *ary,int(*compar)(const void *,const void *));
00352
00361 void *array_bsearch(t_array *ary,const void *key,int (*compar)(const void *, const void *));
00362
00370 void *array_element_at(t_array *ary,size_t index);
00371
00378 void array_destroy(t_array *ary);
00379
00380
00381
00382
00383
00384
00388
00389
00394 typedef struct s_cf_dataset {
00395 void *data;
00396 void *key;
00397 } t_cf_tree_dataset;
00398
00405 enum e_cf_tree_balance {
00406 CF_TREE_NONE,
00407 CF_TREE_LEFT,
00408 CF_TREE_RIGHT
00409 };
00410
00415 typedef struct s_cf_tree_node {
00416 struct s_cf_tree_node *left,
00417 *right;
00419 t_cf_tree_dataset *d;
00421 enum e_cf_tree_balance bal;
00422 } t_cf_tree_node;
00423
00428 typedef struct s_cf_tree {
00434 int (*compare)(t_cf_tree_dataset *,t_cf_tree_dataset *);
00435
00439 void (*destroy)(t_cf_tree_dataset *);
00440
00441 t_cf_tree_node *root;
00442 } t_cf_tree;
00443
00451 void cf_tree_init(t_cf_tree *tree,int (*compare)(t_cf_tree_dataset *,t_cf_tree_dataset *),void (*destroy)(t_cf_tree_dataset *));
00452
00458 void cf_tree_destroy(t_cf_tree *tree);
00459
00468 int cf_tree_insert(t_cf_tree *tree,t_cf_tree_node **n, t_cf_tree_dataset *d);
00469
00478 int cf_tree_remove(t_cf_tree *tree,t_cf_tree_node **n, t_cf_tree_dataset *key);
00479
00488 const t_cf_tree_dataset *cf_tree_find(t_cf_tree *tree,t_cf_tree_node *n, t_cf_tree_dataset *key);
00489
00490
00491
00492
00493
00494
00501 int cf_strcmp(const u_char *str1,const u_char *str2);
00502
00510 int cf_strncmp(const u_char *str1,const u_char *str2,size_t n);
00511
00518 int cf_strcasecmp(const u_char *str1,const u_char *str2);
00519
00527 int cf_strncasecmp(const u_char *str1,const u_char *str2,size_t n);
00528
00535 size_t cf_strlen_utf8(const u_char *str,size_t rlen);
00536
00537
00538
00539 #endif
00540
00541
00542