Set configuration manager (#11534)
* Add the setter for the ConfigurationManager.
Also remove the implementation getter.
* Remove uses of ConfigurationMgrImpl.
Promote the reboot count, boot reason, and operational hours methods
to the ConfigurationManager interface.
* Add a static instance getter to the ConfigurationManagerImpl.
* Set the default ConfigurationManager instance in the platform manager.
* Update the tests to set a ConfigurationManager instance.
* Allow subclasses of the platform ConfigurationManagerImpls.
* Re-fix Ameba's ConfigurationManagerImpl.
* Restyled by clang-format
* Improvements from pull request comments.
* Add VerifyOrDie to the ConfigurationMgr getter.
* Pass a pointer rather than a reference to ConfigurationMgr.
* Explicitly default the instance pointer to nullptr.
* Move the singleton implementation out of each platform into a shared file.
* Update Ameba platform to remove the new uses of ConfigurationMgrImpl.
Co-authored-by: Restyled.io <commits@restyled.io>
diff --git a/src/platform/SingletonConfigurationManager.cpp b/src/platform/SingletonConfigurationManager.cpp
new file mode 100644
index 0000000..0658ebf
--- /dev/null
+++ b/src/platform/SingletonConfigurationManager.cpp
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright (c) 2021 Project CHIP Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Implements a getter and setter for a singleton ConfigurationManager object.
+ */
+
+#include <lib/support/CodeUtils.h>
+
+namespace chip {
+namespace DeviceLayer {
+
+class ConfigurationManager;
+
+namespace {
+
+/** Singleton pointer to the ConfigurationManager implementation.
+ */
+ConfigurationManager * gInstance = nullptr;
+
+} // namespace
+
+ConfigurationManager & ConfigurationMgr()
+{
+ VerifyOrDie(gInstance != nullptr);
+ return *gInstance;
+}
+
+void SetConfigurationMgr(ConfigurationManager * configurationManager)
+{
+ if (configurationManager != nullptr)
+ {
+ gInstance = configurationManager;
+ }
+}
+
+} // namespace DeviceLayer
+} // namespace chip