objects: add bt_object_array_set()
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 19 Mar 2015 18:10:41 +0000 (14:10 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 19 Mar 2015 18:11:45 +0000 (14:11 -0400)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/babeltrace/objects.h
lib/objects.c

index 325afe83dfe7fca6e4396000b779863d63525214..f030424f283d6ead079eb999a2af4726746308df 100644 (file)
@@ -651,6 +651,23 @@ extern int bt_object_array_append_array(struct bt_object *array_obj);
  */
 extern int bt_object_array_append_map(struct bt_object *array_obj);
 
+/**
+ * Replaces the element object at index \p index of the array object
+ * \p array_obj by \p element_obj.
+ *
+ * The replaced object's reference count is decremented, unless it's
+ * a null object. The reference count of \p element_obj is incremented,
+ * unless it's a null object.
+ *
+ * @param array_obj    Array object
+ * @param index                Index of element object to replace
+ * @param element_obj  New element object at position \p index of
+ *                     \p array_obj
+ * @returns            0 on success, or a negative value on error
+ */
+extern int bt_object_array_set(struct bt_object *array_obj, size_t index,
+       struct bt_object *element_obj);
+
 /**
  * Gets the size of a map object, that is, the number of elements
  * contained in a map object.
index cd86f976d8032b1ae6ade811c41656ff6b99c583..1439b4d48085374e923427a637067491e9a05e99 100644 (file)
@@ -857,6 +857,27 @@ int bt_object_array_append_map(struct bt_object *array_obj)
        return ret;
 }
 
+int bt_object_array_set(struct bt_object *array_obj, size_t index,
+       struct bt_object *element_obj)
+{
+       int ret = 0;
+       struct bt_object_array *typed_array_obj =
+               BT_OBJECT_TO_ARRAY(array_obj);
+
+       if (!array_obj || !bt_object_is_array(array_obj) || !element_obj ||
+                       index >= typed_array_obj->garray->len) {
+               ret = -1;
+               goto end;
+       }
+
+       bt_object_put(g_ptr_array_index(typed_array_obj->garray, index));
+       g_ptr_array_index(typed_array_obj->garray, index) = element_obj;
+       bt_object_get(element_obj);
+
+end:
+       return ret;
+}
+
 int bt_object_map_size(const struct bt_object *map_obj)
 {
        int ret;
This page took 0.025979 seconds and 4 git commands to generate.