lib: add internal object pool API and use it; adapt plugins/tests
[babeltrace.git] / include / babeltrace / graph / clock-class-priority-map.h
index 18c27308086e05f09bf7a2486b28e20a9671dfe1..93f05ab83514e7d0f60941fbb0575abd9aab8f4e 100644 (file)
  * http://www.efficios.com/ctf
  */
 
+/* For bt_get() */
+#include <babeltrace/ref.h>
+
 #include <stdint.h>
 #include <stddef.h>
-#include <babeltrace/values.h>
-#include <babeltrace/ctf-ir/clock-class.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+struct bt_clock_class;
+
 /**
 @defgroup graphclockclassprioritymap Clock class priority map
 @ingroup graph
@@ -56,6 +59,16 @@ A priority is a 64-bit unsigned integer. A lower value has a
 \em higher priority. Multiple clock classes can have the same priority
 within a given clock class priority map.
 
+The following functions can \em freeze clock class priority map objects:
+
+- bt_notification_event_create() freezes its clock class priority
+  map parameter.
+- bt_notification_inactivity_create() freezes its clock class priority
+  map parameter.
+
+You cannot modify a frozen clock class priority map object: it is
+considered immutable, except for \link refs reference counting\endlink.
+
 As with any Babeltrace object, clock class priority map objects have
 <a href="https://en.wikipedia.org/wiki/Reference_counting">reference
 counts</a>. See \ref refs to learn more about the reference counting
@@ -83,7 +96,7 @@ struct bt_clock_class_priority_map;
 
 @postsuccessrefcountret1
 */
-extern struct bt_clock_class_priority_map *bt_clock_class_priority_map_create();
+extern struct bt_clock_class_priority_map *bt_clock_class_priority_map_create(void);
 
 /**
 @brief Returns the number of CTF IR clock classes contained in the
@@ -99,9 +112,14 @@ extern struct bt_clock_class_priority_map *bt_clock_class_priority_map_create();
 @prenotnull{clock_class_priority_map}
 @postrefcountsame{clock_class_priority_map}
 */
-extern int bt_clock_class_priority_map_get_clock_class_count(
+extern int64_t bt_clock_class_priority_map_get_clock_class_count(
                struct bt_clock_class_priority_map *clock_class_priority_map);
 
+extern struct bt_clock_class *
+bt_clock_class_priority_map_borrow_clock_class_by_index(
+               struct bt_clock_class_priority_map *clock_class_priority_map,
+               uint64_t index);
+
 /**
 @brief  Returns the CTF IR clock class at index \p index in the clock
        class priority map \p clock_class_priority_map.
@@ -129,9 +147,20 @@ extern int bt_clock_class_priority_map_get_clock_class_count(
 @sa bt_clock_class_priority_map_add_clock_class(): Adds a clock class
        to a clock class priority map.
 */
-extern struct bt_ctf_clock_class *bt_clock_class_priority_map_get_clock_class(
+static inline
+struct bt_clock_class *
+bt_clock_class_priority_map_get_clock_class_by_index(
                struct bt_clock_class_priority_map *clock_class_priority_map,
-               unsigned int index);
+               uint64_t index)
+{
+       return bt_get(bt_clock_class_priority_map_borrow_clock_class_by_index(
+               clock_class_priority_map, index));
+}
+
+extern struct bt_clock_class *
+bt_clock_class_priority_map_borrow_clock_class_by_name(
+               struct bt_clock_class_priority_map *clock_class_priority_map,
+               const char *name);
 
 /**
 @brief  Returns the CTF IR clock class named \c name found in the clock
@@ -151,7 +180,7 @@ extern struct bt_ctf_clock_class *bt_clock_class_priority_map_get_clock_class(
 @postrefcountsame{clock_class_priority_map}
 @postsuccessrefcountretinc
 
-@sa bt_clock_class_priority_map_get_clock_class(): Returns the clock
+@sa bt_clock_class_priority_map_get_clock_class_by_index(): Returns the clock
        class contained in a given clock class priority map at
        a given index.
 @sa bt_clock_class_priority_map_get_highest_priority_clock_class():
@@ -160,10 +189,18 @@ extern struct bt_ctf_clock_class *bt_clock_class_priority_map_get_clock_class(
 @sa bt_clock_class_priority_map_add_clock_class(): Adds a clock class
        to a clock class priority map.
 */
-extern struct bt_ctf_clock_class *
-bt_clock_class_priority_map_get_clock_class_by_name(
+static inline
+struct bt_clock_class *bt_clock_class_priority_map_get_clock_class_by_name(
                struct bt_clock_class_priority_map *clock_class_priority_map,
-               const char *name);
+               const char *name)
+{
+       return bt_get(bt_clock_class_priority_map_borrow_clock_class_by_name(
+               clock_class_priority_map, name));
+}
+
+extern struct bt_clock_class *
+bt_clock_class_priority_map_borrow_highest_priority_clock_class(
+               struct bt_clock_class_priority_map *clock_class_priority_map);
 
 /**
 @brief  Returns the CTF IR clock class with the currently highest
@@ -188,7 +225,7 @@ this function returns.
 @postrefcountsame{clock_class_priority_map}
 @postsuccessrefcountretinc
 
-@sa bt_clock_class_priority_map_get_clock_class(): Returns the clock
+@sa bt_clock_class_priority_map_get_clock_class_by_index(): Returns the clock
        class contained in a given clock class priority map at
        a given index.
 @sa bt_clock_class_priority_map_get_clock_class_by_name(): Finds a
@@ -196,9 +233,15 @@ this function returns.
 @sa bt_clock_class_priority_map_add_clock_class(): Adds a clock class
        to a clock class priority map.
 */
-extern struct bt_ctf_clock_class *
+static inline
+struct bt_clock_class *
 bt_clock_class_priority_map_get_highest_priority_clock_class(
-               struct bt_clock_class_priority_map *clock_class_priority_map);
+               struct bt_clock_class_priority_map *clock_class_priority_map)
+{
+       return bt_get(
+               bt_clock_class_priority_map_borrow_highest_priority_clock_class(
+                       clock_class_priority_map));
+}
 
 /**
 @brief  Returns the priority of the CTF IR clock class \p clock_class
@@ -230,7 +273,7 @@ bt_clock_class_priority_map_get_highest_priority_clock_class(
 */
 extern int bt_clock_class_priority_map_get_clock_class_priority(
                struct bt_clock_class_priority_map *clock_class_priority_map,
-               struct bt_ctf_clock_class *clock_class, uint64_t *priority);
+               struct bt_clock_class *clock_class, uint64_t *priority);
 
 /**
 @brief Adds the CTF IR clock class \p clock_class to the clock class
@@ -256,10 +299,11 @@ map.
 
 @prenotnull{clock_class_priority_map}
 @prenotnull{clock_class}
+@prehot{clock_class_priority_map}
 @postrefcountsame{clock_class_priority_map}
 @postsuccessrefcountinc{clock_class}
 
-@sa bt_clock_class_priority_map_get_clock_class(): Returns the clock
+@sa bt_clock_class_priority_map_get_clock_class_by_index(): Returns the clock
        class contained in a given clock class priority map
        at a given index.
 @sa bt_clock_class_priority_map_get_clock_class_by_name(): Finds a
@@ -267,7 +311,28 @@ map.
 */
 extern int bt_clock_class_priority_map_add_clock_class(
                struct bt_clock_class_priority_map *clock_class_priority_map,
-               struct bt_ctf_clock_class *clock_class, uint64_t priority);
+               struct bt_clock_class *clock_class, uint64_t priority);
+
+/**
+@brief Creates a copy of the clock class priority map
+       \p clock_class_priority_map.
+
+You can copy a frozen clock class priority map: the resulting copy is
+<em>not frozen</em>.
+
+@param[in] clock_class_priority_map    Clock class priority map to copy.
+@returns                               Copy of \p clock_class_priority_map
+                                       on success, or a negative value
+                                       on error.
+
+@prenotnull{clock_class_priority_map}
+@postrefcountsame{clock_class_priority_map}
+@postsuccessrefcountret1
+@post <strong>On success</strong>, the returned clock class priority map
+       is not frozen.
+*/
+extern struct bt_clock_class_priority_map *bt_clock_class_priority_map_copy(
+               struct bt_clock_class_priority_map *clock_class_priority_map);
 
 /** @} */
 
This page took 0.027462 seconds and 4 git commands to generate.