summaryrefslogtreecommitdiffstats
path: root/common/adaptorfactoryregistry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/adaptorfactoryregistry.cpp')
-rw-r--r--common/adaptorfactoryregistry.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/common/adaptorfactoryregistry.cpp b/common/adaptorfactoryregistry.cpp
new file mode 100644
index 0000000..323a02d
--- /dev/null
+++ b/common/adaptorfactoryregistry.cpp
@@ -0,0 +1,68 @@
1/*
2 * Copyright (C) 2016 Christian Mollekopf <chrigi_1@fastmail.fm>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) version 3, or any
8 * later version accepted by the membership of KDE e.V. (or its
9 * successor approved by the membership of KDE e.V.), which shall
10 * act as a proxy defined in Section 6 of version 3 of the license.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
19 */
20#include "adaptorfactoryregistry.h"
21
22#include <QByteArray>
23#include <QDebug>
24#include <QMutex>
25#include <functional>
26#include <memory>
27
28#include "domaintypeadaptorfactoryinterface.h"
29#include "applicationdomaintype.h"
30#include "log.h"
31
32using namespace Sink;
33
34AdaptorFactoryRegistry &AdaptorFactoryRegistry::instance()
35{
36 // QMutexLocker locker(&sMutex);
37 static AdaptorFactoryRegistry *instance = 0;
38 if (!instance) {
39 instance = new AdaptorFactoryRegistry;
40 }
41 return *instance;
42}
43
44static QByteArray key(const QByteArray &resource, const QByteArray &type)
45{
46 return resource + type;
47}
48
49AdaptorFactoryRegistry::AdaptorFactoryRegistry()
50{
51
52}
53
54std::shared_ptr<DomainTypeAdaptorFactoryInterface> AdaptorFactoryRegistry::getFactory(const QByteArray &resource, const QByteArray &typeName)
55{
56 const auto ptr = mRegistry.value(key(resource, typeName));
57 //We have to check the pointer before the cast, otherwise a check would return true also for invalid instances.
58 if (!ptr) {
59 return std::shared_ptr<DomainTypeAdaptorFactoryInterface>();
60 }
61 return std::static_pointer_cast<DomainTypeAdaptorFactoryInterface>(ptr);
62}
63
64void AdaptorFactoryRegistry::registerFactory(const QByteArray &resource, const std::shared_ptr<void> &instance, const QByteArray typeName)
65{
66 mRegistry.insert(key(resource, typeName), instance);
67}
68