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 "ParameterType.h"
     33 
     34 #include <string>
     35 #include <limits>
     36 
     37 class CParameterAdaptation;
     38 
     39 class CIntegerParameterType : public CParameterType
     40 {
     41 public:
     42     CIntegerParameterType(const std::string &strName);
     43 
     44     // From IXmlSink
     45     virtual bool fromXml(const CXmlElement &xmlElement, CXmlSerializingContext &serializingContext);
     46 
     47     // From IXmlSource
     48     virtual void toXml(CXmlElement &xmlElement, CXmlSerializingContext &serializingContext) const;
     49 
     50     /// Conversion
     51     // String
     52     virtual bool toBlackboard(const std::string &strValue, uint32_t &uiValue,
     53                               CParameterAccessContext &parameterAccessContext) const;
     54     virtual bool fromBlackboard(std::string &strValue, const uint32_t &uiValue,
     55                                 CParameterAccessContext &parameterAccessContext) const;
     56     // Integer
     57     virtual bool toBlackboard(uint32_t uiUserValue, uint32_t &uiValue,
     58                               CParameterAccessContext &parameterAccessContext) const;
     59     virtual bool fromBlackboard(uint32_t &uiUserValue, uint32_t uiValue,
     60                                 CParameterAccessContext &parameterAccessContext) const;
     61     // Signed Integer
     62     virtual bool toBlackboard(int32_t iUserValue, uint32_t &uiValue,
     63                               CParameterAccessContext &parameterAccessContext) const;
     64     virtual bool fromBlackboard(int32_t &iUserValue, uint32_t uiValue,
     65                                 CParameterAccessContext &parameterAccessContext) const;
     66     // Double
     67     virtual bool toBlackboard(double dUserValue, uint32_t &uiValue,
     68                               CParameterAccessContext &parameterAccessContext) const;
     69     virtual bool fromBlackboard(double &dUserValue, uint32_t uiValue,
     70                                 CParameterAccessContext &parameterAccessContext) const;
     71 
     72     // Default value handling (simulation only)
     73     virtual uint32_t getDefaultValue() const;
     74 
     75     // Element properties
     76     virtual void showProperties(std::string &strResult) const;
     77 
     78     // Integer conversion
     79     virtual int toPlainInteger(int iSizeOptimizedData) const;
     80 
     81     // CElement
     82     virtual std::string getKind() const;
     83 
     84 private:
     85     // Returns true if children dynamic creation is to be dealt with
     86     virtual bool childrenAreDynamic() const;
     87 
     88     // Conversion from std::string
     89     bool convertValueFromString(const std::string &strValue, int64_t &iData,
     90                                 CParameterAccessContext &parameterAccessContext) const;
     91 
     92     // Range checking
     93     template <typename type>
     94     bool checkValueAgainstRange(const std::string &strValue, type value, type minValue,
     95                                 type maxValue, CParameterAccessContext &parameterAccessContext,
     96                                 bool bHexaValue) const;
     97 
     98     // Adaptation element retrieval
     99     const CParameterAdaptation *getParameterAdaptation() const;
    100 
    101     // Signing
    102     bool _bSigned{false};
    103     // Range
    104     uint32_t _uiMin{0};
    105     uint32_t _uiMax{std::numeric_limits<uint32_t>::max()};
    106 };
    107