From dfdab5bee001546b3f36638c00b96b381cb4c040 Mon Sep 17 00:00:00 2001 From: Gil Date: Fri, 13 Apr 2018 13:22:39 -0700 Subject: Remove immutable map from [FSTDatastore lookupDocuments:completion:] (#1080) --- Firestore/Source/Remote/FSTDatastore.mm | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'Firestore') diff --git a/Firestore/Source/Remote/FSTDatastore.mm b/Firestore/Source/Remote/FSTDatastore.mm index b34f78f..c7ee30f 100644 --- a/Firestore/Source/Remote/FSTDatastore.mm +++ b/Firestore/Source/Remote/FSTDatastore.mm @@ -19,6 +19,7 @@ #import #import +#include #include #include @@ -258,12 +259,10 @@ typedef GRPCProtoCall * (^RPCFactory)(void); } struct Closure { - std::vector keys; - FSTMaybeDocumentDictionary *results; + std::map results; }; - __block std::shared_ptr closure = std::make_shared( - Closure{keys, [FSTMaybeDocumentDictionary maybeDocumentDictionary]}); + __block std::shared_ptr closure = std::make_shared(Closure{}); RPCFactory rpcFactory = ^GRPCProtoCall * { __block GRPCProtoCall *rpc = [self.service RPCToBatchGetDocumentsWithRequest:request @@ -283,19 +282,17 @@ typedef GRPCProtoCall * (^RPCFactory)(void); // Streaming response, accumulate result FSTMaybeDocument *doc = [self.serializer decodedMaybeDocumentFromBatch:response]; - closure->results = - [closure->results dictionaryBySettingObject:doc - forKey:doc.key]; + closure->results.insert({doc.key, doc}); } else { // Streaming response is done, call completion FSTLog(@"RPC BatchGetDocuments completed successfully."); [FSTDatastore logHeadersForRPC:rpc RPCName:@"BatchGetDocuments"]; FSTAssert(!response, @"Got response after done."); NSMutableArray *docs = - [NSMutableArray arrayWithCapacity:closure->keys.size()]; - for (const DocumentKey &key : closure->keys) { - [docs addObject:closure->results[static_cast( - key)]]; + [NSMutableArray arrayWithCapacity:closure->results.size()]; + for (auto &&entry : closure->results) { + FSTMaybeDocument *doc = entry.second; + [docs addObject:doc]; } completion(docs, nil); } -- cgit v1.2.3