]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/cpp/DataBoardTest/DataBoard/DataValueRepository.cpp
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.databoard / cpp / DataBoardTest / DataBoard / DataValueRepository.cpp
index dd5e0653234941cdec98427e2da468aac5dffc47..6ddea3ad4cc4bf9edf9196c8ce7bdf253019a16e 100644 (file)
-#include <string>\r
-\r
-#include "DataValueRepository.h"\r
-\r
-#include "DataBoardRepository.h"\r
-#include "Value.h"\r
-#include "RecordValue.h"\r
-#include "StringValue.h"\r
-#include "IntegerValue.h"\r
-#include "DoubleValue.h"\r
-#include "BooleanValue.h"\r
-#include "FloatValue.h"\r
-#include "LongValue.h"\r
-#include "MapValue.h"\r
-#include "ArrayValue.h"\r
-#include "OptionalValue.h"\r
-#include "UnionValue.h"\r
-#include "VariantValue.h"\r
-\r
-#include "RecordType.h"\r
-#include "Component.h"\r
-#include "BooleanType.h"\r
-#include "StringType.h"\r
-#include "IntegerType.h"\r
-#include "DoubleType.h"\r
-#include "FloatType.h"\r
-#include "LongType.h"\r
-#include "MapType.h"\r
-#include "ArrayType.h"\r
-#include "OptionalType.h"\r
-#include "UnionType.h"\r
-#include "VariantType.h"\r
-\r
-#include "Constants.h"\r
-\r
-#include <string>\r
-#include <iostream>\r
-#include <sstream>\r
-\r
-namespace Databoard {\r
-       namespace Value {\r
-\r
-               std::string strDataValueDefinition::writeOut() const\r
-               {\r
-                       std::string r;\r
-\r
-                       r += name + " : " + type + " = ";\r
-\r
-                       if(value != NULL)\r
-                       {\r
-                               r += value->writeOut();\r
-                       }\r
-\r
-                       return r;\r
-               }\r
-\r
-               DataValueRepository::DataValueRepository()\r
-               {\r
-               }\r
-\r
-               DataValueRepository::~DataValueRepository()\r
-               {\r
-                       for(int i=0;i<(int)values.size();++i)\r
-                       {\r
-                               delete values.at(i).value;\r
-                       }\r
-\r
-                       values.size();\r
-               }\r
-\r
-               void DataValueRepository::addDataValue(std::string name, std::string type, Value* dataValue)\r
-               {\r
-                       strDataValueDefinition value_;\r
-\r
-                       value_.name = name;\r
-                       value_.type = type;\r
-                       value_.value = dataValue;\r
-\r
-                       values.push_back(value_);\r
-               }\r
-\r
-               const Databoard::Type::strTypeDefinition* DataValueRepository::parseTypeReference(pANTLR3_BASE_TREE tree)\r
-               {\r
-                       switch(tree->getType(tree)) {\r
-                               case TYPE_REFERENCE:\r
-\r
-                                       if(tree->getChildCount(tree) == 1)\r
-                                       {\r
-                                               pANTLR3_BASE_TREE referenceName = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);\r
-\r
-                                               std::string id((char*)referenceName->getText(referenceName)->chars);\r
-\r
-                                               const Databoard::Type::strTypeDefinition* dataBoard = dataBoardRepository->get(id);\r
-\r
-                                               return dataBoard;\r
-                                       }\r
-\r
-                                       break;\r
-                               default:\r
-                                       break;\r
-                       }\r
-\r
-                       return NULL;\r
-               }\r
-\r
-               Value* DataValueRepository::parseValues(pANTLR3_BASE_TREE tree, Databoard::Type::DataType* dataBoard, int indent)\r
-               {\r
-                       if(dynamic_cast<Databoard::Type::OptionalType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::OptionalType* optionalType = (Databoard::Type::OptionalType*)dataBoard;\r
-\r
-                               Value* value = parseValues(tree, optionalType->getComponentType(), indent + 1);\r
-\r
-                               OptionalValue* optionalValue = new OptionalValue(optionalType);\r
-\r
-                               optionalValue->setValue(value);\r
-\r
-                               return optionalValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::StringType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::StringType* stringType = (Databoard::Type::StringType*)dataBoard;\r
-\r
-                               StringValue* stringValue = new StringValue(dataBoard);\r
-\r
-                               std::string value((char*)tree->getText(tree)->chars);\r
-\r
-                               value = removeQuotes(value);\r
-\r
-                               stringValue->setValue(value);\r
-\r
-                               return stringValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::IntegerType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::IntegerType* integerType = (Databoard::Type::IntegerType*)dataBoard;\r
-\r
-                               IntegerValue* integerValue = new IntegerValue(dataBoard);\r
-\r
-                               std::istringstream iss((char*)tree->getText(tree)->chars);\r
-\r
-                               int value;\r
-\r
-                               iss >> value;\r
-\r
-                               integerValue->setValue(value);\r
-\r
-                               return integerValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::LongType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::LongType* longType = (Databoard::Type::LongType*)dataBoard;\r
-\r
-                               LongValue* longValue = new LongValue(dataBoard);\r
-\r
-                               std::istringstream iss((char*)tree->getText(tree)->chars);\r
-\r
-                               long value;\r
-\r
-                               iss >> value;\r
-\r
-                               longValue->setValue(value);\r
-\r
-                               return longValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::FloatType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::FloatType* floatType = (Databoard::Type::FloatType*)dataBoard;\r
-\r
-                               FloatValue* floatValue = new FloatValue(dataBoard);\r
-\r
-                               std::istringstream iss((char*)tree->getText(tree)->chars);\r
-\r
-                               float value;\r
-\r
-                               iss >> value;\r
-\r
-                               floatValue->setValue(value);\r
-\r
-                               return floatValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::DoubleType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::DoubleType* doubleType = (Databoard::Type::DoubleType*)dataBoard;\r
-\r
-                               DoubleValue* doubleValue = new DoubleValue(dataBoard);\r
-\r
-                               std::istringstream iss((char*)tree->getText(tree)->chars);\r
-\r
-                               double value;\r
-\r
-                               iss >> value;\r
-\r
-                               doubleValue->setValue(value);\r
-\r
-                               return doubleValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::RecordType*>(dataBoard) != NULL)\r
-                       {\r
-                               if(tree->getType(tree) == TUPLE)\r
-                               {\r
-                                       Databoard::Type::RecordType* recordType = (Databoard::Type::RecordType*)dataBoard;\r
-\r
-                                       RecordValue* recordValue = new RecordValue(recordType);\r
-\r
-                                       int i2 = (int)tree->getChildCount(tree);\r
-                                       int i3 = recordType->count();\r
-\r
-                                       if((int)tree->getChildCount(tree) == recordType->count())\r
-                                       {\r
-                                               for(int i=0;i<(int)tree->getChildCount(tree);++i)\r
-                                               {\r
-                                                       pANTLR3_BASE_TREE value = (pANTLR3_BASE_TREE)tree->getChild(tree, i);\r
-\r
-                                                       std::string strId((char*)value->getText(value)->chars);\r
-\r
-                                                       Databoard::Type::Component* component = recordType->getComponent(i);\r
-\r
-                                                       if(component != NULL)\r
-                                                       {\r
-                                                               Databoard::Type::DataType* dataBoardType = component->getDataBoard();\r
-\r
-                                                               Value* childValue = parseValues(value, dataBoardType, indent + 1);\r
-\r
-                                                               recordValue->setField(i, childValue);\r
-                                                       }\r
-                                               }\r
-\r
-                                               return recordValue;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               std::cout << "mismatch in tuple count: " << (int)tree->getChildCount(tree) << " != " << recordType->count() << std::endl;\r
-                                               return NULL;\r
-                                       }\r
-                               }\r
-                               else if(tree->getType(tree) == RECORD)\r
-                               {\r
-                                       Databoard::Type::RecordType* recordType = (Databoard::Type::RecordType*)dataBoard;\r
-\r
-                                       RecordValue* recordValue = new RecordValue(recordType);\r
-\r
-                                       for(int i=0;i<(int)tree->getChildCount(tree);++i)\r
-                                       {\r
-                                               pANTLR3_BASE_TREE assignment = (pANTLR3_BASE_TREE)tree->getChild(tree, i);\r
-\r
-                                               if(assignment->getType(assignment) == ASSIGNMENT)\r
-                                               {\r
-                                                       if(assignment->getChildCount(assignment) == 2)\r
-                                                       {\r
-                                                               pANTLR3_BASE_TREE id = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 0);\r
-                                                               pANTLR3_BASE_TREE value = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 1);\r
-\r
-                                                               std::string strId((char*)id->getText(id)->chars);\r
-\r
-                                                               Databoard::Type::Component* component = recordType->getComponent(strId);\r
-\r
-                                                               if(component != NULL)\r
-                                                               {\r
-                                                                       Databoard::Type::DataType* dataBoardType = component->getDataBoard();\r
-\r
-                                                                       if(dataBoardType != NULL)\r
-                                                                       {\r
-                                                                               Value* childValue = parseValues(value, dataBoardType, indent + 1);\r
-\r
-                                                                               int index = recordType->getComponentIndex(strId);\r
-\r
-                                                                               recordValue->setField(index, childValue);\r
-                                                                       }\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                       }\r
-\r
-                                       return recordValue;\r
-                               }\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::MapType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::MapType* mapType = (Databoard::Type::MapType*)dataBoard;\r
-\r
-                               MapValue* mapValue = new MapValue(mapType);\r
-\r
-                               int childCount = tree->getChildCount(tree);\r
-\r
-                               if(childCount > 0)\r
-                               {\r
-                                       for(int i = 0; i < childCount; ++i)\r
-                                       {\r
-                                               pANTLR3_BASE_TREE assignment = (pANTLR3_BASE_TREE)tree->getChild(tree, i);\r
-\r
-                                               if(assignment->getType(assignment) == ASSIGNMENT)\r
-                                               {\r
-                                                       if(assignment->getChildCount(assignment) == 2)\r
-                                                       {\r
-                                                               pANTLR3_BASE_TREE key = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 0);\r
-                                                               pANTLR3_BASE_TREE value = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 1);\r
-\r
-                                                               std::string strKey((char*)key->getText(key)->chars);\r
-                                                               std::string strValue((char*)value->getText(value)->chars);\r
-\r
-                                                               strKey = removeQuotes(strKey);\r
-                                                               strValue = removeQuotes(strValue);\r
-\r
-                                                               Value* keyValue = parseValues(key, mapType->getKeyType(), indent + 1);\r
-                                                               Value* valueValue = parseValues(value, mapType->getValueType(), indent + 1);\r
-\r
-                                                               if(keyValue != NULL && valueValue != NULL)\r
-                                                               {\r
-                                                                       mapValue->put(keyValue, valueValue);\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-                               return mapValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::ArrayType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::ArrayType* arrayType = (Databoard::Type::ArrayType*)dataBoard;\r
-\r
-                               ArrayValue* arrayValue = new ArrayValue(arrayType);\r
-\r
-                               int childCount = tree->getChildCount(tree);\r
-\r
-                               if(childCount > 0)\r
-                               {\r
-                                       for(int i = 0; i < childCount; ++i)\r
-                                       {\r
-                                               pANTLR3_BASE_TREE assignment = (pANTLR3_BASE_TREE)tree->getChild(tree, i);\r
-\r
-                                               Databoard::Type::DataType* dataType = arrayType->getComponentType();\r
-\r
-                                               Value* value = parseValues(assignment, dataType, indent + 1);\r
-\r
-                                               arrayValue->add(value);\r
-\r
-\r
-                                               //Value* keyValue = parseValues(key, dataType, indent + 1);\r
-\r
-\r
-                                               //      if(assignment->getType(assignment) == ASSIGNMENT)\r
-                                               //      {\r
-                                               //              if(assignment->getChildCount(assignment) == 2)\r
-                                               //              {\r
-                                               //                      pANTLR3_BASE_TREE key = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 0);\r
-                                               //                      pANTLR3_BASE_TREE value = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 1);\r
-\r
-                                               //                      std::string strKey((char*)key->getText(key)->chars);\r
-                                               //                      std::string strValue((char*)value->getText(value)->chars);\r
-\r
-                                               //                      strKey = removeQuotes(strKey);\r
-                                               //                      strValue = removeQuotes(strValue);\r
-\r
-                                               //                      Value* keyValue = parseValues(key, mapType->getKeyType(), indent + 1);\r
-                                               //                      Value* valueValue = parseValues(value, mapType->getValueType(), indent + 1);\r
-\r
-                                               //                      if(keyValue != NULL && valueValue != NULL)\r
-                                               //                      {\r
-                                               //                              mapValue->put(keyValue, valueValue);\r
-                                               //                      }\r
-                                               //              }\r
-                                               //      }\r
-                                       }\r
-                               }\r
-\r
-                               return arrayValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::BooleanType*>(dataBoard) != NULL)\r
-                       {\r
-                               Databoard::Type::BooleanType* booleanType = (Databoard::Type::BooleanType*)dataBoard;\r
-\r
-                               BooleanValue* booleanValue = new BooleanValue(dataBoard);\r
-\r
-                               std::string value((char*)tree->getText(tree)->chars);\r
-\r
-                               if(value == STR_TRUE)\r
-                               {\r
-                                       booleanValue->setValue(true);\r
-                               }\r
-                               else\r
-                               {\r
-                                       booleanValue->setValue(false);\r
-                               }\r
-\r
-                               return booleanValue;\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::UnionType*>(dataBoard) != NULL)\r
-                       {\r
-                               if(tree->getChildCount(tree) == 2)\r
-                               {\r
-                                       pANTLR3_BASE_TREE id = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);\r
-                                       pANTLR3_BASE_TREE type = (pANTLR3_BASE_TREE)tree->getChild(tree, 1);\r
-\r
-                                       Databoard::Type::UnionType* unionType = (Databoard::Type::UnionType*)dataBoard;\r
-\r
-                                       UnionValue* unionValue = new UnionValue(dataBoard);\r
-                                       \r
-\r
-                                       std::string strId((char*)id->getText(id)->chars);\r
-\r
-                                       int tag = unionType->getComponentIndex(strId);\r
-\r
-                                       Databoard::Type::Component* component = unionType->getComponent(tag);\r
-\r
-                                       if(component != NULL)\r
-                                       {\r
-                                               Databoard::Type::DataType* dataType = component->getDataBoard();\r
-\r
-                                               if(dataType != NULL)\r
-                                               {\r
-                                                       Databoard::Value::Value* value = parseValues(type, dataType, indent);\r
-\r
-                                                       unionValue->setValue(tag, value);\r
-                                               }\r
-                                       }\r
-\r
-                                       return unionValue;\r
-                               }\r
-                       }\r
-                       else if(dynamic_cast<Databoard::Type::VariantType*>(dataBoard) != NULL)\r
-                       {\r
-                               if(tree->getChildCount(tree) == 0)\r
-                               {\r
-                                       std::string valueId((char*)tree->getText(tree)->chars);\r
-\r
-                                       // check the string\r
-                                       if(valueId.length() >= 2)\r
-                                       {\r
-                                               if(valueId.at(0) == '"' && valueId.at(valueId.length()-1) == '"')\r
-                                               {\r
-                                                       valueId = removeQuotes(valueId);\r
-\r
-                                                       Databoard::Type::StringType* stringType = new Databoard::Type::StringType();\r
-                                                       stringType->setNotBuiltIn();\r
-\r
-                                                       Databoard::Value::StringValue* stringValue = new Databoard::Value::StringValue(stringType);\r
-\r
-                                                       stringValue->setValue(valueId);\r
-\r
-                                                       Databoard::Value::VariantValue* variantValue = new VariantValue(dataBoard);\r
-                                                       variantValue->setValue(stringValue);\r
-\r
-                                                       return variantValue;\r
-                                               }\r
-                                       }\r
-\r
-                                       if(strEquals((char*)tree->getText(tree)->chars, STR_TRUE) == true)\r
-                                       {\r
-                                               Databoard::Type::BooleanType* booleanType = new Databoard::Type::BooleanType();\r
-                                               booleanType->setNotBuiltIn();\r
-\r
-                                               Databoard::Value::BooleanValue* booleanValue = new Databoard::Value::BooleanValue(booleanType);\r
-\r
-                                               booleanValue->setValue(true);\r
-\r
-                                               Databoard::Value::VariantValue* variantValue = new VariantValue(dataBoard);\r
-                                               variantValue->setValue(booleanValue);\r
-\r
-                                               return variantValue;\r
-                                       }\r
-                                       else if(strEquals((char*)tree->getText(tree)->chars, STR_FALSE) == true)\r
-                                       {\r
-                                               Databoard::Type::BooleanType* booleanType = new Databoard::Type::BooleanType();\r
-                                               booleanType->setNotBuiltIn();\r
-\r
-                                               Databoard::Value::BooleanValue* booleanValue = new Databoard::Value::BooleanValue(booleanType);\r
-\r
-                                               booleanValue->setValue(false);\r
-\r
-                                               Databoard::Value::VariantValue* variantValue = new VariantValue(dataBoard);\r
-                                               variantValue->setValue(booleanValue);\r
-\r
-                                               return variantValue;\r
-                                       }\r
-\r
-                                       return NULL;\r
-                               }\r
-                               else if(tree->getChildCount(tree) == 2)\r
-                               {\r
-                                       pANTLR3_BASE_TREE id = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);\r
-                                       pANTLR3_BASE_TREE type = (pANTLR3_BASE_TREE)tree->getChild(tree, 1);\r
-\r
-                                       Databoard::Type::VariantType* variantType = (Databoard::Type::VariantType*)dataBoard;\r
-\r
-                                       Databoard::Type::temporaryname a(NULL);\r
-\r
-                                       Databoard::Type::DataType* dataType = a.parse(id);\r
-\r
-                                       \r
-                                       Databoard::Value::Value* value = parseValues(type, dataType, indent);\r
-\r
-                                       Databoard::Value::VariantValue* variantValue = new VariantValue(dataBoard);\r
-                                       variantValue->setValue(value);\r
-\r
-                                       return variantValue;\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               std::cout << "unknown: " << tree->getType(tree) << std::endl;\r
-                       }\r
-\r
-                       return NULL;\r
-               }\r
-\r
-               Value* DataValueRepository::parse(pANTLR3_BASE_TREE tree, Value* parent, int indent)\r
-               {\r
-                       switch(tree->getType(tree)) {\r
-                               case VALUE_DEFINITIONS:\r
-                                       {\r
-                                               for(int i=0;i<(int)tree->getChildCount(tree);++i)\r
-                                               {\r
-                                                       Value* value = parse((pANTLR3_BASE_TREE)tree->getChild(tree, i), parent, indent + 1);\r
-                                               }\r
-                                       }\r
-                                       break;\r
-                               case VALUE_DEFINITION:\r
-                                       {\r
-                                               if(tree->getChildCount(tree) == 3)\r
-                                               {\r
-                                                       pANTLR3_BASE_TREE id = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);\r
-                                                       pANTLR3_BASE_TREE type = (pANTLR3_BASE_TREE)tree->getChild(tree, 1);\r
-                                                       pANTLR3_BASE_TREE values = (pANTLR3_BASE_TREE)tree->getChild(tree, 2);\r
-\r
-                                                       //std::cout << id->getText(id)->chars << " : " << id->getType(id) << std::endl;\r
-                                                       //std::cout << type->getText(type)->chars << " : " << type->getType(type) << std::endl;\r
-                                                       //std::cout << values->getText(values)->chars << " : " << values->getType(values) << std::endl;\r
-\r
-                                                       const Databoard::Type::strTypeDefinition* dataBoard = parseTypeReference(type);\r
-\r
-                                                       Value* dataValue = parseValues(values, dataBoard->dataBoard, indent+1);\r
-\r
-                                                       std::string valueId((char*)id->getText(id)->chars);\r
-\r
-                                                       addDataValue(valueId, dataBoard->name, dataValue);\r
-\r
-                                                       //std::cout << "." << std::endl;\r
-                                               }\r
-                                       }\r
-                                       break;\r
-                               default:\r
-                                       break;\r
-                       }\r
-\r
-                       return NULL;\r
-               }\r
-\r
-               bool DataValueRepository::open(std::string fileName, Databoard::Type::DataBoardRepository* dataBoardRepository)\r
-               {\r
-                       pANTLR3_INPUT_STREAM input = antlr3AsciiFileStreamNew((pANTLR3_UINT8)fileName.c_str());\r
-\r
-                       if ( input == NULL )\r
-                       {\r
-                               ANTLR3_FPRINTF(stderr, "string: %s\n", fileName.c_str());\r
-                       }\r
-\r
-                       pSimanticsDataLexer lexer = SimanticsDataLexerNew(input);\r
-\r
-                       if ( lexer == NULL )\r
-                       {\r
-                               ANTLR3_FPRINTF(stderr, "Unable to create the lexer due to malloc() failure1\n");\r
-                               exit(ANTLR3_ERR_NOMEM);\r
-                       }\r
-\r
-                       pANTLR3_COMMON_TOKEN_STREAM tstream = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, TOKENSOURCE(lexer));//->pLexer->tokSource);\r
-\r
-                       if (tstream == NULL)\r
-                       {\r
-                               ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate token stream\n");\r
-                               exit(ANTLR3_ERR_NOMEM);\r
-                       }\r
-\r
-                       pSimanticsDataParser parser = SimanticsDataParserNew(tstream); // CParserNew is generated by ANTLR3\r
-\r
-                       if (parser == NULL)\r
-                       {\r
-                               ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate parser\n");\r
-                               exit(ANTLR3_ERR_NOMEM);\r
-                       }\r
-\r
-                       SimanticsDataParser_valueDefinitions_return astValue = parser->valueDefinitions(parser);\r
-\r
-                       this->dataBoardRepository = dataBoardRepository;\r
-\r
-                       bool retValue = true;\r
-\r
-                       if(lexer->pLexer->rec->state->errorCount == 0)\r
-                       {\r
-                               parse(astValue.tree);\r
-\r
-                               //print(astValue.tree);\r
-                       }\r
-                       else\r
-                       {\r
-                               retValue = false;\r
-                       }\r
-\r
-                       parser->free(parser);\r
-                       tstream->free(tstream);\r
-                       lexer->free(lexer);\r
-                       input->free(input);\r
-\r
-                       return retValue;\r
-               }\r
-\r
-               Value* DataValueRepository::open(std::string fileName, Databoard::Type::DataType* dataType)\r
-               {\r
-                       pANTLR3_INPUT_STREAM input = antlr3AsciiFileStreamNew((pANTLR3_UINT8)fileName.c_str());\r
-\r
-                       if ( input == NULL )\r
-                       {\r
-                               ANTLR3_FPRINTF(stderr, "string: %s\n", fileName.c_str());\r
-                       }\r
-\r
-                       pSimanticsDataLexer lexer = SimanticsDataLexerNew(input);\r
-\r
-                       if ( lexer == NULL )\r
-                       {\r
-                               ANTLR3_FPRINTF(stderr, "Unable to create the lexer due to malloc() failure1\n");\r
-                               exit(ANTLR3_ERR_NOMEM);\r
-                       }\r
-\r
-                       pANTLR3_COMMON_TOKEN_STREAM tstream = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, TOKENSOURCE(lexer));//->pLexer->tokSource);\r
-\r
-                       if (tstream == NULL)\r
-                       {\r
-                               ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate token stream\n");\r
-                               exit(ANTLR3_ERR_NOMEM);\r
-                       }\r
-\r
-                       pSimanticsDataParser parser = SimanticsDataParserNew(tstream); // CParserNew is generated by ANTLR3\r
-\r
-                       if (parser == NULL)\r
-                       {\r
-                               ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate parser\n");\r
-                               exit(ANTLR3_ERR_NOMEM);\r
-                       }\r
-\r
-                       SimanticsDataParser_value_return astValue = parser->value(parser);\r
-\r
-                       Value* retValue = NULL;\r
-\r
-                       dataBoardRepository = NULL;\r
-\r
-                       if(lexer->pLexer->rec->state->errorCount == 0)\r
-                       {\r
-                               retValue = parseValues(astValue.tree, dataType, 0);\r
-\r
-                               //print(astValue.tree);\r
-                       }\r
-                       else\r
-                       {\r
-                               retValue = false;\r
-                       }\r
-\r
-                       parser->free(parser);\r
-                       tstream->free(tstream);\r
-                       lexer->free(lexer);\r
-                       input->free(input);\r
-\r
-                       return retValue;\r
-               }\r
-\r
-               void DataValueRepository::print(pANTLR3_BASE_TREE tree, int indent)\r
-               {\r
-                       for(int i=0;i<indent;++i)\r
-                               std::cout << "  ";\r
-\r
-                       std::cout << tree->getText(tree)->chars << " " << \r
-                               tree->getType(tree) << std::endl;\r
-\r
-                       for(int i=0;i<(int)tree->getChildCount(tree);++i)\r
-                       {\r
-                               print((pANTLR3_BASE_TREE)tree->getChild(tree, i), indent + 1);\r
-                       }\r
-               }\r
-\r
-               int DataValueRepository::count()\r
-               {\r
-                       return (int)values.size();\r
-               }\r
-\r
-               const strDataValueDefinition* DataValueRepository::getDataValue(int i)\r
-               {\r
-                       if(i >= 0 && i < (int)values.size())\r
-                       {\r
-                               return &(values.at(i));\r
-                       }\r
-                       else\r
-                       {\r
-                               return NULL;\r
-                       }\r
-               }\r
-\r
-               const strDataValueDefinition* DataValueRepository::getDataValue(std::string name)\r
-               {\r
-                       for(int i = 0; i < (int)values.size(); ++i)\r
-                       {\r
-                               if(values.at(i).name == name)\r
-                               {\r
-                                       return &(values.at(i));\r
-                               }\r
-                       }\r
-\r
-                       return NULL;\r
-               }\r
-       }\r
-}\r
+#include <string>
+
+#include "DataValueRepository.h"
+
+#include "DataBoardRepository.h"
+#include "Value.h"
+#include "RecordValue.h"
+#include "StringValue.h"
+#include "IntegerValue.h"
+#include "DoubleValue.h"
+#include "BooleanValue.h"
+#include "FloatValue.h"
+#include "LongValue.h"
+#include "MapValue.h"
+#include "ArrayValue.h"
+#include "OptionalValue.h"
+#include "UnionValue.h"
+#include "VariantValue.h"
+
+#include "RecordType.h"
+#include "Component.h"
+#include "BooleanType.h"
+#include "StringType.h"
+#include "IntegerType.h"
+#include "DoubleType.h"
+#include "FloatType.h"
+#include "LongType.h"
+#include "MapType.h"
+#include "ArrayType.h"
+#include "OptionalType.h"
+#include "UnionType.h"
+#include "VariantType.h"
+
+#include "Constants.h"
+
+#include <string>
+#include <iostream>
+#include <sstream>
+
+namespace Databoard {
+       namespace Value {
+
+               std::string strDataValueDefinition::writeOut() const
+               {
+                       std::string r;
+
+                       r += name + " : " + type + " = ";
+
+                       if(value != NULL)
+                       {
+                               r += value->writeOut();
+                       }
+
+                       return r;
+               }
+
+               DataValueRepository::DataValueRepository()
+               {
+               }
+
+               DataValueRepository::~DataValueRepository()
+               {
+                       for(int i=0;i<(int)values.size();++i)
+                       {
+                               delete values.at(i).value;
+                       }
+
+                       values.size();
+               }
+
+               void DataValueRepository::addDataValue(std::string name, std::string type, Value* dataValue)
+               {
+                       strDataValueDefinition value_;
+
+                       value_.name = name;
+                       value_.type = type;
+                       value_.value = dataValue;
+
+                       values.push_back(value_);
+               }
+
+               const Databoard::Type::strTypeDefinition* DataValueRepository::parseTypeReference(pANTLR3_BASE_TREE tree)
+               {
+                       switch(tree->getType(tree)) {
+                               case TYPE_REFERENCE:
+
+                                       if(tree->getChildCount(tree) == 1)
+                                       {
+                                               pANTLR3_BASE_TREE referenceName = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);
+
+                                               std::string id((char*)referenceName->getText(referenceName)->chars);
+
+                                               const Databoard::Type::strTypeDefinition* dataBoard = dataBoardRepository->get(id);
+
+                                               return dataBoard;
+                                       }
+
+                                       break;
+                               default:
+                                       break;
+                       }
+
+                       return NULL;
+               }
+
+               Value* DataValueRepository::parseValues(pANTLR3_BASE_TREE tree, Databoard::Type::DataType* dataBoard, int indent)
+               {
+                       if(dynamic_cast<Databoard::Type::OptionalType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::OptionalType* optionalType = (Databoard::Type::OptionalType*)dataBoard;
+
+                               Value* value = parseValues(tree, optionalType->getComponentType(), indent + 1);
+
+                               OptionalValue* optionalValue = new OptionalValue(optionalType);
+
+                               optionalValue->setValue(value);
+
+                               return optionalValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::StringType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::StringType* stringType = (Databoard::Type::StringType*)dataBoard;
+
+                               StringValue* stringValue = new StringValue(dataBoard);
+
+                               std::string value((char*)tree->getText(tree)->chars);
+
+                               value = removeQuotes(value);
+
+                               stringValue->setValue(value);
+
+                               return stringValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::IntegerType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::IntegerType* integerType = (Databoard::Type::IntegerType*)dataBoard;
+
+                               IntegerValue* integerValue = new IntegerValue(dataBoard);
+
+                               std::istringstream iss((char*)tree->getText(tree)->chars);
+
+                               int value;
+
+                               iss >> value;
+
+                               integerValue->setValue(value);
+
+                               return integerValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::LongType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::LongType* longType = (Databoard::Type::LongType*)dataBoard;
+
+                               LongValue* longValue = new LongValue(dataBoard);
+
+                               std::istringstream iss((char*)tree->getText(tree)->chars);
+
+                               long value;
+
+                               iss >> value;
+
+                               longValue->setValue(value);
+
+                               return longValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::FloatType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::FloatType* floatType = (Databoard::Type::FloatType*)dataBoard;
+
+                               FloatValue* floatValue = new FloatValue(dataBoard);
+
+                               std::istringstream iss((char*)tree->getText(tree)->chars);
+
+                               float value;
+
+                               iss >> value;
+
+                               floatValue->setValue(value);
+
+                               return floatValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::DoubleType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::DoubleType* doubleType = (Databoard::Type::DoubleType*)dataBoard;
+
+                               DoubleValue* doubleValue = new DoubleValue(dataBoard);
+
+                               std::istringstream iss((char*)tree->getText(tree)->chars);
+
+                               double value;
+
+                               iss >> value;
+
+                               doubleValue->setValue(value);
+
+                               return doubleValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::RecordType*>(dataBoard) != NULL)
+                       {
+                               if(tree->getType(tree) == TUPLE)
+                               {
+                                       Databoard::Type::RecordType* recordType = (Databoard::Type::RecordType*)dataBoard;
+
+                                       RecordValue* recordValue = new RecordValue(recordType);
+
+                                       int i2 = (int)tree->getChildCount(tree);
+                                       int i3 = recordType->count();
+
+                                       if((int)tree->getChildCount(tree) == recordType->count())
+                                       {
+                                               for(int i=0;i<(int)tree->getChildCount(tree);++i)
+                                               {
+                                                       pANTLR3_BASE_TREE value = (pANTLR3_BASE_TREE)tree->getChild(tree, i);
+
+                                                       std::string strId((char*)value->getText(value)->chars);
+
+                                                       Databoard::Type::Component* component = recordType->getComponent(i);
+
+                                                       if(component != NULL)
+                                                       {
+                                                               Databoard::Type::DataType* dataBoardType = component->getDataBoard();
+
+                                                               Value* childValue = parseValues(value, dataBoardType, indent + 1);
+
+                                                               recordValue->setField(i, childValue);
+                                                       }
+                                               }
+
+                                               return recordValue;
+                                       }
+                                       else
+                                       {
+                                               std::cout << "mismatch in tuple count: " << (int)tree->getChildCount(tree) << " != " << recordType->count() << std::endl;
+                                               return NULL;
+                                       }
+                               }
+                               else if(tree->getType(tree) == RECORD)
+                               {
+                                       Databoard::Type::RecordType* recordType = (Databoard::Type::RecordType*)dataBoard;
+
+                                       RecordValue* recordValue = new RecordValue(recordType);
+
+                                       for(int i=0;i<(int)tree->getChildCount(tree);++i)
+                                       {
+                                               pANTLR3_BASE_TREE assignment = (pANTLR3_BASE_TREE)tree->getChild(tree, i);
+
+                                               if(assignment->getType(assignment) == ASSIGNMENT)
+                                               {
+                                                       if(assignment->getChildCount(assignment) == 2)
+                                                       {
+                                                               pANTLR3_BASE_TREE id = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 0);
+                                                               pANTLR3_BASE_TREE value = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 1);
+
+                                                               std::string strId((char*)id->getText(id)->chars);
+
+                                                               Databoard::Type::Component* component = recordType->getComponent(strId);
+
+                                                               if(component != NULL)
+                                                               {
+                                                                       Databoard::Type::DataType* dataBoardType = component->getDataBoard();
+
+                                                                       if(dataBoardType != NULL)
+                                                                       {
+                                                                               Value* childValue = parseValues(value, dataBoardType, indent + 1);
+
+                                                                               int index = recordType->getComponentIndex(strId);
+
+                                                                               recordValue->setField(index, childValue);
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                       }
+
+                                       return recordValue;
+                               }
+                       }
+                       else if(dynamic_cast<Databoard::Type::MapType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::MapType* mapType = (Databoard::Type::MapType*)dataBoard;
+
+                               MapValue* mapValue = new MapValue(mapType);
+
+                               int childCount = tree->getChildCount(tree);
+
+                               if(childCount > 0)
+                               {
+                                       for(int i = 0; i < childCount; ++i)
+                                       {
+                                               pANTLR3_BASE_TREE assignment = (pANTLR3_BASE_TREE)tree->getChild(tree, i);
+
+                                               if(assignment->getType(assignment) == ASSIGNMENT)
+                                               {
+                                                       if(assignment->getChildCount(assignment) == 2)
+                                                       {
+                                                               pANTLR3_BASE_TREE key = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 0);
+                                                               pANTLR3_BASE_TREE value = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 1);
+
+                                                               std::string strKey((char*)key->getText(key)->chars);
+                                                               std::string strValue((char*)value->getText(value)->chars);
+
+                                                               strKey = removeQuotes(strKey);
+                                                               strValue = removeQuotes(strValue);
+
+                                                               Value* keyValue = parseValues(key, mapType->getKeyType(), indent + 1);
+                                                               Value* valueValue = parseValues(value, mapType->getValueType(), indent + 1);
+
+                                                               if(keyValue != NULL && valueValue != NULL)
+                                                               {
+                                                                       mapValue->put(keyValue, valueValue);
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               return mapValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::ArrayType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::ArrayType* arrayType = (Databoard::Type::ArrayType*)dataBoard;
+
+                               ArrayValue* arrayValue = new ArrayValue(arrayType);
+
+                               int childCount = tree->getChildCount(tree);
+
+                               if(childCount > 0)
+                               {
+                                       for(int i = 0; i < childCount; ++i)
+                                       {
+                                               pANTLR3_BASE_TREE assignment = (pANTLR3_BASE_TREE)tree->getChild(tree, i);
+
+                                               Databoard::Type::DataType* dataType = arrayType->getComponentType();
+
+                                               Value* value = parseValues(assignment, dataType, indent + 1);
+
+                                               arrayValue->add(value);
+
+
+                                               //Value* keyValue = parseValues(key, dataType, indent + 1);
+
+
+                                               //      if(assignment->getType(assignment) == ASSIGNMENT)
+                                               //      {
+                                               //              if(assignment->getChildCount(assignment) == 2)
+                                               //              {
+                                               //                      pANTLR3_BASE_TREE key = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 0);
+                                               //                      pANTLR3_BASE_TREE value = (pANTLR3_BASE_TREE)assignment->getChild(assignment, 1);
+
+                                               //                      std::string strKey((char*)key->getText(key)->chars);
+                                               //                      std::string strValue((char*)value->getText(value)->chars);
+
+                                               //                      strKey = removeQuotes(strKey);
+                                               //                      strValue = removeQuotes(strValue);
+
+                                               //                      Value* keyValue = parseValues(key, mapType->getKeyType(), indent + 1);
+                                               //                      Value* valueValue = parseValues(value, mapType->getValueType(), indent + 1);
+
+                                               //                      if(keyValue != NULL && valueValue != NULL)
+                                               //                      {
+                                               //                              mapValue->put(keyValue, valueValue);
+                                               //                      }
+                                               //              }
+                                               //      }
+                                       }
+                               }
+
+                               return arrayValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::BooleanType*>(dataBoard) != NULL)
+                       {
+                               Databoard::Type::BooleanType* booleanType = (Databoard::Type::BooleanType*)dataBoard;
+
+                               BooleanValue* booleanValue = new BooleanValue(dataBoard);
+
+                               std::string value((char*)tree->getText(tree)->chars);
+
+                               if(value == STR_TRUE)
+                               {
+                                       booleanValue->setValue(true);
+                               }
+                               else
+                               {
+                                       booleanValue->setValue(false);
+                               }
+
+                               return booleanValue;
+                       }
+                       else if(dynamic_cast<Databoard::Type::UnionType*>(dataBoard) != NULL)
+                       {
+                               if(tree->getChildCount(tree) == 2)
+                               {
+                                       pANTLR3_BASE_TREE id = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);
+                                       pANTLR3_BASE_TREE type = (pANTLR3_BASE_TREE)tree->getChild(tree, 1);
+
+                                       Databoard::Type::UnionType* unionType = (Databoard::Type::UnionType*)dataBoard;
+
+                                       UnionValue* unionValue = new UnionValue(dataBoard);
+                                       
+
+                                       std::string strId((char*)id->getText(id)->chars);
+
+                                       int tag = unionType->getComponentIndex(strId);
+
+                                       Databoard::Type::Component* component = unionType->getComponent(tag);
+
+                                       if(component != NULL)
+                                       {
+                                               Databoard::Type::DataType* dataType = component->getDataBoard();
+
+                                               if(dataType != NULL)
+                                               {
+                                                       Databoard::Value::Value* value = parseValues(type, dataType, indent);
+
+                                                       unionValue->setValue(tag, value);
+                                               }
+                                       }
+
+                                       return unionValue;
+                               }
+                       }
+                       else if(dynamic_cast<Databoard::Type::VariantType*>(dataBoard) != NULL)
+                       {
+                               if(tree->getChildCount(tree) == 0)
+                               {
+                                       std::string valueId((char*)tree->getText(tree)->chars);
+
+                                       // check the string
+                                       if(valueId.length() >= 2)
+                                       {
+                                               if(valueId.at(0) == '"' && valueId.at(valueId.length()-1) == '"')
+                                               {
+                                                       valueId = removeQuotes(valueId);
+
+                                                       Databoard::Type::StringType* stringType = new Databoard::Type::StringType();
+                                                       stringType->setNotBuiltIn();
+
+                                                       Databoard::Value::StringValue* stringValue = new Databoard::Value::StringValue(stringType);
+
+                                                       stringValue->setValue(valueId);
+
+                                                       Databoard::Value::VariantValue* variantValue = new VariantValue(dataBoard);
+                                                       variantValue->setValue(stringValue);
+
+                                                       return variantValue;
+                                               }
+                                       }
+
+                                       if(strEquals((char*)tree->getText(tree)->chars, STR_TRUE) == true)
+                                       {
+                                               Databoard::Type::BooleanType* booleanType = new Databoard::Type::BooleanType();
+                                               booleanType->setNotBuiltIn();
+
+                                               Databoard::Value::BooleanValue* booleanValue = new Databoard::Value::BooleanValue(booleanType);
+
+                                               booleanValue->setValue(true);
+
+                                               Databoard::Value::VariantValue* variantValue = new VariantValue(dataBoard);
+                                               variantValue->setValue(booleanValue);
+
+                                               return variantValue;
+                                       }
+                                       else if(strEquals((char*)tree->getText(tree)->chars, STR_FALSE) == true)
+                                       {
+                                               Databoard::Type::BooleanType* booleanType = new Databoard::Type::BooleanType();
+                                               booleanType->setNotBuiltIn();
+
+                                               Databoard::Value::BooleanValue* booleanValue = new Databoard::Value::BooleanValue(booleanType);
+
+                                               booleanValue->setValue(false);
+
+                                               Databoard::Value::VariantValue* variantValue = new VariantValue(dataBoard);
+                                               variantValue->setValue(booleanValue);
+
+                                               return variantValue;
+                                       }
+
+                                       return NULL;
+                               }
+                               else if(tree->getChildCount(tree) == 2)
+                               {
+                                       pANTLR3_BASE_TREE id = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);
+                                       pANTLR3_BASE_TREE type = (pANTLR3_BASE_TREE)tree->getChild(tree, 1);
+
+                                       Databoard::Type::VariantType* variantType = (Databoard::Type::VariantType*)dataBoard;
+
+                                       Databoard::Type::temporaryname a(NULL);
+
+                                       Databoard::Type::DataType* dataType = a.parse(id);
+
+                                       
+                                       Databoard::Value::Value* value = parseValues(type, dataType, indent);
+
+                                       Databoard::Value::VariantValue* variantValue = new VariantValue(dataBoard);
+                                       variantValue->setValue(value);
+
+                                       return variantValue;
+                               }
+                       }
+                       else
+                       {
+                               std::cout << "unknown: " << tree->getType(tree) << std::endl;
+                       }
+
+                       return NULL;
+               }
+
+               Value* DataValueRepository::parse(pANTLR3_BASE_TREE tree, Value* parent, int indent)
+               {
+                       switch(tree->getType(tree)) {
+                               case VALUE_DEFINITIONS:
+                                       {
+                                               for(int i=0;i<(int)tree->getChildCount(tree);++i)
+                                               {
+                                                       Value* value = parse((pANTLR3_BASE_TREE)tree->getChild(tree, i), parent, indent + 1);
+                                               }
+                                       }
+                                       break;
+                               case VALUE_DEFINITION:
+                                       {
+                                               if(tree->getChildCount(tree) == 3)
+                                               {
+                                                       pANTLR3_BASE_TREE id = (pANTLR3_BASE_TREE)tree->getChild(tree, 0);
+                                                       pANTLR3_BASE_TREE type = (pANTLR3_BASE_TREE)tree->getChild(tree, 1);
+                                                       pANTLR3_BASE_TREE values = (pANTLR3_BASE_TREE)tree->getChild(tree, 2);
+
+                                                       //std::cout << id->getText(id)->chars << " : " << id->getType(id) << std::endl;
+                                                       //std::cout << type->getText(type)->chars << " : " << type->getType(type) << std::endl;
+                                                       //std::cout << values->getText(values)->chars << " : " << values->getType(values) << std::endl;
+
+                                                       const Databoard::Type::strTypeDefinition* dataBoard = parseTypeReference(type);
+
+                                                       Value* dataValue = parseValues(values, dataBoard->dataBoard, indent+1);
+
+                                                       std::string valueId((char*)id->getText(id)->chars);
+
+                                                       addDataValue(valueId, dataBoard->name, dataValue);
+
+                                                       //std::cout << "." << std::endl;
+                                               }
+                                       }
+                                       break;
+                               default:
+                                       break;
+                       }
+
+                       return NULL;
+               }
+
+               bool DataValueRepository::open(std::string fileName, Databoard::Type::DataBoardRepository* dataBoardRepository)
+               {
+                       pANTLR3_INPUT_STREAM input = antlr3AsciiFileStreamNew((pANTLR3_UINT8)fileName.c_str());
+
+                       if ( input == NULL )
+                       {
+                               ANTLR3_FPRINTF(stderr, "string: %s\n", fileName.c_str());
+                       }
+
+                       pSimanticsDataLexer lexer = SimanticsDataLexerNew(input);
+
+                       if ( lexer == NULL )
+                       {
+                               ANTLR3_FPRINTF(stderr, "Unable to create the lexer due to malloc() failure1\n");
+                               exit(ANTLR3_ERR_NOMEM);
+                       }
+
+                       pANTLR3_COMMON_TOKEN_STREAM tstream = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, TOKENSOURCE(lexer));//->pLexer->tokSource);
+
+                       if (tstream == NULL)
+                       {
+                               ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate token stream\n");
+                               exit(ANTLR3_ERR_NOMEM);
+                       }
+
+                       pSimanticsDataParser parser = SimanticsDataParserNew(tstream); // CParserNew is generated by ANTLR3
+
+                       if (parser == NULL)
+                       {
+                               ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate parser\n");
+                               exit(ANTLR3_ERR_NOMEM);
+                       }
+
+                       SimanticsDataParser_valueDefinitions_return astValue = parser->valueDefinitions(parser);
+
+                       this->dataBoardRepository = dataBoardRepository;
+
+                       bool retValue = true;
+
+                       if(lexer->pLexer->rec->state->errorCount == 0)
+                       {
+                               parse(astValue.tree);
+
+                               //print(astValue.tree);
+                       }
+                       else
+                       {
+                               retValue = false;
+                       }
+
+                       parser->free(parser);
+                       tstream->free(tstream);
+                       lexer->free(lexer);
+                       input->free(input);
+
+                       return retValue;
+               }
+
+               Value* DataValueRepository::open(std::string fileName, Databoard::Type::DataType* dataType)
+               {
+                       pANTLR3_INPUT_STREAM input = antlr3AsciiFileStreamNew((pANTLR3_UINT8)fileName.c_str());
+
+                       if ( input == NULL )
+                       {
+                               ANTLR3_FPRINTF(stderr, "string: %s\n", fileName.c_str());
+                       }
+
+                       pSimanticsDataLexer lexer = SimanticsDataLexerNew(input);
+
+                       if ( lexer == NULL )
+                       {
+                               ANTLR3_FPRINTF(stderr, "Unable to create the lexer due to malloc() failure1\n");
+                               exit(ANTLR3_ERR_NOMEM);
+                       }
+
+                       pANTLR3_COMMON_TOKEN_STREAM tstream = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, TOKENSOURCE(lexer));//->pLexer->tokSource);
+
+                       if (tstream == NULL)
+                       {
+                               ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate token stream\n");
+                               exit(ANTLR3_ERR_NOMEM);
+                       }
+
+                       pSimanticsDataParser parser = SimanticsDataParserNew(tstream); // CParserNew is generated by ANTLR3
+
+                       if (parser == NULL)
+                       {
+                               ANTLR3_FPRINTF(stderr, "Out of memory trying to allocate parser\n");
+                               exit(ANTLR3_ERR_NOMEM);
+                       }
+
+                       SimanticsDataParser_value_return astValue = parser->value(parser);
+
+                       Value* retValue = NULL;
+
+                       dataBoardRepository = NULL;
+
+                       if(lexer->pLexer->rec->state->errorCount == 0)
+                       {
+                               retValue = parseValues(astValue.tree, dataType, 0);
+
+                               //print(astValue.tree);
+                       }
+                       else
+                       {
+                               retValue = false;
+                       }
+
+                       parser->free(parser);
+                       tstream->free(tstream);
+                       lexer->free(lexer);
+                       input->free(input);
+
+                       return retValue;
+               }
+
+               void DataValueRepository::print(pANTLR3_BASE_TREE tree, int indent)
+               {
+                       for(int i=0;i<indent;++i)
+                               std::cout << "  ";
+
+                       std::cout << tree->getText(tree)->chars << " " << 
+                               tree->getType(tree) << std::endl;
+
+                       for(int i=0;i<(int)tree->getChildCount(tree);++i)
+                       {
+                               print((pANTLR3_BASE_TREE)tree->getChild(tree, i), indent + 1);
+                       }
+               }
+
+               int DataValueRepository::count()
+               {
+                       return (int)values.size();
+               }
+
+               const strDataValueDefinition* DataValueRepository::getDataValue(int i)
+               {
+                       if(i >= 0 && i < (int)values.size())
+                       {
+                               return &(values.at(i));
+                       }
+                       else
+                       {
+                               return NULL;
+                       }
+               }
+
+               const strDataValueDefinition* DataValueRepository::getDataValue(std::string name)
+               {
+                       for(int i = 0; i < (int)values.size(); ++i)
+                       {
+                               if(values.at(i).name == name)
+                               {
+                                       return &(values.at(i));
+                               }
+                       }
+
+                       return NULL;
+               }
+       }
+}