src/XMLDocumentConstructor.h
branchv_0
changeset 39 77d585a1b98c
parent 38 ba850b20fe0d
child 40 503b77beed57
equal deleted inserted replaced
38:ba850b20fe0d 39:77d585a1b98c
    59 #define INDEFINITE -1
    59 #define INDEFINITE -1
    60 
    60 
    61 	std::stringstream currentIndefiniteString;
    61 	std::stringstream currentIndefiniteString;
    62 
    62 
    63 	uint64_t currentTag;
    63 	uint64_t currentTag;
    64 	bool currentTagPresent;
    64 	bool currentTagPresent = false;
    65 
    65 
    66 	cbor_callbacks callbacks = cbor_empty_callbacks;
    66 	cbor_callbacks callbacks = cbor_empty_callbacks;
    67 
    67 
    68 	/**
    68 	/**
    69 	 * Both CBOR and XML strings are in UTF-8.
    69 	 * Both CBOR and XML strings are in UTF-8.
   154 		remainingItems.push_back(size);
   154 		remainingItems.push_back(size);
   155 		writeCurrentTag(current);
   155 		writeCurrentTag(current);
   156 	}
   156 	}
   157 
   157 
   158 	void flushCurrentIndefiniteString(Glib::ustring cborType) {
   158 	void flushCurrentIndefiniteString(Glib::ustring cborType) {
   159 		mode.pop_back();
       
   160 		appendScalarValue(currentIndefiniteString.str(), cborType);
   159 		appendScalarValue(currentIndefiniteString.str(), cborType);
   161 		currentIndefiniteString = std::stringstream();
   160 		currentIndefiniteString = std::stringstream();
   162 	}
   161 	}
   163 
   162 
   164 	void containerEnd() {
   163 	void containerEnd() {
       
   164 		Mode m = mode.back();
       
   165 		mode.pop_back();
   165 		remainingItems.pop_back();
   166 		remainingItems.pop_back();
   166 		if (mode.back() == Mode::MAP_KEY || mode.back() == Mode::MAP_VALUE) current = parentOrSelf(current);
   167 		
   167 		else if (mode.back() == Mode::BYTE_STRING) flushCurrentIndefiniteString("byte-string");
   168 		if (m == Mode::MAP_KEY || m == Mode::MAP_VALUE) current = parentOrSelf(current);
   168 		else if (mode.back() == Mode::CHAR_STRING) flushCurrentIndefiniteString("string");
   169 		else if (m == Mode::BYTE_STRING) flushCurrentIndefiniteString("byte-string");
   169 		else mode.pop_back(); // TODO: assert map/array
   170 		else if (m == Mode::CHAR_STRING) flushCurrentIndefiniteString("string");
   170 	}
   171 	}
   171 
   172 
   172 public:
   173 public:
   173 
   174 
   174 	XMLDocumentConstructor(std::istream* input, xmlpp::DomParser* parser) : input(input), parser(parser) {
   175 	XMLDocumentConstructor(std::istream* input, xmlpp::DomParser* parser) : input(input), parser(parser) {