Remove Babeltrace 1 files and reorganize the tree
[babeltrace.git] / lib / values.c
index 18ee1c5eb165a4c28098b13b10ffa5d3a0e71b5a..1c7902bd73ea10b6c688841ad7dd08f635f20dde 100644 (file)
@@ -51,6 +51,14 @@ struct bt_value {
 
 static
 struct bt_value bt_value_null_instance = {
+       .base = {
+               .ref_count = {
+                       .count = 1,
+                       .release = NULL,
+               },
+               .release = NULL,
+               .parent = NULL,
+       },
        .type = BT_VALUE_TYPE_NULL,
        .is_frozen = true,
 };
@@ -226,7 +234,7 @@ struct bt_value *bt_value_map_copy(const struct bt_value *map_obj)
        g_hash_table_iter_init(&iter, typed_map_obj->ght);
 
        while (g_hash_table_iter_next(&iter, &key, &element_obj)) {
-               const char *key_str = g_quark_to_string((unsigned long) key);
+               const char *key_str = g_quark_to_string(GPOINTER_TO_UINT(key));
 
                element_obj_copy = bt_value_copy(element_obj);
 
@@ -357,7 +365,7 @@ bool bt_value_map_compare(const struct bt_value *object_a,
 
        while (g_hash_table_iter_next(&iter, &key, &element_obj_a)) {
                struct bt_value *element_obj_b;
-               const char *key_str = g_quark_to_string((unsigned long) key);
+               const char *key_str = g_quark_to_string(GPOINTER_TO_UINT(key));
 
                element_obj_b = bt_value_map_get(object_b, key_str);
 
@@ -606,7 +614,7 @@ struct bt_value *bt_value_array_create(void)
        }
 
        array_obj->base = bt_value_create_base(BT_VALUE_TYPE_ARRAY);
-       array_obj->garray = babeltrace_g_ptr_array_new_full(0,
+       array_obj->garray = bt_g_ptr_array_new_full(0,
                (GDestroyNotify) bt_put);
 
        if (!array_obj->garray) {
@@ -644,7 +652,7 @@ end:
 }
 
 enum bt_value_status bt_value_bool_get(const struct bt_value *bool_obj,
-       bool *val)
+               bool *val)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_bool *typed_bool_obj = BT_VALUE_TO_BOOL(bool_obj);
@@ -682,7 +690,7 @@ end:
 }
 
 enum bt_value_status bt_value_integer_get(const struct bt_value *integer_obj,
-       int64_t *val)
+               int64_t *val)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_integer *typed_integer_obj =
@@ -700,7 +708,7 @@ end:
 }
 
 enum bt_value_status bt_value_integer_set(struct bt_value *integer_obj,
-       int64_t val)
+               int64_t val)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_integer *typed_integer_obj =
@@ -723,7 +731,7 @@ end:
 }
 
 enum bt_value_status bt_value_float_get(const struct bt_value *float_obj,
-       double *val)
+               double *val)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_float *typed_float_obj =
@@ -741,7 +749,7 @@ end:
 }
 
 enum bt_value_status bt_value_float_set(struct bt_value *float_obj,
-       double val)
+               double val)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_float *typed_float_obj =
@@ -764,7 +772,7 @@ end:
 }
 
 enum bt_value_status bt_value_string_get(const struct bt_value *string_obj,
-       const char **val)
+               const char **val)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_string *typed_string_obj =
@@ -782,7 +790,7 @@ end:
 }
 
 enum bt_value_status bt_value_string_set(struct bt_value *string_obj,
-       const char *val)
+               const char *val)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_string *typed_string_obj =
@@ -827,7 +835,7 @@ bool bt_value_array_is_empty(const struct bt_value *array_obj)
 }
 
 struct bt_value *bt_value_array_get(const struct bt_value *array_obj,
-       size_t index)
+               size_t index)
 {
        struct bt_value *ret;
        struct bt_value_array *typed_array_obj =
@@ -847,7 +855,7 @@ end:
 }
 
 enum bt_value_status bt_value_array_append(struct bt_value *array_obj,
-       struct bt_value *element_obj)
+               struct bt_value *element_obj)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_array *typed_array_obj =
@@ -871,7 +879,7 @@ end:
 }
 
 enum bt_value_status bt_value_array_append_bool(struct bt_value *array_obj,
-       bool val)
+               bool val)
 {
        enum bt_value_status ret;
        struct bt_value *bool_obj = NULL;
@@ -884,7 +892,7 @@ enum bt_value_status bt_value_array_append_bool(struct bt_value *array_obj,
 }
 
 enum bt_value_status bt_value_array_append_integer(
-       struct bt_value *array_obj, int64_t val)
+               struct bt_value *array_obj, int64_t val)
 {
        enum bt_value_status ret;
        struct bt_value *integer_obj = NULL;
@@ -897,7 +905,7 @@ enum bt_value_status bt_value_array_append_integer(
 }
 
 enum bt_value_status bt_value_array_append_float(struct bt_value *array_obj,
-       double val)
+               double val)
 {
        enum bt_value_status ret;
        struct bt_value *float_obj = NULL;
@@ -910,7 +918,7 @@ enum bt_value_status bt_value_array_append_float(struct bt_value *array_obj,
 }
 
 enum bt_value_status bt_value_array_append_string(struct bt_value *array_obj,
-       const char *val)
+               const char *val)
 {
        enum bt_value_status ret;
        struct bt_value *string_obj = NULL;
@@ -923,7 +931,7 @@ enum bt_value_status bt_value_array_append_string(struct bt_value *array_obj,
 }
 
 enum bt_value_status bt_value_array_append_empty_array(
-       struct bt_value *array_obj)
+               struct bt_value *array_obj)
 {
        enum bt_value_status ret;
        struct bt_value *empty_array_obj = NULL;
@@ -948,7 +956,7 @@ enum bt_value_status bt_value_array_append_empty_map(struct bt_value *array_obj)
 }
 
 enum bt_value_status bt_value_array_set(struct bt_value *array_obj,
-       size_t index, struct bt_value *element_obj)
+               size_t index, struct bt_value *element_obj)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        struct bt_value_array *typed_array_obj =
@@ -995,7 +1003,7 @@ bool bt_value_map_is_empty(const struct bt_value *map_obj)
 }
 
 struct bt_value *bt_value_map_get(const struct bt_value *map_obj,
-       const char *key)
+               const char *key)
 {
        GQuark quark;
        struct bt_value *ret;
@@ -1029,7 +1037,7 @@ bool bt_value_map_has_key(const struct bt_value *map_obj, const char *key)
        }
 
        quark = g_quark_from_string(key);
-       ret = babeltrace_g_hash_table_contains(typed_map_obj->ght,
+       ret = bt_g_hash_table_contains(typed_map_obj->ght,
                GUINT_TO_POINTER(quark));
 
 end:
@@ -1037,7 +1045,7 @@ end:
 }
 
 enum bt_value_status bt_value_map_insert(struct bt_value *map_obj,
-       const char *key, struct bt_value *element_obj)
+               const char *key, struct bt_value *element_obj)
 {
        GQuark quark;
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
@@ -1063,7 +1071,7 @@ end:
 }
 
 enum bt_value_status bt_value_map_insert_bool(struct bt_value *map_obj,
-       const char *key, bool val)
+               const char *key, bool val)
 {
        enum bt_value_status ret;
        struct bt_value *bool_obj = NULL;
@@ -1076,7 +1084,7 @@ enum bt_value_status bt_value_map_insert_bool(struct bt_value *map_obj,
 }
 
 enum bt_value_status bt_value_map_insert_integer(struct bt_value *map_obj,
-       const char *key, int64_t val)
+               const char *key, int64_t val)
 {
        enum bt_value_status ret;
        struct bt_value *integer_obj = NULL;
@@ -1089,7 +1097,7 @@ enum bt_value_status bt_value_map_insert_integer(struct bt_value *map_obj,
 }
 
 enum bt_value_status bt_value_map_insert_float(struct bt_value *map_obj,
-       const char *key, double val)
+               const char *key, double val)
 {
        enum bt_value_status ret;
        struct bt_value *float_obj = NULL;
@@ -1102,7 +1110,7 @@ enum bt_value_status bt_value_map_insert_float(struct bt_value *map_obj,
 }
 
 enum bt_value_status bt_value_map_insert_string(struct bt_value *map_obj,
-       const char *key, const char *val)
+               const char *key, const char *val)
 {
        enum bt_value_status ret;
        struct bt_value *string_obj = NULL;
@@ -1115,7 +1123,7 @@ enum bt_value_status bt_value_map_insert_string(struct bt_value *map_obj,
 }
 
 enum bt_value_status bt_value_map_insert_empty_array(struct bt_value *map_obj,
-       const char *key)
+               const char *key)
 {
        enum bt_value_status ret;
        struct bt_value *array_obj = NULL;
@@ -1128,7 +1136,7 @@ enum bt_value_status bt_value_map_insert_empty_array(struct bt_value *map_obj,
 }
 
 enum bt_value_status bt_value_map_insert_empty_map(struct bt_value *map_obj,
-       const char *key)
+               const char *key)
 {
        enum bt_value_status ret;
        struct bt_value *empty_map_obj = NULL;
@@ -1141,7 +1149,7 @@ enum bt_value_status bt_value_map_insert_empty_map(struct bt_value *map_obj,
 }
 
 enum bt_value_status bt_value_map_foreach(const struct bt_value *map_obj,
-       bt_value_map_foreach_cb cb, void *data)
+               bt_value_map_foreach_cb cb, void *data)
 {
        enum bt_value_status ret = BT_VALUE_STATUS_OK;
        gpointer key, element_obj;
@@ -1156,7 +1164,7 @@ enum bt_value_status bt_value_map_foreach(const struct bt_value *map_obj,
        g_hash_table_iter_init(&iter, typed_map_obj->ght);
 
        while (g_hash_table_iter_next(&iter, &key, &element_obj)) {
-               const char *key_str = g_quark_to_string((unsigned long) key);
+               const char *key_str = g_quark_to_string(GPOINTER_TO_UINT(key));
 
                if (!cb(key_str, element_obj, data)) {
                        ret = BT_VALUE_STATUS_CANCELLED;
@@ -1168,6 +1176,81 @@ end:
        return ret;
 }
 
+struct extend_map_element_data {
+       struct bt_value *extended_obj;
+       bool got_error;
+};
+
+static
+bool extend_map_element(const char *key,
+               struct bt_value *extension_obj_elem, void *data)
+{
+       bool ret = true;
+
+       struct extend_map_element_data *extend_data = data;
+
+       /* Copy object which is to replace the current one */
+       struct bt_value *extension_obj_elem_copy =
+               bt_value_copy(extension_obj_elem);
+
+       /* Replace in extended object */
+       if (bt_value_map_insert(extend_data->extended_obj, key,
+                       extension_obj_elem_copy)) {
+               goto error;
+       }
+
+       goto end;
+
+error:
+       ret = false;
+       extend_data->got_error = true;
+
+end:
+       BT_PUT(extension_obj_elem_copy);
+
+       return ret;
+}
+
+struct bt_value *bt_value_map_extend(struct bt_value *base_map_obj,
+               struct bt_value *extension_obj)
+{
+       struct bt_value *extended_obj = NULL;
+       struct extend_map_element_data extend_data = { 0 };
+
+       if (!bt_value_is_map(base_map_obj) || !bt_value_is_map(extension_obj)) {
+               goto error;
+       }
+
+       /* Create copy of base map object to start with */
+       extended_obj = bt_value_copy(base_map_obj);
+       if (!extended_obj) {
+               goto error;
+       }
+
+       /*
+        * For each key in the extension map object, replace this key
+        * in the copied map object.
+        */
+       extend_data.extended_obj = extended_obj;
+
+       if (bt_value_map_foreach(extension_obj, extend_map_element,
+                       &extend_data)) {
+               goto error;
+       }
+
+       if (extend_data.got_error) {
+               goto error;
+       }
+
+       goto end;
+
+error:
+       BT_PUT(extended_obj);
+
+end:
+       return extended_obj;
+}
+
 struct bt_value *bt_value_copy(const struct bt_value *object)
 {
        struct bt_value *copy_obj = NULL;
This page took 0.031962 seconds and 4 git commands to generate.