11#ifndef __VALUE_STRING_H__
12#define __VALUE_STRING_H__
16#include "ws_symbol_export.h"
40 #define foo_VALUE_STRING_LIST(XXX) \
41 XXX( FOO_A, 1, "aaa" ) \
42 XXX( FOO_B, 3, "bbb" )
45 VALUE_STRING_ENUM(foo);
49 VALUE_STRING_ARRAY(foo);
52 VALUE_STRING_ARRAY_GLOBAL_DEF(foo);
53 VALUE_STRING_ARRAY_GLOBAL_DCL(foo);
56 #define bar_VALUE_STRING_LIST(XXX) \
60 VALUE_STRING_ENUM2(bar);
61 VALUE_STRING_ARRAY2(bar);
66#define VALUE_STRING_ENUM( array_name) _VS_ENUM_XXX( array_name, _VS_ENUM_ENTRY)
67#define VALUE_STRING_ARRAY( array_name) _VS_ARRAY_SC_XXX(array_name, _VS_ARRAY_ENTRY, static)
68#define VALUE_STRING_ARRAY_GLOBAL_DEF( array_name) _VS_ARRAY_XXX(array_name, _VS_ARRAY_ENTRY)
69#define VALUE_STRING_ARRAY_GLOBAL_DCL( array_name) _VS_ARRAY_SC_TYPE_NAME(array_name, extern)
71#define VALUE_STRING_ENUM2( array_name) _VS_ENUM_XXX( array_name, _VS_ENUM_ENTRY2)
72#define VALUE_STRING_ARRAY2( array_name) _VS_ARRAY_SC_XXX(array_name, _VS_ARRAY_ENTRY2, static)
73#define VALUE_STRING_ARRAY2_GLOBAL_DEF( array_name) _VS_ARRAY_XXX(array_name, _VS_ARRAY_ENTRY2)
74#define VALUE_STRING_ARRAY2_GLOBAL_DCL( array_name) _VS_ARRAY_SC_TYPE_NAME(array_name, extern)
77#define _VS_ENUM_XXX(array_name, macro) \
79 array_name##_VALUE_STRING_LIST(macro) \
80 _##array_name##_ENUM_DUMMY = 0 \
83#define _VS_ARRAY_SC_XXX(array_name, macro, sc) \
84 _VS_ARRAY_SC_TYPE_NAME(array_name, sc) = { \
85 array_name##_VALUE_STRING_LIST(macro) \
89#define _VS_ARRAY_XXX(array_name, macro) \
90 _VS_ARRAY_TYPE_NAME(array_name) = { \
91 array_name##_VALUE_STRING_LIST(macro) \
95#define _VS_ARRAY_SC_TYPE_NAME(array_name, sc) sc const value_string array_name[]
96#define _VS_ARRAY_TYPE_NAME(array_name) const value_string array_name[]
98#define _VS_ENUM_ENTRY( name, value, string) name = value,
99#define _VS_ARRAY_ENTRY(name, value, string) { value, string },
101#define _VS_ENUM_ENTRY2( name, value) name = value,
102#define _VS_ARRAY_ENTRY2(name, value) { value, #name },
112val_to_str_const(
const uint32_t val,
const value_string *vs,
const char *unknown_str);
116try_val_to_str(
const uint32_t val,
const value_string *vs);
120try_val_to_str_idx(
const uint32_t val,
const value_string *vs,
int *idx);
136val64_to_str_const(
const uint64_t val,
const val64_string *vs,
const char *unknown_str);
140try_val64_to_str(
const uint64_t val,
const val64_string *vs);
144try_val64_to_str_idx(
const uint64_t val,
const val64_string *vs,
int *idx);
150str_to_val(
const char *val,
const value_string *vs,
const uint32_t err_val);
162 _value_string_match2_t _vs_match2;
163 uint32_t _vs_first_value;
164 unsigned _vs_num_entries;
167 const char *_vs_name;
171#define VALUE_STRING_EXT_VS_P(x) (x)->_vs_p
172#define VALUE_STRING_EXT_VS_NUM_ENTRIES(x) (x)->_vs_num_entries
173#define VALUE_STRING_EXT_VS_NAME(x) (x)->_vs_name
178#define VALUE_STRING_EXT_INIT(x) { _try_val_to_str_ext_init, 0, G_N_ELEMENTS(x)-1, x, #x, NULL }
195val_to_str_ext_const(
const uint32_t val,
value_string_ext *vs,
const char *unknown_str);
211 _val64_string_match2_t _vs_match2;
212 uint64_t _vs_first_value;
213 unsigned _vs_num_entries;
216 const char *_vs_name;
220#define VAL64_STRING_EXT_VS_P(x) (x)->_vs_p
221#define VAL64_STRING_EXT_VS_NUM_ENTRIES(x) (x)->_vs_num_entries
222#define VAL64_STRING_EXT_VS_NAME(x) (x)->_vs_name
226value_str_value_compare(
const void* a,
const void* b);
231#define VAL64_STRING_EXT_INIT(x) { _try_val64_to_str_ext_init, 0, G_N_ELEMENTS(x)-1, x, #x, NULL }
248val64_to_str_ext_const(
const uint64_t val,
val64_string_ext *vs,
const char *unknown_str);
256try_val64_to_str_idx_ext(
const uint64_t val,
val64_string_ext *vse,
int *idx);
276try_str_to_str_idx(
const char *val,
const string_string *vs,
int *idx);
293rval_to_str_const(
const uint32_t val,
const range_string *rs,
const char *unknown_str);
297try_rval_to_str(
const uint32_t val,
const range_string *rs);
301try_rval_to_str_idx(
const uint32_t val,
const range_string *rs,
int *idx);
305try_rval64_to_str(
const uint64_t val,
const range_string *rs);
309try_rval64_to_str_idx(
const uint64_t val,
const range_string *rs,
int *idx);
325 const uint8_t *value;
326 const size_t value_length;
337try_bytesval_to_str(
const uint8_t *val,
const size_t val_len,
const bytes_string *bs);
346try_bytesprefix_to_str(
const uint8_t *haystack,
const size_t haystack_len,
const bytes_string *bs);
349void register_external_value_string(
const char* name,
const value_string* vs);
352value_string* get_external_value_string(
const char* name);
355void register_external_value_string_ext(
const char* name,
const value_string_ext* vse);
363void value_string_externals_init(
void);
366void value_string_externals_cleanup(
void);
Definition value_string.h:324
Definition value_string.h:280
Definition value_string.h:260
Definition value_string.h:313
Definition value_string.h:210
Definition value_string.h:124
Definition value_string.h:161
Definition value_string.h:26
Definition wmem_allocator.h:27