| /* | |
| * Copyright (c) 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. | |
| */ | |
| #pragma once | |
| #include "parameter_export.h" | |
| #include <stdint.h> | |
| #include <string> | |
| #include <vector> | |
| /** Forward declaration of private classes. | |
| * Client should not use those class. | |
| * They are not part of the public api and may be remove/renamed in any release. | |
| * @{ | |
| */ | |
| class CParameterMgr; | |
| class CConfigurableElement; | |
| class CBaseParameter; | |
| /** @} */ | |
| /** TODO */ | |
| class PARAMETER_EXPORT ElementHandle | |
| { | |
| public: | |
| /** @return element's name. */ | |
| std::string getName() const; | |
| /** @return element's size in bytes. | |
| * | |
| * If the element size in bit is not a multiple of CHAR_BIT (8) | |
| * it is rounded to the upper multiple. | |
| * Effectively returning the element memory footprint. | |
| */ | |
| size_t getSize() const; | |
| /** @return true if the element is a parameter, false otherwise. */ | |
| bool isParameter() const; | |
| /** @return a human readable description of the element. */ | |
| std::string getDescription() const; | |
| /** @return is the element and all its descendant not in a domain. | |
| * | |
| * Only rogue elements are allowed to be set. | |
| * */ | |
| bool isRogue() const; | |
| /** @return true if the element is an array, false otherwise.*/ | |
| bool isArray() const; | |
| /** @return the parameter array length. | |
| * 0 if the element is not an array (scalar). | |
| */ | |
| size_t getArrayLength() const; | |
| /** @return element's path in the parameter hierarchy tree. */ | |
| std::string getPath() const; | |
| /** @return element's kind. | |
| * | |
| * Ie: a string identifying the type of Element. | |
| */ | |
| std::string getKind() const; | |
| std::vector<ElementHandle> getChildren(); | |
| /** Get mapping data of the element context | |
| * | |
| * Retrieve mapping data associated to a given key if any. | |
| * If the key is not present in this element, query ancestors. | |
| * | |
| * @param[in] strKey the input mapping key | |
| * @param[out] strValue the resulting mapping value in case of success | |
| * @return true for if mapping key exists, false otherwise | |
| */ | |
| bool getMappingData(const std::string &strKey, std::string &strValue) const; | |
| /** Gets element structure description as XML string | |
| * | |
| * @return the output XML string | |
| */ | |
| bool getStructureAsXML(std::string &xmlStructure, std::string &error) const; | |
| /** Gets element settings as XML string | |
| * | |
| * @param[out] xmlValue the values to get | |
| * @param[out] error On failure (false returned) will contain a human | |
| * readable description of the error. | |
| * On success (true returned) the content is not | |
| * specified. | |
| * | |
| * @note returned value format depends on the current ParameterMgr format | |
| * control properties, including value space and output raw format. | |
| * @see ParameterMgrPlatformConnector::setOutputRawFormat | |
| * @see ParameterMgrPlatformConnector::setValueSpace | |
| * | |
| * @return true on success, false on failure | |
| */ | |
| bool getAsXML(std::string &xmlValue, std::string &error) const; | |
| /** Sets element settings as XML string | |
| * | |
| * @param[in] xmlValue the values to set | |
| * @param[out] error On failure (false returned) will contain a human | |
| * readable description of the error. | |
| * On success (true returned) the content is not | |
| * specified. | |
| * | |
| * @note | |
| * - targeted element needs to be rogue for this operation to be allowed | |
| * - structure of the passed XML element must match the targeted | |
| * configurable element's one otherwise this operation will fail | |
| * - expected value format depends on current value space. | |
| * @see ParameterMgrPlatformConnector::valueSpaceIsRaw | |
| * | |
| * @return true on success, false otherwise | |
| */ | |
| bool setAsXML(const std::string &xmlValue, std::string &error); | |
| /** Gets element settings in binary format | |
| * | |
| * @param[out] bytesValue the output vector | |
| * @param[out] error unused | |
| * | |
| * @returns true | |
| */ | |
| bool getAsBytes(std::vector<uint8_t> &bytesValue, std::string &error) const; | |
| /** Sets element settings in binary format | |
| * | |
| * @param[out] bytesValue the output vector | |
| * @param[out] error On failure (false returned) will contain a human | |
| * readable description of the error. | |
| * On success (true returned) the content is not | |
| * specified. | |
| * | |
| * @note | |
| * - targeted element needs to be rogue for this operation to be allowed | |
| * - size of the passed array must match that of the element | |
| */ | |
| bool setAsBytes(const std::vector<uint8_t> &bytesValue, std::string &error); | |
| /** Access (get or set) parameters as different types. | |
| * | |
| * Will fail if the element is not a paramete. | |
| * Array access will fail if the parameter is not an array. | |
| * | |
| * @param value if get, the value to get (in parameter) | |
| * if set, the value to set (out parameter) | |
| * | |
| * Setting an array requires the std::vector size to match the arrayLength. | |
| * Ie: value.size() == arrayLength() | |
| * | |
| * @param[out] error On failure (false returned) will contain a human | |
| * readable description of the error. | |
| * On success (true returned) the content is not | |
| * specified. | |
| * @return true if the access was successful, | |
| * false otherwise (see error for the detail) | |
| * @{ | |
| */ | |
| /** Boolean access @{ */ | |
| bool getAsBoolean(bool &value, std::string &error) const; | |
| bool setAsBoolean(bool value, std::string &error); | |
| bool setAsBooleanArray(const std::vector<bool> &value, std::string &error); | |
| bool getAsBooleanArray(std::vector<bool> &value, std::string &error) const; | |
| /** @} */ | |
| /** Integer Access @{ */ | |
| bool setAsInteger(uint32_t value, std::string &error); | |
| bool getAsInteger(uint32_t &value, std::string &error) const; | |
| bool setAsIntegerArray(const std::vector<uint32_t> &value, std::string &error); | |
| bool getAsIntegerArray(std::vector<uint32_t> &value, std::string &error) const; | |
| /** @} */ | |
| /** Signed Integer Access @{ */ | |
| bool setAsSignedInteger(int32_t value, std::string &error); | |
| bool getAsSignedInteger(int32_t &value, std::string &error) const; | |
| bool setAsSignedIntegerArray(const std::vector<int32_t> &value, std::string &error); | |
| bool getAsSignedIntegerArray(std::vector<int32_t> &value, std::string &error) const; | |
| /** @} */ | |
| /** Double Access @{ */ | |
| bool setAsDouble(double value, std::string &error); | |
| bool getAsDouble(double &value, std::string &error) const; | |
| bool setAsDoubleArray(const std::vector<double> &value, std::string &error); | |
| bool getAsDoubleArray(std::vector<double> &value, std::string &error) const; | |
| /** @} */ | |
| /** String Access @{ */ | |
| bool setAsString(const std::string &value, std::string &error); | |
| bool getAsString(std::string &value, std::string &error) const; | |
| bool setAsStringArray(const std::vector<std::string> &value, std::string &error); | |
| bool getAsStringArray(std::vector<std::string> &value, std::string &error) const; | |
| /** @} */ | |
| /** @} */ | |
| protected: | |
| ElementHandle(CConfigurableElement &element, CParameterMgr ¶meterMgr); | |
| friend CParameterMgr; // So that it can build the handler | |
| private: | |
| template <class T> | |
| bool setAs(const T value, std::string &error) const; | |
| template <class T> | |
| bool getAs(T &value, std::string &error) const; | |
| CBaseParameter &getParameter(); | |
| const CBaseParameter &getParameter() const; | |
| /** Check that the parameter value can be modify. | |
| * | |
| * @param arrayLength[in] If accessing as an array: the new value array length | |
| * Otherwise: 0 | |
| * @param error[out] If access is forbidden: a human readable message explaining why | |
| * Otherwise: not modified. | |
| * | |
| * @return true if the parameter value can be retrieved, false otherwise. | |
| */ | |
| bool checkSetValidity(size_t arrayLength, std::string &error) const; | |
| /** Check that the parameter value can be retrieved. | |
| * | |
| * @param asArray[in] true if accessing as an array, false otherwise. | |
| * @param error[out] If access is forbidden, a human readable message explaining why | |
| * Otherwise, not modified. | |
| * | |
| * @return true if the parameter value can be retrieved, false otherwise. | |
| */ | |
| bool checkGetValidity(bool asArray, std::string &error) const; | |
| /** Reference to the handled Configurable element. */ | |
| CConfigurableElement &mElement; | |
| CParameterMgr &mParameterMgr; | |
| }; |