00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00028 #ifndef OSCAP_UTIL_H_
00029 #define OSCAP_UTIL_H_
00030
00031 #include "alloc.h"
00032
00036 typedef void(*oscap_destruct_func)(void*);
00037
00041 typedef void(*oscap_consumer_func)(void*, void*);
00042
00053 #define OSCAP_GENERIC_GETTER_CONV(RTYPE,CONV,SNAME,MNAME,MEXP) \
00054 RTYPE SNAME##_get_##MNAME(const struct SNAME* item) { return (CONV(item->MEXP)); }
00055
00064 #define OSCAP_GENERIC_GETTER(RTYPE,SNAME,MNAME,MEXP) \
00065 OSCAP_GENERIC_GETTER_CONV(RTYPE,,SNAME,MNAME,MEXP)
00066
00075 #define OSCAP_GENERIC_GETTER_FORCE(RTYPE,SNAME,MNAME,MEXP) \
00076 OSCAP_GENERIC_GETTER_CONV(RTYPE,(RTYPE),SNAME,MNAME,MEXP)
00077
00087 #define OSCAP_GETTER_FORCE(RTYPE,SNAME,MNAME) \
00088 OSCAP_GENERIC_GETTER_FORCE(RTYPE,SNAME,MNAME,MNAME)
00089
00099 #define OSCAP_GETTER(RTYPE,SNAME,MNAME) \
00100 OSCAP_GENERIC_GETTER(RTYPE,SNAME,MNAME,MNAME)
00101
00102
00103
00104 #define ITERATOR_CAST(x) ((struct oscap_iterator*)(x))
00105 #define OSCAP_ITERATOR(n) struct n##_iterator*
00106 #define OSCAP_ITERATOR_FWD(n) struct n##_iterator;
00107 #define OSCAP_ITERATOR_HAS_MORE(n) bool n##_iterator_has_more(OSCAP_ITERATOR(n) it) { return oscap_iterator_has_more(ITERATOR_CAST(it)); }
00108 #define OSCAP_ITERATOR_NEXT(t,n) t n##_iterator_next(OSCAP_ITERATOR(n) it) { return oscap_iterator_next(ITERATOR_CAST(it)); }
00109 #define OSCAP_ITERATOR_FREE(n) void n##_iterator_free(OSCAP_ITERATOR(n) it) { oscap_iterator_free(ITERATOR_CAST(it)); }
00110 #define OSCAP_ITERATOR_GEN_T(t,n) OSCAP_ITERATOR_FWD(n) OSCAP_ITERATOR_HAS_MORE(n) OSCAP_ITERATOR_NEXT(t,n) OSCAP_ITERATOR_FREE(n)
00111 #define OSCAP_ITERATOR_GEN(n) OSCAP_ITERATOR_GEN_T(struct n*,n)
00112
00122 #define OSCAP_IGETTER_CONV(ITYPE,SNAME,MNAME,CONV) \
00123 struct ITYPE##_iterator* SNAME##_get_##MNAME(const struct SNAME* item) \
00124 { return oscap_iterator_new((CONV(item))->MNAME); }
00125
00126
00135 #define OSCAP_IGETTER(ITYPE,SNAME,MNAME) OSCAP_IGETTER_CONV(ITYPE,SNAME,MNAME,)
00136
00142 #define OSCAP_IGETTER_GEN(ITYPE,SNAME,MNAME) OSCAP_IGETTER(ITYPE,SNAME,MNAME) OSCAP_ITERATOR_GEN(ITYPE)
00143
00153 #define OSCAP_HGETTER_EXP(RTYPE,SNAME,MNAME,MEXP) \
00154 RTYPE SNAME##_get_##MNAME(const struct SNAME* item, const char* key) \
00155 { return oscap_htable_get(item->MEXP, key); }
00156
00165 #define OSCAP_HGETTER(RTYPE,SNAME,MNAME) OSCAP_HGETTER_EXP(RTYPE,SNAME,MNAME,MNAME)
00166
00167
00176 #define OSCAP_HGETTER_STRUCT(RTYPE,SNAME,MNAME) OSCAP_HGETTER_EXP(struct RTYPE*,SNAME,MNAME,MNAME)
00177
00178
00186 struct oscap_string_map {
00187 int value;
00188 const char* string;
00189 };
00190
00197 int oscap_string_to_enum(const struct oscap_string_map* map, const char* str);
00198
00205 const char* oscap_enum_to_string(const struct oscap_string_map* map, int val);
00206
00207
00208 #endif // OSCAP_UTIL_H_
00209