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) { |