Home | History | Annotate | Download | only in parameter
      1 /*
      2  * Copyright (c) 2011-2014, Intel Corporation
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without modification,
      6  * are permitted provided that the following conditions are met:
      7  *
      8  * 1. Redistributions of source code must retain the above copyright notice, this
      9  * list of conditions and the following disclaimer.
     10  *
     11  * 2. Redistributions in binary form must reproduce the above copyright notice,
     12  * this list of conditions and the following disclaimer in the documentation and/or
     13  * other materials provided with the distribution.
     14  *
     15  * 3. Neither the name of the copyright holder nor the names of its contributors
     16  * may be used to endorse or promote products derived from this software without
     17  * specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
     23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 #pragma once
     31 
     32 #include <stdint.h>
     33 
     34 #include "BaseParameter.h"
     35 
     36 #include <string>
     37 
     38 class CParameter : public CBaseParameter
     39 {
     40 public:
     41     CParameter(const std::string &strName, const CTypeElement *pTypeElement);
     42 
     43     // Instantiation, allocation
     44     virtual size_t getFootPrint() const;
     45 
     46     // Type
     47     virtual Type getType() const;
     48 
     49     // XML configuration settings parsing/composing
     50     virtual bool serializeXmlSettings(
     51         CXmlElement &xmlConfigurationSettingsElementContent,
     52         CConfigurationAccessContext &configurationAccessContext) const;
     53 
     54     // Boolean access
     55     bool access(bool &bValue, bool bSet,
     56                 CParameterAccessContext &parameterAccessContext) const override;
     57 
     58     // Integer Access
     59     bool access(uint32_t &uiValue, bool bSet,
     60                 CParameterAccessContext &parameterAccessContext) const override;
     61 
     62     // Signed Integer Access
     63     bool access(int32_t &iValue, bool bSet,
     64                 CParameterAccessContext &parameterAccessContext) const override;
     65 
     66     // Double Access
     67     bool access(double &dValue, bool bSet,
     68                 CParameterAccessContext &parameterAccessContext) const override;
     69 
     70 protected:
     71     // Used for simulation and virtual subsystems
     72     virtual void setDefaultValues(CParameterAccessContext &parameterAccessContext) const;
     73 
     74     // Actual value access
     75     virtual bool doSetValue(const std::string &strValue, size_t offset,
     76                             CParameterAccessContext &parameterAccessContext) const;
     77     virtual void doGetValue(std::string &strValue, size_t offset,
     78                             CParameterAccessContext &parameterAccessContext) const;
     79 
     80     // Value space handling for configuration import
     81     void handleValueSpaceAttribute(CXmlElement &xmlConfigurableElementSettingsElement,
     82                                    CConfigurationAccessContext &configurationAccessContext) const;
     83 
     84     // Size
     85     size_t getSize() const;
     86 
     87 private:
     88     // Generic Access
     89     template <typename type>
     90     bool doAccess(type &value, bool bSet, CParameterAccessContext &parameterAccessContext) const;
     91     template <typename type>
     92     bool doSet(type value, size_t offset, CParameterAccessContext &parameterAccessContext) const;
     93     template <typename type>
     94     bool doGet(type &value, size_t offset, CParameterAccessContext &parameterAccessContext) const;
     95 };
     96