]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/ArrayValue.cpp
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / cpp / DataBoardTest / DataBoard / ArrayValue.cpp
1 #include "ArrayValue.h"\r
2 \r
3 #include "ArrayType.h"\r
4 #include "Range.h"\r
5 #include "Limit.h"\r
6 \r
7 #include "Constants.h"\r
8 \r
9 namespace Databoard {\r
10         namespace Value {\r
11                 ArrayValue::ArrayValue(Databoard::Type::DataType* dataBoard) : Value(dataBoard)\r
12                 {\r
13                 }\r
14 \r
15                 ArrayValue::~ArrayValue()\r
16                 {\r
17                         clear();\r
18                 }\r
19 \r
20                 void ArrayValue::add(Value* value)\r
21                 {\r
22                         values.push_back(value);\r
23                 }\r
24 \r
25                 //void insert(Value* value, int index);\r
26                 int ArrayValue::count()\r
27                 {\r
28                         return (int)values.size();\r
29                 }\r
30 \r
31                 void ArrayValue::remove(int index, int count)\r
32                 {\r
33                         if(index >= 0 && (index+count) <= (int)values.size())\r
34                         {\r
35                                 for(int i = index; i < count; ++i)\r
36                                 {\r
37                                         delete values.at(i);\r
38                                 }\r
39 \r
40                                 values.erase(values.begin(), values.begin() + count);\r
41                         }\r
42                 }\r
43 \r
44                 void ArrayValue::clear()\r
45                 {\r
46                         remove(0, count());\r
47                 }\r
48                 \r
49                 Value* ArrayValue::get(int index)\r
50                 {\r
51                         return values.at(index);\r
52                 }\r
53 \r
54                 std::vector<Value*> ArrayValue::getAll()\r
55                 {\r
56                         std::vector<Value*> v;\r
57 \r
58                         for(int i = 0; i < (int)values.size(); ++i)\r
59                         {\r
60                                 v.push_back(values.at(i));\r
61                         }\r
62 \r
63                         return v;\r
64                 }\r
65 \r
66 \r
67                 std::string ArrayValue::writeOut(int /*indent*/)\r
68                 {\r
69                         std::string s;\r
70 \r
71                         s += "[";\r
72 \r
73                         for(int i = 0; i < (int)values.size(); ++i)\r
74                         {\r
75                                 s += values.at(i)->writeOut();\r
76 \r
77                                 if(i != ((int)values.size()-1))\r
78                                 {\r
79                                         s += ",";\r
80                                 }\r
81                         }\r
82 \r
83                         s += "]";\r
84 \r
85                         return s;\r
86                 }\r
87 \r
88                 bool ArrayValue::equals(const Value* other)\r
89                 {\r
90                         ArrayValue* o = (ArrayValue*)other;\r
91 \r
92                         if(this->count() < o->count())\r
93                         {\r
94                                 return true;\r
95                         }\r
96                         else if(this->count() > o->count())\r
97                         {\r
98                                 return false;\r
99                         }\r
100 \r
101                         //for(int i = 0; i <(int)this->count(); ++i)\r
102                         //{\r
103                         //      if(this->getField(i) < o->getField(i))\r
104                         //      {\r
105                         //              return true;\r
106                         //      }\r
107                         //}\r
108 \r
109                         return true;//(this->value < o->value);\r
110 \r
111                 }\r
112 \r
113                 std::string ArrayValue::isValid()\r
114                 {\r
115                         Databoard::Type::ArrayType* arrayType = dynamic_cast<Databoard::Type::ArrayType*>(dataBoard);\r
116 \r
117                         if(arrayType == NULL)\r
118                         {\r
119                                 return "ArrayValue: type is not an array.";\r
120                         }\r
121 \r
122                         Range* r = arrayType->getLength();\r
123 \r
124                         int countMin = r->getLower()->getInteger(INT_MIN);\r
125                         int countMax = r->getUpper()->getInteger(INT_MAX);\r
126 \r
127                         int count = (int)values.size();\r
128 \r
129                         if(count < countMin)\r
130                         {\r
131                                 return "ArrayValue: too few.";\r
132                         }\r
133                         else if(count > countMax)\r
134                         {\r
135                                 return "ArrayValue: too many.";\r
136                         }\r
137 \r
138                         return STR_EMPTY;\r
139                 }\r
140         }\r
141 }\r