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