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