Standardize *get_*_count() functions
[babeltrace.git] / lib / graph / clock-class-priority-map.c
index f9055198ab0249b86a1fa3c7ef5432e0f08a8a78..98e72522121a8b3f2d7d241e56c6dfb44a85d892 100644 (file)
@@ -82,16 +82,16 @@ end:
        return cc_prio_map;
 }
 
-int bt_clock_class_priority_map_get_clock_class_count(
+int64_t bt_clock_class_priority_map_get_clock_class_count(
                struct bt_clock_class_priority_map *cc_prio_map)
 {
-       int ret = -1;
+       int64_t ret = -1;
 
        if (!cc_prio_map) {
                goto end;
        }
 
-       ret = (int) cc_prio_map->entries->len;
+       ret = (int64_t) cc_prio_map->entries->len;
 
 end:
        return ret;
@@ -229,17 +229,17 @@ int bt_clock_class_priority_map_add_clock_class(
 
        // FIXME when available: check
        // bt_ctf_clock_class_is_valid(clock_class)
-       if (!cc_prio_map) {
+       if (!cc_prio_map || !clock_class || cc_prio_map->frozen) {
                ret = -1;
                goto end;
        }
 
-       /* Check for duplicate clock classes */
+       /* Check for existing clock class */
        prio_ptr = g_hash_table_lookup(cc_prio_map->prios, clock_class);
        if (prio_ptr) {
+               *prio_ptr = priority;
                prio_ptr = NULL;
-               ret = -1;
-               goto end;
+               goto set_highest_prio;
        }
 
        prio_ptr = g_new(uint64_t, 1);
@@ -253,6 +253,8 @@ int bt_clock_class_priority_map_add_clock_class(
        g_ptr_array_add(cc_prio_map->entries, clock_class);
        g_hash_table_insert(cc_prio_map->prios, clock_class, prio_ptr);
        prio_ptr = NULL;
+
+set_highest_prio:
        cc_prio = bt_ctf_clock_class_priority_map_current_highest_prio(
                cc_prio_map);
        assert(cc_prio.clock_class);
@@ -265,3 +267,37 @@ end:
 
        return ret;
 }
+
+struct bt_clock_class_priority_map *bt_clock_class_priority_map_copy(
+               struct bt_clock_class_priority_map *orig_cc_prio_map)
+{
+       struct bt_clock_class_priority_map *cc_prio_map;
+       size_t i;
+
+       cc_prio_map = bt_clock_class_priority_map_create();
+       if (!cc_prio_map) {
+               goto error;
+       }
+
+       for (i = 0; i < orig_cc_prio_map->entries->len; i++) {
+               struct bt_ctf_clock_class *clock_class =
+                       g_ptr_array_index(orig_cc_prio_map->entries, i);
+               uint64_t *prio = g_hash_table_lookup(orig_cc_prio_map->prios,
+                       clock_class);
+               int ret = bt_clock_class_priority_map_add_clock_class(
+                       cc_prio_map, clock_class, *prio);
+
+               if (ret) {
+                       goto error;
+               }
+       }
+
+       cc_prio_map->highest_prio_cc = orig_cc_prio_map->highest_prio_cc;
+       goto end;
+
+error:
+       BT_PUT(cc_prio_map);
+
+end:
+       return cc_prio_map;
+}
This page took 0.024504 seconds and 4 git commands to generate.