]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/ArrayValue.cpp b/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/ArrayValue.cpp
new file mode 100644 (file)
index 0000000..2fc0e5d
--- /dev/null
@@ -0,0 +1,141 @@
+#include "ArrayValue.h"\r
+\r
+#include "ArrayType.h"\r
+#include "Range.h"\r
+#include "Limit.h"\r
+\r
+#include "Constants.h"\r
+\r
+namespace Databoard {\r
+       namespace Value {\r
+               ArrayValue::ArrayValue(Databoard::Type::DataType* dataBoard) : Value(dataBoard)\r
+               {\r
+               }\r
+\r
+               ArrayValue::~ArrayValue()\r
+               {\r
+                       clear();\r
+               }\r
+\r
+               void ArrayValue::add(Value* value)\r
+               {\r
+                       values.push_back(value);\r
+               }\r
+\r
+               //void insert(Value* value, int index);\r
+               int ArrayValue::count()\r
+               {\r
+                       return (int)values.size();\r
+               }\r
+\r
+               void ArrayValue::remove(int index, int count)\r
+               {\r
+                       if(index >= 0 && (index+count) <= (int)values.size())\r
+                       {\r
+                               for(int i = index; i < count; ++i)\r
+                               {\r
+                                       delete values.at(i);\r
+                               }\r
+\r
+                               values.erase(values.begin(), values.begin() + count);\r
+                       }\r
+               }\r
+\r
+               void ArrayValue::clear()\r
+               {\r
+                       remove(0, count());\r
+               }\r
+               \r
+               Value* ArrayValue::get(int index)\r
+               {\r
+                       return values.at(index);\r
+               }\r
+\r
+               std::vector<Value*> ArrayValue::getAll()\r
+               {\r
+                       std::vector<Value*> v;\r
+\r
+                       for(int i = 0; i < (int)values.size(); ++i)\r
+                       {\r
+                               v.push_back(values.at(i));\r
+                       }\r
+\r
+                       return v;\r
+               }\r
+\r
+\r
+               std::string ArrayValue::writeOut(int /*indent*/)\r
+               {\r
+                       std::string s;\r
+\r
+                       s += "[";\r
+\r
+                       for(int i = 0; i < (int)values.size(); ++i)\r
+                       {\r
+                               s += values.at(i)->writeOut();\r
+\r
+                               if(i != ((int)values.size()-1))\r
+                               {\r
+                                       s += ",";\r
+                               }\r
+                       }\r
+\r
+                       s += "]";\r
+\r
+                       return s;\r
+               }\r
+\r
+               bool ArrayValue::equals(const Value* other)\r
+               {\r
+                       ArrayValue* o = (ArrayValue*)other;\r
+\r
+                       if(this->count() < o->count())\r
+                       {\r
+                               return true;\r
+                       }\r
+                       else if(this->count() > o->count())\r
+                       {\r
+                               return false;\r
+                       }\r
+\r
+                       //for(int i = 0; i <(int)this->count(); ++i)\r
+                       //{\r
+                       //      if(this->getField(i) < o->getField(i))\r
+                       //      {\r
+                       //              return true;\r
+                       //      }\r
+                       //}\r
+\r
+                       return true;//(this->value < o->value);\r
+\r
+               }\r
+\r
+               std::string ArrayValue::isValid()\r
+               {\r
+                       Databoard::Type::ArrayType* arrayType = dynamic_cast<Databoard::Type::ArrayType*>(dataBoard);\r
+\r
+                       if(arrayType == NULL)\r
+                       {\r
+                               return "ArrayValue: type is not an array.";\r
+                       }\r
+\r
+                       Range* r = arrayType->getLength();\r
+\r
+                       int countMin = r->getLower()->getInteger(INT_MIN);\r
+                       int countMax = r->getUpper()->getInteger(INT_MAX);\r
+\r
+                       int count = (int)values.size();\r
+\r
+                       if(count < countMin)\r
+                       {\r
+                               return "ArrayValue: too few.";\r
+                       }\r
+                       else if(count > countMax)\r
+                       {\r
+                               return "ArrayValue: too many.";\r
+                       }\r
+\r
+                       return STR_EMPTY;\r
+               }\r
+       }\r
+}\r