summaryrefslogtreecommitdiffstats
path: root/core/singleton.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/singleton.h')
-rw-r--r--core/singleton.h74
1 files changed, 0 insertions, 74 deletions
diff --git a/core/singleton.h b/core/singleton.h
deleted file mode 100644
index 9573b07e8..000000000
--- a/core/singleton.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * We use singletons in numerous places. In combination with QML this gives
- * us a very fundamental problem, because QML likes to allocate objects by
- * itself. There are known workarounds, but currently we use idiosyncratic
- * singleton classes, which initialize the global instance pointer in the
- * constructor. Things get even more complicated if the same singleton is used
- * on mobile and on desktop. The latter might want to simply use the classical
- * instance() function without having to initialize the singleton first, as
- * that would beat the purpose of the instance() method.
- *
- * The template defined here, SillySingleton, codifies all this. Simply derive
- * a class from this template:
- * class X : public SillySingleton<X> {
- * ...
- * };
- * This will generate an instance() method. This will do the right thing for
- * both methods: explicit construction of the singleton via new or implicit
- * by calling the instance() method. It will also generate warnings if a
- * singleton class is generated more than once (i.e. first instance() is called
- * and _then_ new).
- *
- * In the long run we should get rid of all users of this class.
- */
-#ifndef SINGLETON_H
-#define SINGLETON_H
-
-#include <typeinfo>
-#include <QtGlobal>
-
-// 1) Declaration
-template<typename T>
-class SillySingleton {
- static T *self;
-protected:
- SillySingleton();
- ~SillySingleton();
-public:
- static T *instance();
-};
-
-template<typename T>
-T *SillySingleton<T>::self = nullptr;
-
-// 2) Implementation
-
-template<typename T>
-SillySingleton<T>::SillySingleton()
-{
- if (self)
- qWarning("Generating second instance of singleton %s", typeid(T).name());
- self = static_cast<T *>(this);
- qDebug("Generated singleton %s", typeid(T).name());
-}
-
-template<typename T>
-SillySingleton<T>::~SillySingleton()
-{
- if (self == this)
- self = nullptr;
- else
- qWarning("Destroying unknown instance of singleton %s", typeid(T).name());
- qDebug("Destroyed singleton %s", typeid(T).name());
-}
-
-template<typename T>
-T *SillySingleton<T>::instance()
-{
- if (!self)
- new T;
- return self;
-}
-
-#endif