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