]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/UnionValue.cpp
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / cpp / DataBoardTest / DataBoard / UnionValue.cpp
1 #include "UnionValue.h"\r
2 \r
3 #include "UnionType.h"\r
4 #include "Component.h"\r
5 #include "Constants.h"\r
6 \r
7 namespace Databoard {\r
8         namespace Value {\r
9                 UnionValue::UnionValue(Databoard::Type::DataType* dataBoard) : Value(dataBoard)\r
10                 {\r
11                         tag = -1;\r
12                         value = NULL;\r
13                 }\r
14 \r
15                 UnionValue::~UnionValue()\r
16                 {\r
17                         if(value != NULL)\r
18                         {\r
19                                 delete value;\r
20                                 value = NULL;\r
21                         }\r
22                 }\r
23 \r
24                 int UnionValue::getTag()\r
25                 {\r
26                         return tag;\r
27                 }\r
28 \r
29                 Value* UnionValue::getValue()\r
30                 {\r
31                         return value;\r
32                 }\r
33 \r
34                 void UnionValue::setValue(int tag, Value* value)\r
35                 {\r
36                         this->tag = tag;\r
37                         this->value = value;\r
38                 }\r
39 \r
40                 std::string UnionValue::writeOut(int /*indent*/)\r
41                 {\r
42                         std::string s;\r
43 \r
44                         Databoard::Type::UnionType* unionType = (Databoard::Type::UnionType*)dataBoard;\r
45 \r
46                         Databoard::Type::Component* component = unionType->getComponent(tag);\r
47 \r
48                         if(component != NULL)\r
49                         {\r
50                                 s += component->getName();\r
51                                 s += " ";\r
52                         }\r
53 \r
54                         if(value != NULL)\r
55                         {\r
56                                 s += value->writeOut();\r
57                         }\r
58 \r
59                         //s += value;\r
60 \r
61                         //if(unit.size() != 0)\r
62                         //{\r
63                         //      s += "(Unit=\"" + unit + "\")";\r
64                         //}\r
65 \r
66                         return s;\r
67                 }\r
68 \r
69                 bool UnionValue::equals(const Value* other)\r
70                 {\r
71                         UnionValue* o = (UnionValue*)other;\r
72 \r
73                         if(tag != o->tag)\r
74                         {\r
75                                 return (tag < o->tag);\r
76                         }\r
77 \r
78                         return (value->equals(o->value));\r
79                 }\r
80 \r
81                 std::string UnionValue::isValid()\r
82                 {\r
83                         if(dataBoard == NULL)\r
84                         {\r
85                                 return "LongValue: There is no datatype.";\r
86                         }\r
87 \r
88                         if(value == NULL)\r
89                         {\r
90                                 return STR_ERROR;\r
91                         }\r
92 \r
93                         return value->isValid();\r
94                 }\r
95         }\r
96 }\r