Я хочу определить API, который принимает пару (тип, значение) и выполняет с ними некоторые операции.
typedef enum {
TTL_ENTRY = 1,
ACCESS_ENTRY = 2
}type_t;
typedef struct {
type_t type;
uint32 value;
}type_val_t;
int entries_add(size_t count, type_val_t *type_val);
Каждый тип имеет свой диапазон возможных значений.
Значением TTL_ENTRY может быть uint32 с любым значением.
Значение ACCESS_ENTRY должно принимать только значения из перечисления:
typedef enum {
STATE_NONE = 0,
STATE_DROP,
STATE_PATH
/* ... */
}state_t;
Есть ли способ сделать этот API более понятным, какое значение должно быть сопряжено с каким типом? Или как-то связать тип значения для каждого типа из type_t?
Я думал, что преобразование типа значения из uint32 в объединение возможных значений, например так:
typedef union {
uint32 ttl_bitmap;
state_t state;
}value_t;
typedef struct {
type_t type;
value_t value;
}type_val_t;
Но даже при использовании этого Для типа не ясно на 100%, какое значение должно быть связано с каким типом.