Skip to content
This repository was archived by the owner on Aug 5, 2022. It is now read-only.

Commit c8a6fe9

Browse files
committed
Make IntegerParameterType template over the size and signedness
This simplifies some methods that used to contain if/else branches over the signedess. It also simplifies how different sizes are handled (gets rid of some bit-level tricks). As a result, it isn't possible anymore to set illegal Min/Max attributes. Signed-off-by: David Wagner <[email protected]>
1 parent 30de92d commit c8a6fe9

File tree

8 files changed

+510
-491
lines changed

8 files changed

+510
-491
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* Copyright (c) 2016, 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+
31+
#include <sstream>
32+
#include <iomanip>
33+
34+
#include "BaseIntegerParameterType.h"
35+
#include "ParameterAccessContext.h"
36+
#include "ParameterAdaptation.h"
37+
38+
// Kind
39+
std::string CBaseIntegerParameterType::getKind() const
40+
{
41+
return "IntegerParameter";
42+
}
43+
44+
// Deal with adaption node
45+
bool CBaseIntegerParameterType::childrenAreDynamic() const
46+
{
47+
return true;
48+
}
49+
50+
bool CBaseIntegerParameterType::fromBlackboard(uint32_t &uiUserValue, uint32_t uiValue,
51+
CParameterAccessContext & /*ctx*/) const
52+
{
53+
// Do assign
54+
uiUserValue = uiValue;
55+
56+
return true;
57+
}
58+
bool CBaseIntegerParameterType::fromBlackboard(int32_t &iUserValue, uint32_t uiValue,
59+
CParameterAccessContext & /*ctx*/) const
60+
{
61+
int32_t iValue = uiValue;
62+
63+
// Sign extend
64+
signExtend(iValue);
65+
66+
// Do assign
67+
iUserValue = iValue;
68+
69+
return true;
70+
}
71+
// Adaptation element retrieval
72+
const CParameterAdaptation *CBaseIntegerParameterType::getParameterAdaptation() const
73+
{
74+
return static_cast<const CParameterAdaptation *>(findChildOfKind("Adaptation"));
75+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* Copyright (c) 2016, 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+
36+
class CParameterAdaptation;
37+
38+
class CBaseIntegerParameterType : public CParameterType
39+
{
40+
public:
41+
CBaseIntegerParameterType(const std::string &name) : CParameterType(name){};
42+
43+
// CElement
44+
std::string getKind() const override;
45+
46+
bool fromBlackboard(uint32_t &uiUserValue, uint32_t uiValue,
47+
CParameterAccessContext &parameterAccessContext) const override;
48+
bool fromBlackboard(int32_t &iUserValue, uint32_t uiValue,
49+
CParameterAccessContext &parameterAccessContext) const override;
50+
bool fromBlackboard(double &dUserValue, uint32_t uiValue,
51+
CParameterAccessContext &parameterAccessContext) const override
52+
{
53+
return CParameterType::fromBlackboard(dUserValue, uiValue, parameterAccessContext);
54+
}
55+
bool fromBlackboard(std::string &strValue, const uint32_t &value,
56+
CParameterAccessContext &parameterAccessContext) const override = 0;
57+
58+
protected:
59+
// Adaptation element retrieval
60+
const CParameterAdaptation *getParameterAdaptation() const;
61+
62+
private:
63+
// Returns true if children dynamic creation is to be dealt with
64+
bool childrenAreDynamic() const override;
65+
};

parameter/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ add_library(parameter SHARED
3535
${parameter_OS_SPECIFIC_SRCS}
3636
AreaConfiguration.cpp
3737
ArrayParameter.cpp
38+
BaseIntegerParameterType.cpp
3839
BaseParameter.cpp
3940
BitParameterBlock.cpp
4041
BitParameterBlockType.cpp
@@ -66,7 +67,6 @@ add_library(parameter SHARED
6667
HardwareBackSynchronizer.cpp
6768
InstanceConfigurableElement.cpp
6869
InstanceDefinition.cpp
69-
IntegerParameterType.cpp
7070
LinearParameterAdaptation.cpp
7171
LogarithmicParameterAdaptation.cpp
7272
LoggingElementBuilderTemplate.cpp
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Copyright (c) 2016, 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 "ElementBuilder.h"
33+
#include "IntegerParameterType.h"
34+
35+
class IntegerParameterBuilder : public CElementBuilder
36+
{
37+
public:
38+
CElement *createElement(const CXmlElement &xmlElement) const override
39+
{
40+
size_t sizeInBits;
41+
sizeInBits = xmlElement.getAttribute("Size", sizeInBits) ? sizeInBits : 32;
42+
43+
bool isSigned = false;
44+
xmlElement.getAttribute("Signed", isSigned);
45+
46+
auto name = xmlElement.getNameAttribute();
47+
48+
switch (sizeInBits) {
49+
case 8:
50+
if (isSigned) {
51+
return new CIntegerParameterType<true, 8>(name);
52+
}
53+
return new CIntegerParameterType<false, 8>(name);
54+
case 16:
55+
if (isSigned) {
56+
return new CIntegerParameterType<true, 16>(name);
57+
}
58+
return new CIntegerParameterType<false, 16>(name);
59+
case 32:
60+
if (isSigned) {
61+
return new CIntegerParameterType<true, 32>(name);
62+
}
63+
return new CIntegerParameterType<false, 32>(name);
64+
default:
65+
return nullptr;
66+
}
67+
}
68+
};

0 commit comments

Comments
 (0)