--- /dev/null
+#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