X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=types%2Fenum.c;h=57ecbdd179f484c771fea4b27d95ac597d14233a;hp=21af948bca20b1c26c8fb51133491e25a6425eb9;hb=11796b9629d5a870163e4edd67e457576553aaef;hpb=448d3cc7640830015850cc6287532d4c194fe690 diff --git a/types/enum.c b/types/enum.c index 21af948b..57ecbdd1 100644 --- a/types/enum.c +++ b/types/enum.c @@ -172,39 +172,50 @@ size_t enum_copy(unsigned char *dest, const struct format *fdest, { struct type_class_enum *enum_class = container_of(type_class, struct type_class_enum, p); - struct type_class_bitfield *bitfield_class = &enum_class->p; - struct type_class_integer *int_class = &bitfield_class->p; + struct type_class_integer *int_class = &enum_class->p; GQuark v; v = fsrc->enum_read(src, enum_class) return fdest->enum_write(dest, enum_class, v); } +void enum_type_free(struct type_class_enum *enum_class) +{ + g_hash_table_destroy(enum_class->table.value_to_quark); + g_hash_table_destroy(enum_class->table.quark_to_value); + g_free(enum_class); +} + +static +void _enum_type_free(struct type_class *type_class) +{ + struct type_class_enum *enum_class = + container_of(type_class, struct type_class_enum, p); + enum_type_free(enum_class); +} + struct type_class_enum *enum_type_new(const char *name, - size_t start_offset, size_t len, int byte_order, int signedness, size_t alignment) { - struct type_class_bitfield *bitfield_class; struct type_class_integer *int_class; int ret; - enum_class = g_new(struct type_class_bitfield, 1); - enum_class->table.value_to_quark = g_hash_table(enum_val_hash, - enum_val_equal); + enum_class = g_new(struct type_class_enum, 1); + enum_class->table.value_to_quark = g_hash_table_new(enum_val_hash, + enum_val_equal); enum_class->table.quark_to_value = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, enum_val_free); - bitfield_class = &enum_class->p; - bitfield_class->start_offset = start_offset; - int_class = &bitfield_class->p; + int_class = &enum_class->p; int_class->p.name = g_quark_from_string(name); int_class->p.alignment = alignment; + int_class->p.copy = enum_copy; + int_class->p.free = _enum_type_free; int_class->len = len; int_class->byte_order = byte_order; int_class->signedness = signedness; - bitfield_class->start_offset = start_offset; if (int_class->p.name) { ret = register_type(&int_class->p); if (ret) { @@ -216,10 +227,3 @@ struct type_class_enum *enum_type_new(const char *name, } return enum_class; } - -void enum_type_free(struct type_class_enum *enum_class) -{ - g_hash_table_destroy(enum_class->table.value_to_quark); - g_hash_table_destroy(enum_class->table.quark_to_value); - g_free(enum_class); -}