00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef OSCAP_LIST_
00029 #define OSCAP_LIST_
00030
00031 #include <stdlib.h>
00032 #include <stdbool.h>
00033
00034 #include "util.h"
00035 #include "public/oscap.h"
00036
00037 OSCAP_HIDDEN_START;
00038
00039
00040 typedef void (*oscap_dump_func) ();
00041
00042 typedef bool (*oscap_cmp_func) (void *, void *);
00043
00044
00045
00046
00047
00048 struct oscap_list_item {
00049 void *data;
00050 struct oscap_list_item *next;
00051 };
00052
00053 struct oscap_list {
00054 struct oscap_list_item *first;
00055 struct oscap_list_item *last;
00056 size_t itemcount;
00057 };
00058
00059 struct oscap_list *oscap_list_new(void);
00060 void oscap_create_lists(struct oscap_list **first, ...);
00061 bool oscap_list_add(struct oscap_list *list, void *value);
00062 bool oscap_list_push(struct oscap_list *list, void *value);
00063 bool oscap_list_pop(struct oscap_list *list, oscap_destruct_func destructor);
00064 struct oscap_list *oscap_list_clone(const struct oscap_list * list, oscap_clone_func cloner);
00065 void oscap_list_free(struct oscap_list *list, oscap_destruct_func destructor);
00066 void oscap_list_free0(struct oscap_list *list);
00067 void oscap_list_dump(struct oscap_list *list, oscap_dump_func dumper, int depth);
00068 int oscap_list_get_itemcount(struct oscap_list *list);
00069 bool oscap_list_contains(struct oscap_list *list, void *what, oscap_cmp_func compare);
00070 struct oscap_list *oscap_list_destructive_join(struct oscap_list *list1, struct oscap_list *list2);
00071
00072
00073
00074
00075 typedef bool(*oscap_filter_func) (void *, void *);
00076
00077 struct oscap_iterator {
00078 struct oscap_list_item *cur;
00079 struct oscap_list *list;
00080 oscap_filter_func filter;
00081 void *user_data;
00082 };
00083
00084 void *oscap_iterator_new(struct oscap_list *list);
00085 void *oscap_iterator_new_filter(struct oscap_list *list, oscap_filter_func filter, void *user_data);
00086 void *oscap_iterator_next(struct oscap_iterator *it);
00087 size_t oscap_iterator_get_itemcount(const struct oscap_iterator *it);
00088 bool oscap_iterator_has_more(struct oscap_iterator *it);
00089 void oscap_iterator_reset(struct oscap_iterator *it);
00090 void *oscap_iterator_detach(struct oscap_iterator *it);
00091 void oscap_iterator_free(struct oscap_iterator *it);
00092
00093 void *oscap_list_find(struct oscap_list *list, void *what, oscap_cmp_func compare);
00094
00095
00096
00097
00098
00099
00100 typedef int (*oscap_compare_func) (const char *, const char *);
00101
00102 struct oscap_htable_item {
00103 struct oscap_htable_item *next;
00104 char *key;
00105 void *value;
00106 };
00107
00108
00109 struct oscap_htable {
00110 size_t hsize;
00111 size_t itemcount;
00112 struct oscap_htable_item **table;
00113 oscap_compare_func cmp;
00114 };
00115
00116
00117
00118
00119
00120
00121
00122
00123 struct oscap_htable *oscap_htable_new1(oscap_compare_func cmp, size_t hsize);
00124
00125
00126
00127
00128
00129
00130
00131
00132 struct oscap_htable *oscap_htable_new(void);
00133
00134
00135
00136
00137
00138
00139 struct oscap_htable * oscap_htable_clone(const struct oscap_htable * table, oscap_clone_func cloner);
00140
00141
00142
00143
00144
00145 bool oscap_htable_add(struct oscap_htable *htable, const char *key, void *item);
00146
00147
00148
00149
00150
00151 void *oscap_htable_get(struct oscap_htable *htable, const char *key);
00152
00153 void *oscap_htable_detach(struct oscap_htable *htable, const char *key);
00154
00155 void oscap_htable_dump(struct oscap_htable *htable, oscap_dump_func dumper, int depth);
00156
00157
00158
00159
00160
00161
00162 void oscap_htable_free(struct oscap_htable *htable, oscap_destruct_func destructor);
00163
00164 void oscap_print_depth(int depth);
00165
00166 OSCAP_HIDDEN_END;
00167
00168 #endif