37template <
typename Type,
typename MutexType,
bool onlyCreateOncePerRun>
59 typename MutexType::ScopedLockType sl (*
this);
64 auto once = onlyCreateOncePerRun;
68 static bool createdOnceAlready =
false;
70 if (createdOnceAlready)
78 createdOnceAlready =
true;
81 static bool alreadyInside =
false;
103 auto* newObject =
new Type();
111 typename MutexType::ScopedLockType sl (*
this);
116 void clear (Type* expectedObject)
noexcept
118 instance.compare_exchange_strong (expectedObject,
nullptr);
184#define JUCE_DECLARE_SINGLETON(Classname, doNotRecreateAfterDeletion) \
186 static juce::SingletonHolder<Classname, juce::CriticalSection, doNotRecreateAfterDeletion> singletonHolder; \
187 friend juce::SingletonHolder<Classname, juce::CriticalSection, doNotRecreateAfterDeletion>; \
189 static Classname* JUCE_CALLTYPE getInstance() { return singletonHolder.get(); } \
190 static Classname* JUCE_CALLTYPE getInstanceWithoutCreating() noexcept { return singletonHolder.instance; } \
191 static void JUCE_CALLTYPE deleteInstance() noexcept { singletonHolder.deleteInstance(); } \
192 void clearSingletonInstance() noexcept { singletonHolder.clear (this); }
201#define JUCE_IMPLEMENT_SINGLETON(Classname) \
203 decltype (Classname::singletonHolder) Classname::singletonHolder;
226#define JUCE_DECLARE_SINGLETON_SINGLETHREADED(Classname, doNotRecreateAfterDeletion) \
228 static juce::SingletonHolder<Classname, juce::DummyCriticalSection, doNotRecreateAfterDeletion> singletonHolder; \
229 friend decltype (singletonHolder); \
231 static Classname* JUCE_CALLTYPE getInstance() { return singletonHolder.get(); } \
232 static Classname* JUCE_CALLTYPE getInstanceWithoutCreating() noexcept { return singletonHolder.instance; } \
233 static void JUCE_CALLTYPE deleteInstance() noexcept { singletonHolder.deleteInstance(); } \
234 void clearSingletonInstance() noexcept { singletonHolder.clear (this); }
252#define JUCE_DECLARE_SINGLETON_SINGLETHREADED_MINIMAL(Classname) \
254 static juce::SingletonHolder<Classname, juce::DummyCriticalSection, false> singletonHolder; \
255 friend decltype (singletonHolder); \
257 static Classname* JUCE_CALLTYPE getInstance() { return singletonHolder.getWithoutChecking(); } \
258 static Classname* JUCE_CALLTYPE getInstanceWithoutCreating() noexcept { return singletonHolder.instance; } \
259 static void JUCE_CALLTYPE deleteInstance() noexcept { singletonHolder.deleteInstance(); } \
260 void clearSingletonInstance() noexcept { singletonHolder.clear (this); }
267 #define juce_DeclareSingleton(Classname, doNotRecreate) JUCE_DECLARE_SINGLETON(Classname, doNotRecreate)
268 #define juce_DeclareSingleton_SingleThreaded(Classname, doNotRecreate) JUCE_DECLARE_SINGLETON_SINGLETHREADED(Classname, doNotRecreate)
269 #define juce_DeclareSingleton_SingleThreaded_Minimal(Classname) JUCE_DECLARE_SINGLETON_SINGLETHREADED_MINIMAL(Classname)
270 #define juce_ImplementSingleton(Classname) JUCE_IMPLEMENT_SINGLETON(Classname)
271 #define juce_ImplementSingleton_SingleThreaded(Classname) JUCE_IMPLEMENT_SINGLETON(Classname)
static Audio_Scope * scope
Definition player.cpp:26
Definition juce_ScopedValueSetter.h:55
Definition carla_juce.cpp:31
jack_client_t client jack_client_t client jack_client_t client jack_client_t JackInfoShutdownCallback void arg jack_client_t jack_port_t port void func jack_client_t const char const char unsigned long flags const jack_port_t port jack_client_t jack_port_id_t port_id const jack_port_t const char port_name const jack_port_t port void * ptr
Definition juce_linux_JackAudio.cpp:79
std::atomic< Type * > instance
Definition juce_Singleton.h:123
void clear(Type *expectedObject) noexcept
Definition juce_Singleton.h:116
Type * get()
Definition juce_Singleton.h:54
SingletonHolder()=default
~SingletonHolder()
Definition juce_Singleton.h:42
void deleteInstance()
Definition juce_Singleton.h:109
Type * getWithoutChecking()
Definition juce_Singleton.h:98
uch * p
Definition crypt.c:594