Zrythm v2.0.0-alpha.1
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
object_registry.h
1// SPDX-FileCopyrightText: © 2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3#pragma once
4
5#include <memory>
6
7#include "utils/iobject_registry.h"
8
9namespace zrythm::utils
10{
11
19class ObjectRegistry : public QObject, public utils::IObjectRegistry
20{
21 Q_OBJECT
22
23public:
24 ObjectRegistry (QObject * parent = nullptr);
25 ~ObjectRegistry () override;
26
27 [[gnu::hot]] utils::UuidIdentifiableBase *
28 find_by_raw_uuid_or_throw (const QUuid &id) const;
29
30 int ref_count (const QUuid &id) const;
31
32protected:
33 void delete_object_by_id (const QUuid &id);
34
35private:
36 using ObjectVisitor = utils::IObjectRegistry::ObjectVisitor;
37
38 void register_object_impl (utils::UuidIdentifiableBase &obj) override;
39 void acquire_reference_impl (const QUuid &id) override;
40 void release_reference_impl (const QUuid &id) override;
41
42 [[gnu::hot]] utils::UuidIdentifiableBase *
43 find_by_raw_uuid_impl (const QUuid &id) const override;
44
45 bool contains_impl (const QUuid &id) const override;
46
47 void
48 for_each_matching_impl (const QMetaObject &meta_type, ObjectVisitor visitor)
49 const override;
50
51 struct Impl;
52 bool destroying_ = false;
53 std::unique_ptr<Impl> impl_;
54};
55
56} // namespace zrythm::utils
Abstract interface for a UUID-keyed object registry.
QObject-based base for all UUID-identifiable objects.
String utilities.