mie: add name_map to generate unique value names
This commit is contained in:
42
mie/include/mie/name.h
Normal file
42
mie/include/mie/name.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef MIE_NAME_H_
|
||||
#define MIE_NAME_H_
|
||||
|
||||
#include <blue/core/btree.h>
|
||||
#include <blue/core/queue.h>
|
||||
|
||||
enum mie_name_map_entry_type {
|
||||
MIE_NAME_MAP_E_NONE = 0,
|
||||
MIE_NAME_MAP_E_NAME,
|
||||
MIE_NAME_MAP_E_BUCKET,
|
||||
};
|
||||
|
||||
struct mie_name_map_entry {
|
||||
enum mie_name_map_entry_type e_type;
|
||||
uint64_t e_hash;
|
||||
union {
|
||||
b_queue_entry e_entry;
|
||||
b_btree_node e_node;
|
||||
};
|
||||
};
|
||||
|
||||
struct mie_name {
|
||||
struct mie_name_map_entry n_base;
|
||||
char *n_str;
|
||||
};
|
||||
|
||||
struct mie_name_bucket {
|
||||
struct mie_name_map_entry b_base;
|
||||
b_queue b_names;
|
||||
};
|
||||
|
||||
struct mie_name_map {
|
||||
b_btree m_entries;
|
||||
};
|
||||
|
||||
extern struct mie_name_map *mie_name_map_create(void);
|
||||
extern void mie_name_map_destroy(struct mie_name_map *map);
|
||||
|
||||
extern struct mie_name *mie_name_map_put(
|
||||
struct mie_name_map *map, struct mie_name *entry, const char *hint);
|
||||
|
||||
#endif
|
||||
@@ -3,6 +3,9 @@
|
||||
|
||||
#include <blue/core/queue.h>
|
||||
#include <mie/misc.h>
|
||||
#include <mie/name.h>
|
||||
|
||||
#define MIE_VALUE(p) ((struct mie_value *)(p))
|
||||
|
||||
enum mie_value_type {
|
||||
MIE_VALUE_NONE = 0,
|
||||
@@ -14,13 +17,20 @@ enum mie_value_type {
|
||||
MIE_VALUE_RECORD,
|
||||
};
|
||||
|
||||
enum mie_value_flags {
|
||||
MIE_VALUE_F_NONE = 0x00u,
|
||||
MIE_VALUE_F_STATIC = 0x01u,
|
||||
};
|
||||
|
||||
struct mie_value {
|
||||
unsigned int v_ref;
|
||||
char *v_name;
|
||||
struct mie_name v_name;
|
||||
enum mie_value_type v_type;
|
||||
enum mie_value_flags v_flags;
|
||||
b_queue_entry v_entry;
|
||||
};
|
||||
|
||||
MIE_API void mie_value_init(struct mie_value *val, enum mie_value_type type);
|
||||
MIE_API struct mie_value *mie_value_retain(struct mie_value *val);
|
||||
MIE_API void mie_value_release(struct mie_value *val);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user