nfs-ganesha 1.4

nodelist.h

Go to the documentation of this file.
00001 #ifndef _NODELIST_H
00002 #define _NODELIST_H
00003 
00004 /* define a macro that make an advanced free on pointer */
00005 #define xfree(a) \
00006 if(a!=NULL){ \
00007   free(a); \
00008   a=NULL; \
00009 }
00010 
00018 typedef struct nodelist_range
00019 {
00020   long int from;                
00023   long int to;                  
00026 } nodelist_range_t;
00037 int nodelist_range_set(nodelist_range_t * r1, long int v1, long int v2);
00048 int nodelist_range_check(nodelist_range_t * r1);
00061 int nodelist_range_compare(nodelist_range_t * r1, nodelist_range_t * r2);
00073 int nodelist_range_intersects(nodelist_range_t * r1, nodelist_range_t * r2);
00085 int
00086 nodelist_range_intersection(nodelist_range_t * r1, nodelist_range_t * r2,
00087                             nodelist_range_t * r3);
00099 int nodelist_range_contiguous(nodelist_range_t * r1, nodelist_range_t * r2);
00112 int nodelist_range_includes(nodelist_range_t * r1, nodelist_range_t * r2);
00126 int
00127 nodelist_range_union(nodelist_range_t * r1, nodelist_range_t * r2,
00128                      nodelist_range_t * rout);
00140 typedef struct nodelist_rangelist
00141 {
00142 
00143   long int ranges_nb;           
00146   nodelist_range_t *array;      
00150   size_t pre_allocated_ranges;  
00154 } nodelist_rangelist_t;
00164 int nodelist_rangelist_init(nodelist_rangelist_t * array);
00174 int nodelist_rangelist_init_by_copy(nodelist_rangelist_t * array,
00175                                     nodelist_rangelist_t * a2c);
00185 int nodelist_rangelist_free_contents(nodelist_rangelist_t * array);
00195 int nodelist_rangelist_incremente_size(nodelist_rangelist_t * array);
00208 int nodelist_rangelist_add_range(nodelist_rangelist_t * array, nodelist_range_t * r);
00221 int nodelist_rangelist_add_list(nodelist_rangelist_t * array, char *list);
00231 int nodelist_rangelist_sort(nodelist_rangelist_t * array);
00243 typedef struct nodelist_idlist
00244 {
00245 
00246   long int id_nb;
00247 
00248   nodelist_rangelist_t rangelist;       
00251 } nodelist_idlist_t;
00263 int nodelist_idlist_init(nodelist_idlist_t * idlist, char **lists, int lists_nb);
00273 int nodelist_idlist_free_contents(nodelist_idlist_t * idlist);
00284 int nodelist_idlist_add_ids(nodelist_idlist_t * idlist, char *list);
00293 long int nodelist_idlist_ids_quantity(nodelist_idlist_t * idlist);
00304 int nodelist_idlist_get_extended_string(nodelist_idlist_t * idlist, char **p_string);
00315 int nodelist_idlist_get_compacted_string(nodelist_idlist_t * idlist, char **p_string);
00328 typedef struct nodelist_nodepattern
00329 {
00330   int padding;                  
00331   char *prefix;                 
00332   char *suffix;                 
00333   int basic;                    
00334 } nodelist_nodepattern_t;
00346 int nodelist_nodepattern_init(nodelist_nodepattern_t * np);
00359 int
00360 nodelist_nodepattern_init_by_copy(nodelist_nodepattern_t * np,
00361                                   nodelist_nodepattern_t * npin);
00370 int nodelist_nodepattern_free_contents(nodelist_nodepattern_t * np);
00380 int nodelist_nodepattern_set_padding(nodelist_nodepattern_t * np, int padding);
00390 int nodelist_nodepattern_set_prefix(nodelist_nodepattern_t * np, char *prefix);
00400 int nodelist_nodepattern_set_suffix(nodelist_nodepattern_t * np, char *suffix);
00409 int nodelist_nodepattern_set_basic(nodelist_nodepattern_t * np);
00418 int nodelist_nodepattern_unset_basic(nodelist_nodepattern_t * np);
00428 int
00429 nodelist_nodepattern_equals(nodelist_nodepattern_t * np1, nodelist_nodepattern_t * np2);
00441 typedef struct nodelist_nodelist
00442 {
00443   nodelist_nodepattern_t pattern;       
00446   nodelist_rangelist_t rangelist;       
00449   struct nodelist_nodelist *next;       
00453 } nodelist_nodelist_t;
00465 int nodelist_nodelist_init(nodelist_nodelist_t * nodelist, char **lists, int lists_nb);
00475 int nodelist_nodelist_free_contents(nodelist_nodelist_t * nodelist);
00486 int nodelist_nodelist_add_nodes(nodelist_nodelist_t * nodelist, char *list);
00499 #define VERSUS_OPERATION_INCLUDE         1
00500 #define VERSUS_OPERATION_INTERSECT       2
00501 int
00502 nodelist_nodelist_versus_second_list(nodelist_nodelist_t * nodelist,
00503                                      nodelist_nodelist_t * second_list, int operation);
00512 long int nodelist_nodelist_nodes_quantity(nodelist_nodelist_t * nodelist);
00523 int
00524 nodelist_nodelist_get_extended_string(nodelist_nodelist_t * nodelist, char **p_string);
00535 int
00536 nodelist_nodelist_get_compacted_string(nodelist_nodelist_t * nodelist, char **p_string);
00537 
00548 int nodelist_common_condensed2extended_nodelist(char *src_list, char **p_dst_list);
00549 
00560 int nodelist_common_extended2condensed_nodelist(char *src_list, char **p_dst_list);
00576 int
00577 nodelist_common_string_get_tokens_quantity(char *string, char *separators_list,
00578                                            int *p_token_nb);
00579 
00592 int nodelist_common_string_get_token(char *string, char *separators_list, int token_id,
00593                                      char **p_token);
00594 
00608 int
00609 nodelist_common_string_appends_and_extends(char **p_io_string, size_t * p_current_length,
00610                                            size_t inc_length, char *string2append,
00611                                            char *separator);
00612 
00613 #endif