Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

utils.h

Go to the documentation of this file.
00001 
00010 /* {{{ Initial headers */
00011 /*
00012  * $LastChangedDate: 2004-04-01 18:34:17 +0200 (Thu, 01 Apr 2004) $
00013  * $LastChangedRevision: 50 $
00014  * $LastChangedBy: ckruse $
00015  *
00016  */
00017 /* }}} */
00018 
00019 #ifndef __UTILS_H
00020 #define __UTILS_H
00021 
00022 #include <time.h>
00023 #include <sys/types.h>
00024 
00025 /* {{{ Memory abstraction */
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 /* {{{ String abstraction */
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 /* {{{ Utility functions */
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 /* {{{ Array abstraction */
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 /* {{{ Tree abstraction */
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 /* {{{ String comparison functions */
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 /* eof */
00542 

Generated on Sun Apr 25 16:37:39 2004 for Classic Forum by doxygen 1.3.5