+
+struct lttng_tracker_ids *lttng_tracker_ids_create(unsigned int count)
+{
+ struct lttng_tracker_ids *ids = NULL;
+
+ ids = zmalloc(sizeof(*ids));
+ if (!ids) {
+ goto error;
+ }
+
+ ids->id_array = zmalloc(sizeof(struct lttng_tracker_id) * count);
+ if (!ids->id_array) {
+ goto error;
+ }
+
+ ids->count = count;
+
+ return ids;
+error:
+ free(ids);
+ return NULL;
+}
+
+LTTNG_HIDDEN
+struct lttng_tracker_id *lttng_tracker_ids_get_pointer_of_index(
+ const struct lttng_tracker_ids *ids, unsigned int index)
+{
+ assert(ids);
+ if (index >= ids->count) {
+ return NULL;
+ }
+
+ return &ids->id_array[index];
+}
+
+const struct lttng_tracker_id *lttng_tracker_ids_get_at_index(
+ const struct lttng_tracker_ids *ids, unsigned int index)
+{
+ assert(ids);
+ return lttng_tracker_ids_get_pointer_of_index(ids, index);
+}
+
+int lttng_tracker_ids_get_count(const struct lttng_tracker_ids *ids)
+{
+ assert(ids);
+ return ids->count;
+}
+
+void lttng_tracker_ids_destroy(struct lttng_tracker_ids *ids)
+{
+ if (!ids) {
+ return;
+ }
+
+ for (int i = 0; i < ids->count; i++) {
+ lttng_tracker_id_reset(&ids->id_array[i]);
+ }
+ free(ids->id_array);
+ free(ids);
+}