--- /dev/null
+#ifdef _WIN32\r
+#include <Windows.h>\r
+#include "StackWalker.h"\r
+#endif\r
+\r
+#include "TypeParser.h"\r
+#include "ValueParser.h"\r
+\r
+#include "DataBoardRepository.h"\r
+#include "DataValueRepository.h"\r
+\r
+#include "RecordType.h"\r
+#include "Component.h"\r
+\r
+#include "RecordValue.h"\r
+#include "StringValue.h"\r
+#include "IntegerValue.h"\r
+#include "DoubleValue.h"\r
+#include "ArrayValue.h"\r
+\r
+#include "MapValue.h"\r
+#include "IntegerType.h"\r
+#include "StringType.h"\r
+#include "DataType.h"\r
+\r
+\r
+#include "NumberType.h"\r
+\r
+#include <iostream>\r
+\r
+\r
+\r
+void testParser()\r
+{\r
+ std::cout << "Output of dbt & dbv files:" << std::endl;\r
+\r
+ Databoard::Type::DataBoardRepository* typeRepo = Databoard::Type::parse("input11.dbt");\r
+\r
+ if(typeRepo == NULL)\r
+ {\r
+ std::cerr << "type repository not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Type::DataType* type = typeRepo->getDataBoard("PBEparticle");\r
+\r
+ if(type == NULL)\r
+ {\r
+ std::cerr << "type not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Value::Value* value = Databoard::Value::parse("input12.dbv", type);\r
+\r
+ if(value == NULL)\r
+ {\r
+ std::cerr << "value not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ //Databoard::Type::RecordType* r = ((Databoard::Type::RecordType*)type);\r
+\r
+ //std::cout << r->getComponentIndex("FractalIndex") << std::endl;\r
+ //std::cout << r->getComponentIndex("Bondforce") << std::endl;\r
+ //std::cout << r->getComponentIndex("Density") << std::endl;\r
+ //std::cout << r->getComponentIndex("RefractiveIndex") << std::endl;\r
+ //std::cout << r->getComponentIndex("UVabsorption") << std::endl;\r
+ //std::cout << r->getComponentIndex("SurfacePotential") << std::endl;\r
+ //std::cout << r->getComponentIndex("SurfaceCharge") << std::endl;\r
+ //std::cout << r->getComponentIndex("RPermittivity") << std::endl;\r
+ //std::cout << r->getComponentIndex("AvgRadius") << std::endl;\r
+\r
+ //Databoard::Value::RecordValue* t = ((Databoard::Value::RecordValue*)value);\r
+\r
+ //Databoard::Value::DoubleValue* f0 = (Databoard::Value::DoubleValue*)t->getField(0);\r
+ //Databoard::Value::DoubleValue* f1 = (Databoard::Value::DoubleValue*)t->getField(1);\r
+ //Databoard::Value::DoubleValue* f2 = (Databoard::Value::DoubleValue*)t->getField(2);\r
+ //Databoard::Value::DoubleValue* f3 = (Databoard::Value::DoubleValue*)t->getField(3);\r
+ //Databoard::Value::RecordValue* f4 = (Databoard::Value::RecordValue*)t->getField(4);\r
+ //Databoard::Value::DoubleValue* f5 = (Databoard::Value::DoubleValue*)t->getField(5);\r
+ //Databoard::Value::DoubleValue* f6 = (Databoard::Value::DoubleValue*)t->getField(6);\r
+ //Databoard::Value::DoubleValue* f7 = (Databoard::Value::DoubleValue*)t->getField(7);\r
+ //Databoard::Value::DoubleValue* f8 = (Databoard::Value::DoubleValue*)t->getField(8);\r
+\r
+ //std::cout << f0->getValue() << std::endl;\r
+ //std::cout << f1->getValue() << std::endl;\r
+ //std::cout << f2->getValue() << std::endl;\r
+ //std::cout << f3->getValue() << std::endl;\r
+\r
+ //std::cout << ((Databoard::Value::DoubleValue*)f4->getField(0))->getValue() << std::endl;\r
+ //std::cout << ((Databoard::Value::DoubleValue*)f4->getField(1))->getValue() << std::endl;\r
+\r
+ //std::cout << f5->getValue() << std::endl;\r
+ //std::cout << f6->getValue() << std::endl;\r
+ //std::cout << f7->getValue() << std::endl;\r
+ //std::cout << f8->getValue() << std::endl;\r
+\r
+ std::cout << type->writeOut() << std::endl;\r
+ std::cout << value->writeOut() << std::endl;\r
+\r
+ delete value;\r
+ delete typeRepo;\r
+\r
+ std::cout << "..." << std::endl;\r
+}\r
+\r
+void testParser2()\r
+{\r
+ std::cout << "Output of dbt & dbd(s) files:" << std::endl;\r
+\r
+ Databoard::Type::DataBoardRepository* typeRepo = Databoard::Type::parse("input23.dbt");\r
+\r
+ if(typeRepo == NULL)\r
+ {\r
+ std::cerr << "type repository not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Value::DataValueRepository* valueRepo = NULL;\r
+ Databoard::Value::parse("input24_1.dbd", valueRepo, typeRepo);\r
+ Databoard::Value::parse("input24_2.dbd", valueRepo, typeRepo);\r
+\r
+ const Databoard::Value::strDataValueDefinition* v1 = valueRepo->getDataValue("a");\r
+ const Databoard::Value::strDataValueDefinition* v2 = valueRepo->getDataValue("b");\r
+\r
+ std::cout << "... printing types:" << std::endl;\r
+\r
+ for(int i = 0; i < typeRepo->count(); ++i)\r
+ {\r
+ std::cout << "#" << i << ":" << std::endl;\r
+\r
+ std::cout << typeRepo->getDataBoard(i).writeOut() << std::endl << std::endl;\r
+ }\r
+\r
+ if(v1 != NULL)\r
+ {\r
+ std::cout << "... printing value definition:" << std::endl;\r
+\r
+ std::cout << v1->writeOut() << std::endl;\r
+\r
+ std::string v = v1->value->isValid();\r
+\r
+ if(v.length() > 0)\r
+ {\r
+ std::cout << "type is invalid: " << v << std::endl;\r
+ }\r
+ else\r
+ {\r
+ std::cout << "type is valid" << std::endl;\r
+ }\r
+ }\r
+\r
+ if(v2 != NULL)\r
+ {\r
+ std::cout << "... printing value definition:" << std::endl;\r
+\r
+ std::cout << v2->writeOut() << std::endl;\r
+\r
+ std::string v = v2->value->isValid();\r
+\r
+ if(v.length() > 0)\r
+ {\r
+ std::cout << "type is invalid: " << v << std::endl;\r
+ }\r
+ else\r
+ {\r
+ std::cout << "type is valid" << std::endl;\r
+ }\r
+ }\r
+\r
+\r
+ Databoard::Value::free(valueRepo);\r
+ Databoard::Type::free(typeRepo);\r
+\r
+ std::cout << "..." << std::endl;\r
+\r
+}\r
+\r
+void testParser3()\r
+{\r
+ std::cout << "Output of dbt file:" << std::endl;\r
+\r
+ Databoard::Type::DataBoardRepository* typeRepo = Databoard::Type::parse("input17.dbt");\r
+\r
+ Databoard::Type::DataType* type = typeRepo->getDataBoard("Complex");\r
+\r
+ if(type == NULL)\r
+ {\r
+ std::cerr << "type not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ std::cout << type->writeOut() << std::endl;\r
+\r
+ Databoard::Value::MapValue* mapValue = new Databoard::Value::MapValue(type);\r
+\r
+ Databoard::Type::IntegerType* integerType = new Databoard::Type::IntegerType();\r
+ Databoard::Type::StringType* stringType = new Databoard::Type::StringType();\r
+\r
+ Databoard::Value::IntegerValue* k0 = new Databoard::Value::IntegerValue(integerType);\r
+ Databoard::Value::IntegerValue* k1 = new Databoard::Value::IntegerValue(integerType);\r
+ Databoard::Value::IntegerValue* k2 = new Databoard::Value::IntegerValue(integerType);\r
+ Databoard::Value::IntegerValue* k3 = new Databoard::Value::IntegerValue(integerType);\r
+\r
+ Databoard::Value::StringValue* v0 = new Databoard::Value::StringValue(stringType);\r
+ Databoard::Value::StringValue* v1 = new Databoard::Value::StringValue(stringType);\r
+ Databoard::Value::StringValue* v2 = new Databoard::Value::StringValue(stringType);\r
+ Databoard::Value::StringValue* v3 = new Databoard::Value::StringValue(stringType);\r
+\r
+ k0->setValue(2);\r
+ k1->setValue(4);\r
+ k2->setValue(8);\r
+ k3->setValue(5);\r
+\r
+ v0->setValue("asd0");\r
+ v1->setValue("asd1");\r
+ v2->setValue("asd2");\r
+ v3->setValue("asd3");\r
+\r
+ std::cout << "mappi:" << std::endl << mapValue->writeOut() << std::endl;\r
+ mapValue->put(k0, v0);\r
+\r
+ std::cout << "mappi:" << std::endl << mapValue->writeOut() << std::endl;\r
+ mapValue->put(k1, v1);\r
+\r
+ std::cout << "mappi:" << std::endl << mapValue->writeOut() << std::endl;\r
+ mapValue->put(k2, v2);\r
+\r
+ std::cout << "mappi:" << std::endl << mapValue->writeOut() << std::endl;\r
+ mapValue->put(k3, v3);\r
+\r
+ mapValue->removeRange(k0, k1);\r
+\r
+ //Databoard::Value::Value* old = mapValue->remove(k0);\r
+\r
+ //delete k0;\r
+ //delete old;\r
+\r
+ delete mapValue;\r
+ delete integerType;\r
+ delete stringType;\r
+\r
+ Databoard::Type::free(typeRepo);\r
+}\r
+\r
+void testParser4()\r
+{\r
+ std::cout << "Output of dbt & dbv files:" << std::endl;\r
+\r
+ Databoard::Type::DataBoardRepository* typeRepo = Databoard::Type::parse("input25.dbt");\r
+\r
+ if(typeRepo == NULL)\r
+ {\r
+ std::cerr << "type repository not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Type::DataType* type = typeRepo->getDataBoard("AggreDist");\r
+\r
+ if(type == NULL)\r
+ {\r
+ std::cerr << "type not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Value::DataValueRepository* valueRepo = NULL;\r
+ Databoard::Value::parse("input26_3.dbd", valueRepo, typeRepo);\r
+\r
+ Databoard::Value::Value* value1 = Databoard::Value::parse("input26_1.dbv", type);\r
+\r
+ if(value1 == NULL)\r
+ {\r
+ std::cerr << "value not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Value::Value* value2 = Databoard::Value::parse("input26_2.dbv", type);\r
+\r
+ if(value2 == NULL)\r
+ {\r
+ std::cerr << "value not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ if(value1 != NULL)\r
+ {\r
+ std::cout << "... printing value definition:" << std::endl;\r
+\r
+ std::cout << value1->writeOut() << std::endl;\r
+\r
+ std::string v = value1->isValid();\r
+\r
+ if(v.length() > 0)\r
+ {\r
+ std::cout << "type is invalid: " << v << std::endl;\r
+ }\r
+ else\r
+ {\r
+ std::cout << "type is valid" << std::endl;\r
+ }\r
+\r
+ delete value1;\r
+ }\r
+\r
+ if(value2 != NULL)\r
+ {\r
+ std::cout << "... printing value definition:" << std::endl;\r
+\r
+ std::cout << value2->writeOut() << std::endl;\r
+\r
+ std::string v = value2->isValid();\r
+\r
+ if(v.length() > 0)\r
+ {\r
+ std::cout << "type is invalid: " << v << std::endl;\r
+ }\r
+ else\r
+ {\r
+ std::cout << "type is valid" << std::endl;\r
+ }\r
+\r
+ delete value2;\r
+ }\r
+\r
+ delete valueRepo;\r
+ delete typeRepo;\r
+\r
+ std::cout << "..." << std::endl;\r
+}\r
+\r
+void testParser5()\r
+{\r
+ std::cout << "Output of dbt & dbv files:" << std::endl;\r
+\r
+ Databoard::Type::DataBoardRepository* typeRepo = Databoard::Type::parse("input27.dbt");\r
+\r
+ if(typeRepo == NULL)\r
+ {\r
+ std::cerr << "type repository not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Type::DataType* type = typeRepo->getDataBoard("Complex");\r
+\r
+ if(type == NULL)\r
+ {\r
+ std::cerr << "type not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Value::Value* value = Databoard::Value::parse("input28.dbv", type);\r
+\r
+ if(value == NULL)\r
+ {\r
+ std::cerr << "value not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ std::cout << type->writeOut() << std::endl;\r
+ std::cout << value->writeOut() << std::endl;\r
+\r
+ delete value;\r
+ delete typeRepo;\r
+\r
+ std::cout << "..." << std::endl;\r
+}\r
+\r
+void testParser6()\r
+{\r
+ std::cout << "Output of dbt & dbv files:" << std::endl;\r
+\r
+ Databoard::Type::DataBoardRepository* typeRepo = Databoard::Type::parse("input29.dbt");\r
+\r
+ if(typeRepo == NULL)\r
+ {\r
+ std::cerr << "type repository not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Type::DataType* type = typeRepo->getDataBoard("T");\r
+\r
+ if(type == NULL)\r
+ {\r
+ std::cerr << "type not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Value::Value* value1 = Databoard::Value::parse("input30.dbv", type);\r
+\r
+ if(value1 == NULL)\r
+ {\r
+ std::cerr << "value not found" << std::endl;\r
+\r
+ return;\r
+ }\r
+\r
+ Databoard::Value::RecordValue* recordValue = dynamic_cast<Databoard::Value::RecordValue*>(value1);\r
+\r
+ if(recordValue != NULL)\r
+ {\r
+ for(int i = 0; i < recordValue->count(); ++i)\r
+ {\r
+ Databoard::Value::Value* value = recordValue->getField(i);\r
+\r
+ Databoard::Value::ArrayValue* arrayValue = dynamic_cast<Databoard::Value::ArrayValue*>(value);\r
+\r
+ if(arrayValue != NULL)\r
+ {\r
+ //// one by one:\r
+ //for(int j = 0; j < arrayValue->count(); ++j)\r
+ //{\r
+ // Databoard::Value::Value* value = arrayValue->get(j);\r
+\r
+ // std::cout << value->writeOut() << std::endl;\r
+ //}\r
+\r
+ // or to vector:\r
+ std::vector<Databoard::Value::Value*> valueVector = arrayValue->getAll();\r
+\r
+ std::cout << "Row count: " << (int)valueVector.size() << std::endl;\r
+\r
+ for(int j = 0; j < (int)valueVector.size(); ++j)\r
+ {\r
+ Databoard::Value::RecordValue* recordValue = (Databoard::Value::RecordValue*)valueVector.at(j);\r
+\r
+ std::cout << "Element count: " << recordValue->count() << std::endl;\r
+\r
+ for(int k = 0; k < recordValue->count(); ++k)\r
+ {\r
+ Databoard::Value::DoubleValue* doubleValue = (Databoard::Value::DoubleValue*)recordValue->getField(k);\r
+\r
+ std::cout << doubleValue->getValue() << std::endl;\r
+ \r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ delete value1;\r
+ }\r
+\r
+ delete typeRepo;\r
+\r
+ std::cout << "..." << std::endl;\r
+}\r
+\r
+\r
+int main()\r
+{\r
+#ifdef _WIN32\r
+ InitAllocCheck();\r
+#endif\r
+\r
+ //testParser();\r
+ //testParser2();\r
+ //testParser3();\r
+ //testParser4();\r
+ //testParser5();\r
+ testParser6();\r
+\r
+#ifdef _WIN32\r
+ DeInitAllocCheck();\r
+#endif\r
+}\r