99
1010using namespace libscratchcpp ;
1111
12- std::unique_ptr<ScratchConfigurationPrivate> ScratchConfiguration::impl = std::make_unique<ScratchConfigurationPrivate>();
13-
1412/* ! Registers the given extension. */
1513void ScratchConfiguration::registerExtension (std::shared_ptr<IExtension> extension)
1614{
17- impl ->registerExtension (extension);
15+ getImpl () ->registerExtension (extension);
1816}
1917
2018/* ! Returns the extension with the given name, or nullptr if it isn't registered. */
2119IExtension *ScratchConfiguration::getExtension (const std::string &name)
2220{
23- return impl ->getExtension (name);
21+ return getImpl () ->getExtension (name);
2422}
2523
2624/* ! Registers the given graphics effect. */
@@ -29,21 +27,21 @@ void ScratchConfiguration::registerGraphicsEffect(std::shared_ptr<IGraphicsEffec
2927 if (!effect)
3028 return ;
3129
32- impl ->graphicsEffects [effect->name ()] = effect;
30+ getImpl () ->graphicsEffects [effect->name ()] = effect;
3331}
3432
3533/* ! Removes the given graphics effect. */
3634void ScratchConfiguration::removeGraphicsEffect (const std::string &name)
3735{
38- impl ->graphicsEffects .erase (name);
36+ getImpl () ->graphicsEffects .erase (name);
3937}
4038
4139/* ! Returns the graphics effect with the given name, or nullptr if it isn't registered. */
4240IGraphicsEffect *ScratchConfiguration::getGraphicsEffect (const std::string &name)
4341{
44- auto it = impl ->graphicsEffects .find (name);
42+ auto it = getImpl () ->graphicsEffects .find (name);
4543
46- if (it == impl ->graphicsEffects .cend ())
44+ if (it == getImpl () ->graphicsEffects .cend ())
4745 return nullptr ;
4846 else
4947 return it->second .get ();
@@ -76,5 +74,13 @@ int ScratchConfiguration::patchVersion()
7674
7775const std::vector<std::shared_ptr<IExtension>> ScratchConfiguration::getExtensions ()
7876{
79- return impl->extensions ;
77+ return getImpl ()->extensions ;
78+ }
79+
80+ std::shared_ptr<ScratchConfigurationPrivate> &ScratchConfiguration::getImpl ()
81+ {
82+ if (!impl)
83+ impl = std::make_unique<ScratchConfigurationPrivate>();
84+
85+ return impl;
8086}
0 commit comments