src/DataMode.h
branchv_0
changeset 7 b8f130c7998e
parent 6 779897b055c6
child 8 fc8b94bccfc5
equal deleted inserted replaced
6:779897b055c6 7:b8f130c7998e
    27 namespace tr {
    27 namespace tr {
    28 namespace infertypes {
    28 namespace infertypes {
    29 
    29 
    30 class DataMode : public Mode {
    30 class DataMode : public Mode {
    31 private:
    31 private:
       
    32 	static const std::wregex BOOLEAN_PATTERN;
       
    33 	static const std::wregex INTEGER_PATTERN;
    32 	relpipe::common::type::StringX name;
    34 	relpipe::common::type::StringX name;
    33 	std::vector<relpipe::reader::handlers::AttributeMetadata> attributes;
    35 	std::vector<relpipe::reader::handlers::AttributeMetadata> attributes;
    34 	std::vector<relpipe::common::type::StringX> values;
    36 	std::vector<relpipe::common::type::StringX> values;
    35 
    37 
    36 	bool matches(int attributeIndex, const std::wregex& pattern) {
    38 	bool matches(int attributeIndex, const std::wregex& pattern) {
    55 	virtual ~DataMode() {
    57 	virtual ~DataMode() {
    56 		std::vector<bool> booleans(attributes.size(), true);
    58 		std::vector<bool> booleans(attributes.size(), true);
    57 		std::vector<bool> integers(attributes.size(), true);
    59 		std::vector<bool> integers(attributes.size(), true);
    58 
    60 
    59 		for (int i = 0, limit = attributes.size(); i < limit; i++) {
    61 		for (int i = 0, limit = attributes.size(); i < limit; i++) {
    60 			booleans[i] = matches(i, std::wregex(L"true|false"));
    62 			booleans[i] = matches(i, BOOLEAN_PATTERN);
    61 			integers[i] = matches(i, std::wregex(L"[0-9]+"));
    63 			integers[i] = matches(i, INTEGER_PATTERN);
    62 		}
    64 		}
    63 
    65 
    64 		vector<writer::AttributeMetadata> writerMetadata;
    66 		vector<writer::AttributeMetadata> writerMetadata;
    65 		for (int i = 0, limit = attributes.size(); i < limit; i++) {
    67 		for (int i = 0, limit = attributes.size(); i < limit; i++) {
    66 			relpipe::reader::handlers::AttributeMetadata& am = attributes[i];
    68 			relpipe::reader::handlers::AttributeMetadata& am = attributes[i];
    76 		relationalWriter->startRelation(name, writerMetadata, true);
    78 		relationalWriter->startRelation(name, writerMetadata, true);
    77 		for (relpipe::common::type::StringX& value : values) relationalWriter->writeAttribute(value);
    79 		for (relpipe::common::type::StringX& value : values) relationalWriter->writeAttribute(value);
    78 	}
    80 	}
    79 };
    81 };
    80 
    82 
       
    83 const std::wregex DataMode::BOOLEAN_PATTERN = std::wregex(L"true|false");
       
    84 const std::wregex DataMode::INTEGER_PATTERN = std::wregex(L"[0-9]+");
    81 
    85 
    82 }
    86 }
    83 }
    87 }
    84 }
    88 }