]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/FloatValue.cpp
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / cpp / DataBoardTest / DataBoard / FloatValue.cpp
1 #include "FloatValue.h"\r
2 \r
3 #include "FloatType.h"\r
4 #include "Constants.h"\r
5 #include "Range.h"\r
6 #include "Limit.h"\r
7 \r
8 #include <sstream>\r
9 #include <cfloat>\r
10 #include <valarray>\r
11 \r
12 namespace Databoard {\r
13         namespace Value {\r
14                 FloatValue::FloatValue(Databoard::Type::DataType* dataBoard) : Value(dataBoard)\r
15                 {\r
16                 }\r
17 \r
18                 FloatValue::~FloatValue()\r
19                 {\r
20                 }\r
21 \r
22                 void FloatValue::setValue(float value)\r
23                 {\r
24                         Databoard::Type::FloatType* floatType = dynamic_cast<Databoard::Type::FloatType*>(dataBoard);\r
25 \r
26                         if(floatType != NULL)\r
27                         {\r
28                                 this->value = value;\r
29                         }\r
30                 }\r
31 \r
32                 float FloatValue::getValue()\r
33                 {\r
34                         return value;\r
35                 }\r
36 \r
37                 std::string FloatValue::writeOut(int /*indent*/)\r
38                 {\r
39                         std::string s;\r
40 \r
41                         std::stringstream oss;\r
42 \r
43                         oss << value;\r
44 \r
45                         oss >> s;\r
46 \r
47                         //if(unit.size() != 0)\r
48                         //{\r
49                         //      s += "(Unit=\"" + unit + "\")";\r
50                         //}\r
51 \r
52                         return s;\r
53                 }\r
54 \r
55                 bool FloatValue::equals(const Value* other)\r
56                 {\r
57                         FloatValue* o = (FloatValue*)other;\r
58 \r
59                         return (this->value < o->value);\r
60 \r
61                 }\r
62 \r
63                 std::string FloatValue::isValid()\r
64                 {\r
65                         if(dataBoard == NULL)\r
66                         {\r
67                                 return "There is no datatype.";\r
68                         }\r
69 \r
70                         Databoard::Type::FloatType* floatType = (Databoard::Type::FloatType*)dataBoard;\r
71 \r
72                         if(floatType->getRange() == NULL)\r
73                         {\r
74                                 return STR_EMPTY;\r
75                         }\r
76 \r
77                         double minValue = floatType->minValue();\r
78                         double maxValue = floatType->maxValue();\r
79 \r
80                         if(floatType->getRange()->getLower()->getInclusive() == true)\r
81                         {\r
82                                 if(value < minValue)\r
83                                 {\r
84                                         return std::string("FloatValue: ") + STR_ERROR_VALUE_SMALL;\r
85                                 }\r
86                         }\r
87                         else //if(integerType->getRange()->getLower()->getInclusive() == false)\r
88                         {\r
89                                 if(value < minValue || (abs(value-minValue) < FLT_EPSILON))\r
90                                 {\r
91                                         return std::string("FloatValue: ") + STR_ERROR_VALUE_SMALL;\r
92                                 }\r
93                         }\r
94 \r
95                         if(floatType->getRange()->getUpper()->getInclusive() == true)\r
96                         {\r
97                                 if(value > maxValue)\r
98                                 {\r
99                                         return std::string("FloatValue: ") + STR_ERROR_VALUE_LARGE;\r
100                                 }\r
101                         }\r
102                         else //if(integerType->getRange()->getUpper()->getInclusive() == false)\r
103                         {\r
104                                 if(value > maxValue || (abs(value-minValue) > FLT_EPSILON))\r
105                                 {\r
106                                         return std::string("FloatValue: ") + STR_ERROR_VALUE_LARGE;\r
107                                 }\r
108                         }\r
109 \r
110                         return STR_EMPTY;\r
111                 }\r
112         }\r
113 }\r