Lines Matching +full:write +full:- +full:back
1 //===-- MsgPackDocument.cpp - MsgPack Document --------------------------*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 /// This file implements a class that exposes a simple in-memory representation
12 /// lighter-weight (in terms of memory allocations) replacement for
15 //===----------------------------------------------------------------------===//
24 void DocNode::convertToArray() { *this = getDocument()->getArrayNode(); }
27 void DocNode::convertToMap() { *this = getDocument()->getMapNode(); }
31 return find(getDocument()->getNode(S));
37 return (*this)[getDocument()->getNode(S)];
46 N = getDocument()->getEmptyNode();
53 return (*this)[getDocument()->getNode(Key)];
56 return (*this)[getDocument()->getNode(Key)];
59 return (*this)[getDocument()->getNode(Key)];
62 return (*this)[getDocument()->getNode(Key)];
69 Array->resize(Index + 1, getDocument()->getEmptyNode());
80 *this = getDocument()->getNode(Val);
84 *this = getDocument()->getNode(Val);
88 *this = getDocument()->getNode(Val);
92 *this = getDocument()->getNode(Val);
96 *this = getDocument()->getNode(Val);
100 *this = getDocument()->getNode(Val);
104 *this = getDocument()->getNode(Val);
126 // If Multi, then this sets root to an array and adds top-level objects to it.
127 // If !Multi, then it only reads a single top-level object, even if there are
138 // Create the array for multiple top-level objects.
140 Stack.push_back(StackLevel(Root, 0, (size_t)-1));
154 // OK to finish here as we've just done a top-level element with Multi
197 else if (Stack.back().Node.getKind() == Type::Array) {
199 auto &Array = Stack.back().Node.getArray();
200 DestNode = &Array[Stack.back().Index++];
202 auto &Map = Stack.back().Node.getMap();
203 if (!Stack.back().MapEntry) {
205 Stack.back().MapKey = Node;
206 Stack.back().MapEntry = &Map[Node];
210 DestNode = Stack.back().MapEntry;
211 Stack.back().MapEntry = nullptr;
212 ++Stack.back().Index;
215 if (!DestNode->isEmpty()) {
219 DocNode MapKey = !Stack.empty() && !Stack.back().MapKey.isEmpty()
220 ? Stack.back().MapKey
225 assert(!((Node.isMap() && !DestNode->isMap()) ||
226 (Node.isArray() && !DestNode->isArray())));
231 switch (DestNode->getKind()) {
242 if (Stack.back().MapEntry)
244 if (Stack.back().Index != Stack.back().End)
259 /// Write a MsgPack document to a binary MsgPack blob.
282 MPWriter.write(Node.getBool());
285 MPWriter.write(Node.getInt());
288 MPWriter.write(Node.getUInt());
291 MPWriter.write(Node.getString());
294 MPWriter.write(Node.getBinary());
303 if (Stack.back().Node.getKind() == Type::Map) {
304 if (Stack.back().MapIt != Stack.back().Node.getMap().end())
307 if (Stack.back().ArrayIt != Stack.back().Node.getArray().end())
315 if (Stack.back().Node.getKind() == Type::Map) {
316 if (Stack.back().OnKey) {
318 Node = Stack.back().MapIt->first;
319 Stack.back().OnKey = false;
321 Node = Stack.back().MapIt->second;
322 ++Stack.back().MapIt;
323 Stack.back().OnKey = true;
326 Node = *Stack.back().ArrayIt;
327 ++Stack.back().ArrayIt;