00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00027 #ifndef GLOBUS_LIST_H
00028 #define GLOBUS_LIST_H
00029
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033
00044 typedef struct globus_list
00045 {
00046 void * volatile datum;
00047 struct globus_list * volatile next;
00048 int malloced;
00049 } globus_list_t;
00050
00068 typedef int (*globus_list_pred_t) (void *datum, void *arg);
00069
00091 typedef int (*globus_list_relation_t) (void *low_datum, void *high_datum,
00092 void *relation_arg);
00093 int
00094 globus_i_list_pre_activate(void);
00095
00096 extern int
00097 globus_list_int_less (void * low_datum, void * high_datum,
00098 void * ignored);
00099
00100 extern int
00101 globus_list_empty (globus_list_t * head);
00102
00103 globus_list_t *
00104 globus_list_concat(
00105 globus_list_t * front_list,
00106 globus_list_t * back_list);
00107
00108 extern void *
00109 globus_list_first (globus_list_t * head);
00110
00111 extern globus_list_t *
00112 globus_list_rest (globus_list_t * head);
00113
00114 extern globus_list_t **
00115 globus_list_rest_ref (globus_list_t * head);
00116
00117 extern int
00118 globus_list_size (globus_list_t * head);
00119
00120 extern void *
00121 globus_list_replace_first (globus_list_t * head, void *datum);
00122
00123 extern globus_list_t *
00124 globus_list_search (globus_list_t * head, void * datum);
00125
00126 extern globus_list_t *
00127 globus_list_search_pred (globus_list_t * head,
00128 globus_list_pred_t predicate,
00129 void * pred_args);
00130
00131 extern globus_list_t *
00132 globus_list_min (globus_list_t * head,
00133 globus_list_relation_t relation,
00134 void * relation_args);
00135
00136 extern globus_list_t *
00137 globus_list_sort_destructive (globus_list_t * head,
00138 globus_list_relation_t relation,
00139 void *relation_args);
00140
00141 extern void
00142 globus_list_halves_destructive (globus_list_t * head,
00143 globus_list_t * volatile * left_halfp,
00144 globus_list_t * volatile * right_halfp);
00145
00146 extern globus_list_t *
00147 globus_list_sort_merge_destructive (globus_list_t *left,
00148 globus_list_t *right,
00149 globus_list_relation_t relation,
00150 void * relation_args);
00151
00152 extern globus_list_t *
00153 globus_list_sort (globus_list_t *head,
00154 globus_list_relation_t relation,
00155 void *relation_args);
00156
00157 extern int
00158 globus_list_insert (globus_list_t * volatile *headp, void *datum);
00159
00160 extern globus_list_t *
00161 globus_list_cons (void * datum, globus_list_t *list);
00162
00163 extern globus_list_t *
00164 globus_list_copy (globus_list_t *head);
00165
00166 extern void *
00167 globus_list_remove (globus_list_t * volatile *headp, globus_list_t *entry);
00168
00169 extern void
00170 globus_list_free (globus_list_t *head);
00171
00172 void globus_list_destroy_all(
00173 globus_list_t * head,
00174 void (*data_free)(void *));
00175
00176 extern globus_list_t *
00177 globus_list_from_string(
00178 const char * in_string,
00179 int delim,
00180 const char * ignored);
00181
00182 #ifdef __cplusplus
00183 }
00184 #endif
00185
00186 #endif