]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/RecordType.cpp
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / cpp / DataBoardTest / DataBoard / RecordType.cpp
diff --git a/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/RecordType.cpp b/bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/RecordType.cpp
new file mode 100644 (file)
index 0000000..1ba4ed8
--- /dev/null
@@ -0,0 +1,165 @@
+#include "RecordType.h"\r
+\r
+#include "Component.h"\r
+\r
+#include <string>\r
+#include <iostream>\r
+#include <sstream>\r
+\r
+namespace Databoard {\r
+       namespace Type {\r
+\r
+               RecordType::RecordType()\r
+               {\r
+               }\r
+\r
+               RecordType::RecordType(bool referable, std::vector<Component*> components)\r
+               {\r
+                       this->referable = referable;\r
+\r
+                       this->components.resize(components.size(), NULL);\r
+\r
+                       for(int i = 0; i < (int)this->components.size(); ++i)\r
+                       {\r
+                               this->components[i] = components[i];\r
+                       }\r
+               }\r
+\r
+               RecordType::~RecordType()\r
+               {\r
+                       for(int i = 0; i < (int)components.size(); ++i)\r
+                       {\r
+                               delete components.at(i);\r
+                       }\r
+\r
+                       components.clear();\r
+               }\r
+\r
+               bool RecordType::isReferable()\r
+               {\r
+                       return referable;\r
+               }\r
+\r
+               void RecordType::addComponent(std::string name, DataType* type)\r
+               {\r
+                       Component* component = new Component(name, type);\r
+\r
+                       components.push_back(component);\r
+               }\r
+\r
+               int RecordType::getComponentIndex(std::string fieldName)\r
+               {\r
+                       for(int i = 0; i < (int)components.size(); ++i)\r
+                       {\r
+                               if(components.at(i)->getName() == fieldName)\r
+                               {\r
+                                       return i;\r
+                               }\r
+                       }\r
+\r
+                       return -1;\r
+               }\r
+\r
+               Component* RecordType::getComponent(std::string fieldName)\r
+               {\r
+                       for(int i = 0; i < (int)components.size(); ++i)\r
+                       {\r
+                               if(components.at(i)->getName() == fieldName)\r
+                               {\r
+                                       return components.at(i);\r
+                               }\r
+                       }\r
+\r
+                       return NULL;\r
+               }\r
+\r
+               int RecordType::count()\r
+               {\r
+                       return (int)components.size();\r
+               }\r
+\r
+               Component* RecordType::getComponent(int i)\r
+               {\r
+                       return components.at(i);\r
+               }\r
+\r
+               //std::vector<Component*> RecordType::getComponents()\r
+               //{\r
+               //}\r
+\r
+               std::string RecordType::writeOut(int indent)\r
+               {\r
+                       bool isTuple = true;\r
+\r
+                       for(int i = 0; i < (int)components.size(); ++i)\r
+                       {\r
+                               std::istringstream oss(components.at(i)->getName());\r
+\r
+                               int name;\r
+\r
+                               oss >> name;\r
+\r
+                               if(name != i)\r
+                               {\r
+                                       isTuple = false;\r
+\r
+                                       break;\r
+                               }\r
+                       }\r
+\r
+                       std::string s;\r
+\r
+                       if(isTuple == false)\r
+                       {\r
+                               s += "{\n";\r
+                       }\r
+                       else\r
+                       {\r
+                               s += "( ";\r
+                       }\r
+\r
+                       indent += 1;\r
+\r
+                       for(int i = 0; i < (int)components.size(); ++i)\r
+                       {\r
+                               if(isTuple == false)\r
+                               {\r
+                                       s.append(indent * 2, ' ');\r
+\r
+                                       s += components.at(i)->getName() + " : ";\r
+                               }\r
+\r
+                               s += components.at(i)->getDataBoard()->writeOut(indent);\r
+\r
+                               if(i != ((int)components.size()-1))\r
+                               {\r
+                                       s += ",";\r
+                               }\r
+\r
+                               if(isTuple == false)\r
+                               {\r
+                                       s += "\n";\r
+                               }\r
+                               else\r
+                               {\r
+                                       s += " ";\r
+                               }\r
+                       }\r
+\r
+                       indent -= 1;\r
+\r
+                       if(isTuple == false)\r
+                       {\r
+                               s.append(indent * 2, ' ');\r
+\r
+                               s += "}";\r
+                       }\r
+                       else\r
+                       {\r
+                               s += ")";\r
+                       }\r
+\r
+                       return s;\r
+               }\r
+       }\r
+}\r