#include "RecordType.h" #include "Component.h" #include #include #include namespace Databoard { namespace Type { RecordType::RecordType() { } RecordType::RecordType(bool referable, std::vector components) { this->referable = referable; this->components.resize(components.size(), NULL); for(int i = 0; i < (int)this->components.size(); ++i) { this->components[i] = components[i]; } } RecordType::~RecordType() { for(int i = 0; i < (int)components.size(); ++i) { delete components.at(i); } components.clear(); } bool RecordType::isReferable() { return referable; } void RecordType::addComponent(std::string name, DataType* type) { Component* component = new Component(name, type); components.push_back(component); } int RecordType::getComponentIndex(std::string fieldName) { for(int i = 0; i < (int)components.size(); ++i) { if(components.at(i)->getName() == fieldName) { return i; } } return -1; } Component* RecordType::getComponent(std::string fieldName) { for(int i = 0; i < (int)components.size(); ++i) { if(components.at(i)->getName() == fieldName) { return components.at(i); } } return NULL; } int RecordType::count() { return (int)components.size(); } Component* RecordType::getComponent(int i) { return components.at(i); } //std::vector RecordType::getComponents() //{ //} std::string RecordType::writeOut(int indent) { bool isTuple = true; for(int i = 0; i < (int)components.size(); ++i) { std::istringstream oss(components.at(i)->getName()); int name; oss >> name; if(name != i) { isTuple = false; break; } } std::string s; if(isTuple == false) { s += "{\n"; } else { s += "( "; } indent += 1; for(int i = 0; i < (int)components.size(); ++i) { if(isTuple == false) { s.append(indent * 2, ' '); s += components.at(i)->getName() + " : "; } s += components.at(i)->getDataBoard()->writeOut(indent); if(i != ((int)components.size()-1)) { s += ","; } if(isTuple == false) { s += "\n"; } else { s += " "; } } indent -= 1; if(isTuple == false) { s.append(indent * 2, ' '); s += "}"; } else { s += ")"; } return s; } } }