nfs-ganesha 1.4
|
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