Zrythm v2.0.0-alpha.1
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
registry_utils.h
1// SPDX-FileCopyrightText: © 2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3#pragma once
4
5#include "utils/iobject_registry.h"
6#include "utils/qt.h"
7#include "utils/typed_uuid_reference.h"
8#include "utils/uuid_identifiable_object.h"
9
10namespace zrythm::utils
11{
12
13template <UuidIdentifiable T, typename... Args>
14[[nodiscard]] auto
15create_object (IObjectRegistry &registry, Args &&... args)
16{
17 auto obj = make_qobject_unique<T> (std::forward<Args> (args)...);
18 auto uuid = obj->get_uuid ();
19 registry.register_object (*obj);
20 obj.release ();
21 return TypedUuidReference<T> (uuid, registry);
22}
23
24template <UuidIdentifiable T>
25[[nodiscard]] auto
26clone_object (
27 const T &source,
28 IObjectRegistry &registry,
29 ObjectCloneType clone_type,
30 auto &&... extra_args)
31{
32 auto cloned =
33 std::unique_ptr<T> (clone_raw_ptr (source, clone_type, extra_args...));
34 auto uuid = cloned->get_uuid ();
35 registry.register_object (*cloned);
36 cloned.release ();
37 return TypedUuidReference<T> (uuid, registry);
38}
39
40template <UuidIdentifiable T>
41T &
42get_typed (
43 IObjectRegistry &registry,
44 const typename UuidIdentifiableObject<T>::Uuid &id)
45{
46 auto * typed =
47 qobject_cast<T *> (registry.find_by_raw_uuid (type_safe::get (id)));
48 assert (typed != nullptr);
49 return *typed;
50}
51
52template <UuidType T>
53bool
54contains (IObjectRegistry &registry, const T &id)
55{
56 return registry.contains (type_safe::get (id));
57}
58
59} // namespace zrythm::utils
Abstract interface for a UUID-keyed object registry.
Typed, reference-counted UUID reference into an IObjectRegistry.
Concept: T has a UUID identity from a UuidIdentifiableObject hierarchy.
String utilities.