]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 #include "RecordType.h"\r
2 \r
3 #include "Component.h"\r
4 \r
5 #include <string>\r
6 #include <iostream>\r
7 #include <sstream>\r
8 \r
9 namespace Databoard {\r
10         namespace Type {\r
11 \r
12                 RecordType::RecordType()\r
13                 {\r
14                 }\r
15 \r
16                 RecordType::RecordType(bool referable, std::vector<Component*> components)\r
17                 {\r
18                         this->referable = referable;\r
19 \r
20                         this->components.resize(components.size(), NULL);\r
21 \r
22                         for(int i = 0; i < (int)this->components.size(); ++i)\r
23                         {\r
24                                 this->components[i] = components[i];\r
25                         }\r
26                 }\r
27 \r
28                 RecordType::~RecordType()\r
29                 {\r
30                         for(int i = 0; i < (int)components.size(); ++i)\r
31                         {\r
32                                 delete components.at(i);\r
33                         }\r
34 \r
35                         components.clear();\r
36                 }\r
37 \r
38                 bool RecordType::isReferable()\r
39                 {\r
40                         return referable;\r
41                 }\r
42 \r
43                 void RecordType::addComponent(std::string name, DataType* type)\r
44                 {\r
45                         Component* component = new Component(name, type);\r
46 \r
47                         components.push_back(component);\r
48                 }\r
49 \r
50                 int RecordType::getComponentIndex(std::string fieldName)\r
51                 {\r
52                         for(int i = 0; i < (int)components.size(); ++i)\r
53                         {\r
54                                 if(components.at(i)->getName() == fieldName)\r
55                                 {\r
56                                         return i;\r
57                                 }\r
58                         }\r
59 \r
60                         return -1;\r
61                 }\r
62 \r
63                 Component* RecordType::getComponent(std::string fieldName)\r
64                 {\r
65                         for(int i = 0; i < (int)components.size(); ++i)\r
66                         {\r
67                                 if(components.at(i)->getName() == fieldName)\r
68                                 {\r
69                                         return components.at(i);\r
70                                 }\r
71                         }\r
72 \r
73                         return NULL;\r
74                 }\r
75 \r
76                 int RecordType::count()\r
77                 {\r
78                         return (int)components.size();\r
79                 }\r
80 \r
81                 Component* RecordType::getComponent(int i)\r
82                 {\r
83                         return components.at(i);\r
84                 }\r
85 \r
86                 //std::vector<Component*> RecordType::getComponents()\r
87                 //{\r
88                 //}\r
89 \r
90                 std::string RecordType::writeOut(int indent)\r
91                 {\r
92                         bool isTuple = true;\r
93 \r
94                         for(int i = 0; i < (int)components.size(); ++i)\r
95                         {\r
96                                 std::istringstream oss(components.at(i)->getName());\r
97 \r
98                                 int name;\r
99 \r
100                                 oss >> name;\r
101 \r
102                                 if(name != i)\r
103                                 {\r
104                                         isTuple = false;\r
105 \r
106                                         break;\r
107                                 }\r
108                         }\r
109 \r
110                         std::string s;\r
111 \r
112                         if(isTuple == false)\r
113                         {\r
114                                 s += "{\n";\r
115                         }\r
116                         else\r
117                         {\r
118                                 s += "( ";\r
119                         }\r
120 \r
121                         indent += 1;\r
122 \r
123                         for(int i = 0; i < (int)components.size(); ++i)\r
124                         {\r
125                                 if(isTuple == false)\r
126                                 {\r
127                                         s.append(indent * 2, ' ');\r
128 \r
129                                         s += components.at(i)->getName() + " : ";\r
130                                 }\r
131 \r
132                                 s += components.at(i)->getDataBoard()->writeOut(indent);\r
133 \r
134                                 if(i != ((int)components.size()-1))\r
135                                 {\r
136                                         s += ",";\r
137                                 }\r
138 \r
139                                 if(isTuple == false)\r
140                                 {\r
141                                         s += "\n";\r
142                                 }\r
143                                 else\r
144                                 {\r
145                                         s += " ";\r
146                                 }\r
147                         }\r
148 \r
149                         indent -= 1;\r
150 \r
151                         if(isTuple == false)\r
152                         {\r
153                                 s.append(indent * 2, ' ');\r
154 \r
155                                 s += "}";\r
156                         }\r
157                         else\r
158                         {\r
159                                 s += ")";\r
160                         }\r
161 \r
162                         return s;\r
163                 }\r
164         }\r
165 }\r