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
00029 #ifndef OSCAP_LIST_
00030 #define OSCAP_LIST_
00031
00032 #include <stdlib.h>
00033 #include <stdbool.h>
00034 #include "util.h"
00035
00036 typedef void(*oscap_dump_func)(void*,int);
00037
00038
00039
00040
00041
00042 struct oscap_list_item {
00043 void* data;
00044 struct oscap_list_item* next;
00045 };
00046
00047 struct oscap_list {
00048 struct oscap_list_item* first;
00049 struct oscap_list_item* last;
00050 size_t itemcount;
00051 };
00052
00053 struct oscap_list* oscap_list_new(void);
00054 bool oscap_list_add(struct oscap_list* list, void* value);
00055 void oscap_list_free(struct oscap_list* list, oscap_destruct_func destructor);
00056 void oscap_list_free0(struct oscap_list* list);
00057 void oscap_list_dump(struct oscap_list* list, oscap_dump_func dumper, int depth);
00058
00059
00060
00061 typedef bool(*oscap_filter_func)(void*,void*);
00062
00063 struct oscap_iterator {
00064 struct oscap_list_item* cur;
00065 oscap_filter_func filter;
00066 void* user_data;
00067 };
00068
00069 void* oscap_iterator_new(struct oscap_list* list);
00070 void* oscap_iterator_new_filter(struct oscap_list* list, oscap_filter_func filter, void* user_data);
00071 void* oscap_iterator_next(struct oscap_iterator* it);
00072 bool oscap_iterator_has_more(struct oscap_iterator* it);
00073 void oscap_iterator_free(struct oscap_iterator* it);
00074
00079 struct oscap_string_iterator;
00081 const char* oscap_string_iterator_next(struct oscap_string_iterator*);
00083 bool oscap_string_iterator_has_more(struct oscap_string_iterator*);
00084
00085
00086
00087
00088
00089
00090 typedef int (*oscap_compare_func)(const char*, const char*);
00091
00092 struct oscap_htable_item {
00093 struct oscap_htable_item* next;
00094 char* key;
00095 void* value;
00096 };
00097
00098
00099 struct oscap_htable {
00100 size_t hsize;
00101 size_t itemcount;
00102 struct oscap_htable_item** table;
00103 oscap_compare_func cmp;
00104 };
00105
00106
00107
00108
00109
00110
00111
00112
00113 struct oscap_htable* oscap_htable_new1(oscap_compare_func cmp, size_t hsize);
00114
00115
00116
00117
00118
00119
00120
00121
00122 struct oscap_htable* oscap_htable_new(void);
00123
00124
00125
00126
00127
00128 bool oscap_htable_add(struct oscap_htable* htable, const char* key, void* item);
00129
00130
00131
00132
00133
00134 void* oscap_htable_get(struct oscap_htable* htable, const char* key);
00135
00136 void oscap_htable_dump(struct oscap_htable* htable, oscap_dump_func dumper, int depth);
00137
00138
00139
00140
00141
00142
00143 void oscap_htable_free(struct oscap_htable* htable, oscap_destruct_func destructor);
00144
00145 void oscap_print_depth(int depth);
00146
00147 #endif
00148
00149