diff options
Diffstat (limited to 'deps/utable/utable.h')
| -rw-r--r-- | deps/utable/utable.h | 116 |
1 files changed, 87 insertions, 29 deletions
diff --git a/deps/utable/utable.h b/deps/utable/utable.h index 13dfa5c..0ba974a 100644 --- a/deps/utable/utable.h +++ b/deps/utable/utable.h @@ -8,49 +8,83 @@ extern "C" { #endif -struct utable_stat +/*********************************** + * utable_kv * + ***********************************/ + +enum utable_value_type { - size_t n_item; - size_t n_item_size; - size_t n_blob; - size_t n_blob_size; - size_t n_cstring; - size_t n_cstring_size; - size_t n_integer; - size_t n_integer_size; - size_t n_integer_array; - size_t n_integer_array_size; - size_t n_cstring_array; - size_t n_cstring_array_size; + utable_value_type_undefined = 0, + utable_value_type_cstring, + utable_value_type_blob, + utable_value_type_integer, + utable_value_type_integer_array, + utable_value_type_cstring_array +}; + +struct utable_kv { + char *key; + size_t key_sz; + enum utable_value_type value_type; + size_t value_sz; + union { + struct + { + char *cstring; + size_t cstring_sz; + }; + struct + { + char *blob; + size_t blob_sz; + }; + struct + { + int64_t *interger_array; + size_t n_integer; + }; + struct + { + char **cstring_array; + size_t *cstring_array_sz; + size_t n_cstring; + }; + int64_t integer; + }; }; +struct utable_kv *utable_kv_new_with_cstring(const char *key, size_t key_sz, const char *value, size_t value_sz); +struct utable_kv *utable_kv_new_with_blob(const char *key, size_t key_sz, const char *blob, size_t blob_sz); +struct utable_kv *utable_kv_new_with_integer(const char *key, size_t key_sz, int64_t value); +struct utable_kv *utable_kv_new_with_integer_array(const char *key, size_t key_sz, int64_t value[], size_t n_value); +struct utable_kv *utable_kv_new_with_cstring_array(const char *key, size_t key_sz, const char* value[], size_t value_sz[], size_t n_value); + +void utable_kv_free(struct utable_kv *kv); +struct utable_kv *utable_kv_duplicate(const struct utable_kv *kv); + + +/*********************************** + * utable API * + ***********************************/ + struct utable; struct utable *utable_new(void); struct utable *utable_new_with_size(size_t sz); void utable_free(struct utable *table); +void utable_add_kv(struct utable *table, struct utable_kv *kv); +void utable_add_kv_array(struct utable *table, struct utable_kv *kv_array, size_t n_kv); - - - -void utable_stat(struct utable *table, struct utable_stat *stat); +struct utable_kv *utable_get0_kv(struct utable *table, const char *key, size_t key_sz); +struct utable_kv *utable_next_kv(struct utable *table); void utable_add_cstring(struct utable *table, const char *key, const char *value, size_t value_sz); void utable_add_blob(struct utable *table, const char *key, const char *blob, size_t blob_sz); void utable_add_integer(struct utable *table, const char *key, int64_t value); void utable_add_integer_array(struct utable *table, const char *key, int64_t value_array[], size_t n_value); void utable_add_cstring_array(struct utable *table, const char *key, const char* value_array[], size_t value_sz[], size_t n_value); -void utable_delete_item(struct utable *table, const char *key); +void utable_delete(struct utable *table, const char *key, size_t key_sz); -enum utable_value_type -{ - utable_value_type_undefined=0, - utable_value_type_cstring, - utable_value_type_blob, - utable_value_type_integer, - utable_value_type_integer_array, - utable_value_type_cstring_array -}; void utable_reset_iter(struct utable *table); const char *utable_next_key(struct utable *table); @@ -62,13 +96,37 @@ int utable_get0_integer_value_array(const struct utable *table, const char *key, int utable_get0_cstring_value_array(const struct utable *table, const char *key, char ***value_array, size_t **value_len, size_t *n_value); struct utable *utable_duplicate(const struct utable *table); -int utable_merge(struct utable *dst, const struct utable *src); +int utable_union(struct utable *dst, const struct utable *src); void utable_serialize(const struct utable *table, char **blob, size_t *blob_len); struct utable *utable_deserialize(const char *blob, size_t blob_len); +struct utable_stat +{ + size_t n_item; + size_t n_item_size; + size_t n_blob; + size_t n_blob_size; + size_t n_cstring; + size_t n_cstring_size; + size_t n_integer; + size_t n_integer_size; + size_t n_integer_array; + size_t n_integer_array_size; + size_t n_cstring_array; + size_t n_cstring_array_size; +}; + +void utable_stat(struct utable *table, struct utable_stat *stat); + +/*********************************** + * utable exporter API * + ***********************************/ + struct ipfix_exporter_schema; -struct ipfix_exporter_schema *utable_ipfix_exporter_schema_new(const char *ipfix_schema_json_path, uint16_t domain_id, uint16_t n_worker); // |domain_id|work_id|=source_id (16+16) domain_id 是进程唯一标识 + +// |domain_id|work_id|=source_id (16+16) domain_id is identifier of exporter instance +struct ipfix_exporter_schema *utable_ipfix_exporter_schema_new(const char *ipfix_schema_json_path, uint16_t domain_id, uint16_t n_worker); void utable_ipfix_exporter_schema_free(struct ipfix_exporter_schema *ipfix_schema); uint32_t utable_ipfix_template_flow_refresh_interval_s(struct ipfix_exporter_schema *ipfix_schema); |
