summaryrefslogtreecommitdiffstats
path: root/upstream/parameter/AreaConfiguration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/parameter/AreaConfiguration.cpp')
-rw-r--r--upstream/parameter/AreaConfiguration.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/upstream/parameter/AreaConfiguration.cpp b/upstream/parameter/AreaConfiguration.cpp
new file mode 100644
index 0000000..aaf7df8
--- /dev/null
+++ b/upstream/parameter/AreaConfiguration.cpp
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2011-2015, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "AreaConfiguration.h"
+#include "ConfigurableElement.h"
+#include "ConfigurationAccessContext.h"
+#include <assert.h>
+
+CAreaConfiguration::CAreaConfiguration(const CConfigurableElement *pConfigurableElement,
+ const CSyncerSet *pSyncerSet)
+ : _pConfigurableElement(pConfigurableElement), _pSyncerSet(pSyncerSet)
+{
+ // Size blackboard
+ _blackboard.setSize(_pConfigurableElement->getFootPrint());
+}
+
+CAreaConfiguration::CAreaConfiguration(const CConfigurableElement *pConfigurableElement,
+ const CSyncerSet *pSyncerSet, size_t size)
+ : _pConfigurableElement(pConfigurableElement), _pSyncerSet(pSyncerSet)
+{
+ // Size blackboard
+ _blackboard.setSize(size);
+}
+
+// Save data from current
+void CAreaConfiguration::save(const CParameterBlackboard *pMainBlackboard)
+{
+ copyFrom(pMainBlackboard, _pConfigurableElement->getOffset());
+}
+
+// Apply data to current
+bool CAreaConfiguration::restore(CParameterBlackboard *pMainBlackboard, bool bSync,
+ core::Results *errors) const
+{
+ assert(_bValid);
+
+ copyTo(pMainBlackboard, _pConfigurableElement->getOffset());
+
+ // Synchronize if required
+ return !bSync || _pSyncerSet->sync(*pMainBlackboard, false, errors);
+}
+
+// Ensure validity
+void CAreaConfiguration::validate(const CParameterBlackboard *pMainBlackboard)
+{
+ if (!_bValid) {
+
+ // Saving from blackboard make area configuration valid
+ save(pMainBlackboard);
+
+ _bValid = true;
+ }
+}
+
+// Return validity
+bool CAreaConfiguration::isValid() const
+{
+ return _bValid;
+}
+
+// Ensure validity against given valid area configuration
+void CAreaConfiguration::validateAgainst(const CAreaConfiguration *pValidAreaConfiguration)
+{
+ // Should be called on purpose
+ assert(!_bValid);
+
+ // Check proper against area given
+ assert(pValidAreaConfiguration->isValid());
+
+ // Check compatibility
+ assert(_pConfigurableElement == pValidAreaConfiguration->_pConfigurableElement);
+
+ // Copy
+ _blackboard.restoreFrom(&pValidAreaConfiguration->_blackboard, 0);
+
+ // Set as valid
+ _bValid = true;
+}
+
+// XML configuration settings parsing
+bool CAreaConfiguration::serializeXmlSettings(
+ CXmlElement &xmlConfigurableElementSettingsElementContent,
+ CConfigurationAccessContext &configurationAccessContext)
+{
+ // Assign blackboard to configuration context
+ configurationAccessContext.setParameterBlackboard(&_blackboard);
+
+ // Assign base offset to configuration context
+ configurationAccessContext.setBaseOffset(_pConfigurableElement->getOffset());
+
+ // Parse configuration settings (element contents)
+ if (_pConfigurableElement->serializeXmlSettings(xmlConfigurableElementSettingsElementContent,
+ configurationAccessContext)) {
+
+ if (!configurationAccessContext.serializeOut()) {
+
+ // Serialized-in areas are valid
+ _bValid = true;
+ }
+ return true;
+ }
+ return false;
+}
+
+// Compound handling
+const CConfigurableElement *CAreaConfiguration::getConfigurableElement() const
+{
+ return _pConfigurableElement;
+}
+
+void CAreaConfiguration::copyToOuter(CAreaConfiguration *pToAreaConfiguration) const
+{
+ assert(_pConfigurableElement->isDescendantOf(pToAreaConfiguration->getConfigurableElement()));
+
+ copyTo(&pToAreaConfiguration->_blackboard,
+ _pConfigurableElement->getOffset() -
+ pToAreaConfiguration->getConfigurableElement()->getOffset());
+}
+
+void CAreaConfiguration::copyFromOuter(const CAreaConfiguration *pFromAreaConfiguration)
+{
+ assert(_pConfigurableElement->isDescendantOf(pFromAreaConfiguration->getConfigurableElement()));
+
+ copyFrom(&pFromAreaConfiguration->_blackboard,
+ _pConfigurableElement->getOffset() -
+ pFromAreaConfiguration->getConfigurableElement()->getOffset());
+
+ // Inner becomes valid
+ setValid(true);
+}
+
+CParameterBlackboard &CAreaConfiguration::getBlackboard()
+{
+ return _blackboard;
+}
+
+const CParameterBlackboard &CAreaConfiguration::getBlackboard() const
+{
+ return _blackboard;
+}
+
+// Store validity
+void CAreaConfiguration::setValid(bool bValid)
+{
+ _bValid = bValid;
+}
+
+// Blackboard copies
+void CAreaConfiguration::copyTo(CParameterBlackboard *pToBlackboard, size_t offset) const
+{
+ pToBlackboard->restoreFrom(&_blackboard, offset);
+}
+
+void CAreaConfiguration::copyFrom(const CParameterBlackboard *pFromBlackboard, size_t offset)
+{
+ pFromBlackboard->saveTo(&_blackboard, offset);
+}