Skip to content

Commit af6976a

Browse files
zxu123wilhuff
authored andcommitted
normalize and port the rest of Firebase/Port code (#713)
* normalize bits * normalize ordered_code
1 parent 7226b4a commit af6976a

19 files changed

+462
-363
lines changed

Firestore/Example/Firestore.xcodeproj/project.pbxproj

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767
AB356EF7200EA5EB0089B766 /* field_value_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB356EF6200EA5EB0089B766 /* field_value_test.cc */; };
6868
AB380CFB2019388600D97691 /* target_id_generator_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB380CF82019382300D97691 /* target_id_generator_test.cc */; };
6969
AB380CFE201A2F4500D97691 /* string_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB380CFC201A2EE200D97691 /* string_util_test.cc */; };
70+
AB380D02201BC69F00D97691 /* bits_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB380D01201BC69F00D97691 /* bits_test.cc */; };
71+
AB380D04201BC6E400D97691 /* ordered_code_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB380D03201BC6E400D97691 /* ordered_code_test.cc */; };
7072
AB382F7C1FE02A1F007CA955 /* FIRDocumentReferenceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AB382F7B1FE02A1F007CA955 /* FIRDocumentReferenceTests.m */; };
7173
AB382F7E1FE03059007CA955 /* FIRFieldPathTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AB382F7D1FE03059007CA955 /* FIRFieldPathTests.m */; };
7274
AB7BAB342012B519001E0872 /* geo_point_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB7BAB332012B519001E0872 /* geo_point_test.cc */; };
@@ -251,6 +253,8 @@
251253
AB356EF6200EA5EB0089B766 /* field_value_test.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = field_value_test.cc; sourceTree = "<group>"; };
252254
AB380CF82019382300D97691 /* target_id_generator_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = target_id_generator_test.cc; sourceTree = "<group>"; };
253255
AB380CFC201A2EE200D97691 /* string_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = string_util_test.cc; path = ../../core/test/firebase/firestore/util/string_util_test.cc; sourceTree = "<group>"; };
256+
AB380D01201BC69F00D97691 /* bits_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bits_test.cc; path = ../../core/test/firebase/firestore/util/bits_test.cc; sourceTree = "<group>"; };
257+
AB380D03201BC6E400D97691 /* ordered_code_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ordered_code_test.cc; path = ../../core/test/firebase/firestore/util/ordered_code_test.cc; sourceTree = "<group>"; };
254258
AB382F7B1FE02A1F007CA955 /* FIRDocumentReferenceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRDocumentReferenceTests.m; sourceTree = "<group>"; };
255259
AB382F7D1FE03059007CA955 /* FIRFieldPathTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRFieldPathTests.m; sourceTree = "<group>"; };
256260
AB7BAB332012B519001E0872 /* geo_point_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = geo_point_test.cc; path = ../../core/test/firebase/firestore/geo_point_test.cc; sourceTree = "<group>"; };
@@ -404,8 +408,10 @@
404408
children = (
405409
548DB926200D590300E00ABC /* assert_test.cc */,
406410
54740A521FC913E500713A1A /* autoid_test.cc */,
411+
AB380D01201BC69F00D97691 /* bits_test.cc */,
407412
548DB928200D59F600E00ABC /* comparison_test.cc */,
408413
54C2294E1FECABAE007D065B /* log_test.cc */,
414+
AB380D03201BC6E400D97691 /* ordered_code_test.cc */,
409415
54740A531FC913E500713A1A /* secure_random_test.cc */,
410416
5436F32320008FAD006E51E3 /* string_printf_test.cc */,
411417
AB380CFC201A2EE200D97691 /* string_util_test.cc */,
@@ -418,21 +424,13 @@
418424
children = (
419425
AB380CF7201937B800D97691 /* core */,
420426
AB356EF5200E9D1A0089B766 /* model */,
421-
54764FAD1FAA0C650085E60A /* Port */,
422427
54740A561FC913EB00713A1A /* util */,
423428
54764FAE1FAA21B90085E60A /* FSTGoogleTestTests.mm */,
424429
AB7BAB332012B519001E0872 /* geo_point_test.cc */,
425430
);
426431
name = GoogleTests;
427432
sourceTree = "<group>";
428433
};
429-
54764FAD1FAA0C650085E60A /* Port */ = {
430-
isa = PBXGroup;
431-
children = (
432-
);
433-
name = Port;
434-
sourceTree = "<group>";
435-
};
436434
6003F581195388D10070C39A = {
437435
isa = PBXGroup;
438436
children = (
@@ -594,31 +592,31 @@
594592
DE51B1621F0D48AC0013853F /* Local */ = {
595593
isa = PBXGroup;
596594
children = (
597-
61E1D8AF1FCF6AF500753285 /* StringViewTests.mm */,
598-
DE51B16A1F0D48AC0013853F /* FSTLocalStoreTests.h */,
599-
DE51B1701F0D48AC0013853F /* FSTMutationQueueTests.h */,
600-
DE51B1721F0D48AC0013853F /* FSTPersistenceTestHelpers.h */,
601-
DE51B1741F0D48AC0013853F /* FSTQueryCacheTests.h */,
602-
DE51B1771F0D48AC0013853F /* FSTRemoteDocumentCacheTests.h */,
603595
DE51B1631F0D48AC0013853F /* FSTEagerGarbageCollectorTests.m */,
596+
DE51B1641F0D48AC0013853F /* FSTLevelDBKeyTests.mm */,
604597
DE51B1651F0D48AC0013853F /* FSTLevelDBLocalStoreTests.m */,
598+
DE51B1661F0D48AC0013853F /* FSTLevelDBMutationQueueTests.mm */,
605599
DE51B1671F0D48AC0013853F /* FSTLevelDBQueryCacheTests.m */,
600+
DE51B1681F0D48AC0013853F /* FSTLevelDBRemoteDocumentCacheTests.mm */,
606601
DE51B1691F0D48AC0013853F /* FSTLocalSerializerTests.m */,
602+
DE51B16A1F0D48AC0013853F /* FSTLocalStoreTests.h */,
607603
DE51B16B1F0D48AC0013853F /* FSTLocalStoreTests.m */,
608604
DE51B16C1F0D48AC0013853F /* FSTMemoryLocalStoreTests.m */,
609605
DE51B16D1F0D48AC0013853F /* FSTMemoryMutationQueueTests.m */,
610606
DE51B16E1F0D48AC0013853F /* FSTMemoryQueryCacheTests.m */,
611607
DE51B16F1F0D48AC0013853F /* FSTMemoryRemoteDocumentCacheTests.m */,
608+
DE51B1701F0D48AC0013853F /* FSTMutationQueueTests.h */,
612609
DE51B1711F0D48AC0013853F /* FSTMutationQueueTests.m */,
610+
DE51B1721F0D48AC0013853F /* FSTPersistenceTestHelpers.h */,
613611
DE51B1731F0D48AC0013853F /* FSTPersistenceTestHelpers.m */,
612+
DE51B1741F0D48AC0013853F /* FSTQueryCacheTests.h */,
614613
DE51B1751F0D48AC0013853F /* FSTQueryCacheTests.m */,
615614
DE51B1761F0D48AC0013853F /* FSTReferenceSetTests.m */,
615+
DE51B1771F0D48AC0013853F /* FSTRemoteDocumentCacheTests.h */,
616616
DE51B1781F0D48AC0013853F /* FSTRemoteDocumentCacheTests.m */,
617617
DE51B1791F0D48AC0013853F /* FSTRemoteDocumentChangeBufferTests.m */,
618-
DE51B1641F0D48AC0013853F /* FSTLevelDBKeyTests.mm */,
619-
DE51B1661F0D48AC0013853F /* FSTLevelDBMutationQueueTests.mm */,
620-
DE51B1681F0D48AC0013853F /* FSTLevelDBRemoteDocumentCacheTests.mm */,
621618
DE51B17A1F0D48AC0013853F /* FSTWriteGroupTests.mm */,
619+
61E1D8AF1FCF6AF500753285 /* StringViewTests.mm */,
622620
);
623621
path = Local;
624622
sourceTree = "<group>";
@@ -1274,6 +1272,7 @@
12741272
DE51B1E01F0D490D0013853F /* FSTMemoryQueryCacheTests.m in Sources */,
12751273
DE51B1E91F0D490D0013853F /* FSTLevelDBMutationQueueTests.mm in Sources */,
12761274
54764FAF1FAA21B90085E60A /* FSTGoogleTestTests.mm in Sources */,
1275+
AB380D04201BC6E400D97691 /* ordered_code_test.cc in Sources */,
12771276
DE51B1E61F0D490D0013853F /* FSTRemoteDocumentCacheTests.m in Sources */,
12781277
61E1D8B11FCF6C5700753285 /* StringViewTests.mm in Sources */,
12791278
DE51B1D91F0D490D0013853F /* FSTEagerGarbageCollectorTests.m in Sources */,
@@ -1290,6 +1289,7 @@
12901289
DE51B1FC1F0D492C0013853F /* FSTMockDatastore.m in Sources */,
12911290
DE51B1CE1F0D48CD0013853F /* FSTEventManagerTests.m in Sources */,
12921291
DE51B1E41F0D490D0013853F /* FSTQueryCacheTests.m in Sources */,
1292+
AB380D02201BC69F00D97691 /* bits_test.cc in Sources */,
12931293
DE51B1CD1F0D48CD0013853F /* FSTDatabaseInfoTests.m in Sources */,
12941294
AB382F7E1FE03059007CA955 /* FIRFieldPathTests.m in Sources */,
12951295
548DB929200D59F600E00ABC /* comparison_test.cc in Sources */,

Firestore/Example/Tests/Local/FSTLevelDBMutationQueueTests.mm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#import <XCTest/XCTest.h>
2020
#include <leveldb/db.h>
2121

22-
#include "Firestore/Port/ordered_code.h"
2322
#import "Firestore/Protos/objc/firestore/local/Mutation.pbobjc.h"
2423
#import "Firestore/Source/Auth/FSTUser.h"
2524
#import "Firestore/Source/Local/FSTLevelDB.h"
@@ -29,14 +28,16 @@
2928
#import "Firestore/Example/Tests/Local/FSTMutationQueueTests.h"
3029
#import "Firestore/Example/Tests/Local/FSTPersistenceTestHelpers.h"
3130

31+
#include "Firestore/core/src/firebase/firestore/util/ordered_code.h"
32+
3233
NS_ASSUME_NONNULL_BEGIN
3334

3435
using leveldb::DB;
3536
using leveldb::Slice;
3637
using leveldb::Status;
3738
using leveldb::WriteOptions;
3839
using Firestore::StringView;
39-
using Firestore::OrderedCode;
40+
using firebase::firestore::util::OrderedCode;
4041

4142
// A dummy mutation value, useful for testing code that's known to examine only mutation keys.
4243
static const char *kDummy = "1";

Firestore/Example/Tests/Local/FSTLevelDBRemoteDocumentCacheTests.mm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@
1818

1919
#include <leveldb/db.h>
2020

21-
#include "Firestore/Port/ordered_code.h"
2221
#import "Firestore/Source/Local/FSTLevelDB.h"
2322
#import "Firestore/Source/Local/FSTLevelDBKey.h"
2423

2524
#import "Firestore/Example/Tests/Local/FSTPersistenceTestHelpers.h"
2625

26+
#include "Firestore/core/src/firebase/firestore/util/ordered_code.h"
27+
2728
NS_ASSUME_NONNULL_BEGIN
2829

2930
using leveldb::WriteOptions;
30-
using Firestore::OrderedCode;
31+
using firebase::firestore::util::OrderedCode;
3132

3233
// A dummy document value, useful for testing code that's known to examine only document keys.
3334
static const char *kDummy = "1";

Firestore/Source/Local/FSTLevelDBKey.mm

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@
1818

1919
#include <string>
2020

21-
#include "Firestore/Port/ordered_code.h"
2221
#import "Firestore/Source/Model/FSTDocumentKey.h"
2322
#import "Firestore/Source/Model/FSTPath.h"
2423

24+
#include "Firestore/core/src/firebase/firestore/util/ordered_code.h"
25+
2526
NS_ASSUME_NONNULL_BEGIN
2627

27-
using Firestore::OrderedCode;
28+
using firebase::firestore::util::OrderedCode;
2829
using Firestore::StringView;
2930
using leveldb::Slice;
3031

@@ -109,11 +110,11 @@ void WriteComponentLabel(std::string *dest, FSTComponentLabel label) {
109110
*/
110111
BOOL ReadComponentLabel(leveldb::Slice *contents, FSTComponentLabel *label) {
111112
int64_t rawResult = 0;
112-
Slice tmp = *contents;
113+
absl::string_view tmp(contents->data(), contents->size());
113114
if (OrderedCode::ReadSignedNumIncreasing(&tmp, &rawResult)) {
114115
if (rawResult >= FSTComponentLabelTerminator && rawResult <= FSTComponentLabelUnknown) {
115116
*label = static_cast<FSTComponentLabel>(rawResult);
116-
*contents = tmp;
117+
*contents = leveldb::Slice(tmp.data(), tmp.size());
117118
return YES;
118119
}
119120
}
@@ -128,9 +129,9 @@ BOOL ReadComponentLabel(leveldb::Slice *contents, FSTComponentLabel *label) {
128129
*
129130
* If the read is successful, returns YES and contents will be updated to the next unread byte.
130131
*/
131-
BOOL ReadComponentLabelMatching(Slice *contents, FSTComponentLabel expectedLabel) {
132+
BOOL ReadComponentLabelMatching(absl::string_view *contents, FSTComponentLabel expectedLabel) {
132133
int64_t rawResult = 0;
133-
Slice tmp = *contents;
134+
absl::string_view tmp = *contents;
134135
if (OrderedCode::ReadSignedNumIncreasing(&tmp, &rawResult)) {
135136
if (rawResult == expectedLabel) {
136137
*contents = tmp;
@@ -152,10 +153,10 @@ BOOL ReadComponentLabelMatching(Slice *contents, FSTComponentLabel expectedLabel
152153
*/
153154
BOOL ReadInt32(Slice *contents, int32_t *result) {
154155
int64_t rawResult = 0;
155-
Slice tmp = *contents;
156+
absl::string_view tmp(contents->data(), contents->size());
156157
if (OrderedCode::ReadSignedNumIncreasing(&tmp, &rawResult)) {
157158
if (rawResult >= INT32_MIN && rawResult <= INT32_MAX) {
158-
*contents = tmp;
159+
*contents = leveldb::Slice(tmp.data(), tmp.size());
159160
*result = static_cast<int32_t>(rawResult);
160161
return YES;
161162
}
@@ -180,10 +181,11 @@ void WriteLabeledInt32(std::string *dest, FSTComponentLabel label, int32_t value
180181
* value will be set to the decoded integer value.
181182
*/
182183
BOOL ReadLabeledInt32(Slice *contents, FSTComponentLabel expectedLabel, int32_t *value) {
183-
Slice tmp = *contents;
184+
absl::string_view tmp(contents->data(), contents->size());
184185
if (ReadComponentLabelMatching(&tmp, expectedLabel)) {
185-
if (ReadInt32(&tmp, value)) {
186-
*contents = tmp;
186+
Slice tmpSlice = leveldb::Slice(tmp.data(), tmp.size());
187+
if (ReadInt32(&tmpSlice, value)) {
188+
*contents = tmpSlice;
187189
return YES;
188190
}
189191
}
@@ -207,10 +209,10 @@ void WriteLabeledString(std::string *dest, FSTComponentLabel label, StringView v
207209
* value will be set to the decoded string value.
208210
*/
209211
BOOL ReadLabeledString(Slice *contents, FSTComponentLabel expectedLabel, std::string *value) {
210-
Slice tmp = *contents;
212+
absl::string_view tmp(contents->data(), contents->size());
211213
if (ReadComponentLabelMatching(&tmp, expectedLabel)) {
212214
if (OrderedCode::ReadString(&tmp, value)) {
213-
*contents = tmp;
215+
*contents = leveldb::Slice(tmp.data(), tmp.size());
214216
return YES;
215217
}
216218
}
@@ -272,7 +274,7 @@ BOOL ReadDocumentKey(Slice *contents, FSTDocumentKey *__strong *result) {
272274
for (;;) {
273275
// Advance a temporary slice to avoid advancing contents into the next key component which may
274276
// not be a path segment.
275-
Slice readPosition = completeSegments;
277+
absl::string_view readPosition(completeSegments.data(), completeSegments.size());
276278
if (!ReadComponentLabelMatching(&readPosition, FSTComponentLabelPathSegment)) {
277279
break;
278280
}
@@ -284,7 +286,7 @@ BOOL ReadDocumentKey(Slice *contents, FSTDocumentKey *__strong *result) {
284286
[pathSegments addObject:pathSegment];
285287
segment.clear();
286288

287-
completeSegments = readPosition;
289+
completeSegments = leveldb::Slice(readPosition.data(), readPosition.size());
288290
}
289291

290292
FSTResourcePath *path = [FSTResourcePath pathWithSegments:pathSegments];
@@ -304,7 +306,10 @@ inline void WriteTerminator(std::string *dest) {
304306
}
305307

306308
inline BOOL ReadTerminator(Slice *contents) {
307-
return ReadComponentLabelMatching(contents, FSTComponentLabelTerminator);
309+
absl::string_view tmp(contents->data(), contents->size());
310+
BOOL result = ReadComponentLabelMatching(&tmp, FSTComponentLabelTerminator);
311+
*contents = leveldb::Slice(tmp.data(), tmp.size());
312+
return result;
308313
}
309314

310315
inline void WriteTableName(std::string *dest, const char *tableName) {

Firestore/Source/Local/FSTLevelDBMutationQueue.mm

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,10 @@
3434
#import "Firestore/Source/Model/FSTPath.h"
3535
#import "Firestore/Source/Util/FSTAssert.h"
3636

37-
#include "Firestore/Port/ordered_code.h"
3837
#include "Firestore/core/src/firebase/firestore/util/string_util.h"
3938

4039
NS_ASSUME_NONNULL_BEGIN
4140

42-
using Firestore::OrderedCode;
4341
using Firestore::StringView;
4442
using leveldb::DB;
4543
using leveldb::Iterator;

Firestore/Source/Local/FSTLevelDBQueryCache.mm

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,8 @@
2929
#import "Firestore/Source/Model/FSTDocumentKey.h"
3030
#import "Firestore/Source/Util/FSTAssert.h"
3131

32-
#include "Firestore/Port/ordered_code.h"
33-
3432
NS_ASSUME_NONNULL_BEGIN
3533

36-
using Firestore::OrderedCode;
3734
using Firestore::StringView;
3835
using leveldb::DB;
3936
using leveldb::Iterator;

Firestore/Source/Local/FSTLevelDBRemoteDocumentCache.mm

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,8 @@
3232
#import "Firestore/Source/Model/FSTPath.h"
3333
#import "Firestore/Source/Util/FSTAssert.h"
3434

35-
#include "Firestore/Port/ordered_code.h"
36-
3735
NS_ASSUME_NONNULL_BEGIN
3836

39-
using Firestore::OrderedCode;
4037
using leveldb::DB;
4138
using leveldb::Iterator;
4239
using leveldb::ReadOptions;

Firestore/Source/Local/FSTWriteGroup.mm

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@
2323
#import "Firestore/Source/Local/FSTLevelDBKey.h"
2424
#import "Firestore/Source/Util/FSTAssert.h"
2525

26-
#include "Firestore/Port/ordered_code.h"
27-
28-
using Firestore::OrderedCode;
2926
using Firestore::StringView;
3027
using leveldb::DB;
3128
using leveldb::Slice;

Firestore/Source/Local/StringView.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#include <leveldb/slice.h>
2727
#include <string>
28+
#include "absl/strings/string_view.h"
2829

2930
namespace Firestore {
3031

@@ -64,6 +65,10 @@ class StringView {
6465
StringView(leveldb::Slice slice) : data_(slice.data()), size_(slice.size()) {
6566
}
6667

68+
// Creates a StringView from the absl::string_view.
69+
StringView(absl::string_view s) : data_(s.data()), size_(s.size()) {
70+
}
71+
6772
// Creates a StringView from the given std::string. The string must be an
6873
// lvalue for the lifetime requirements to be satisfied.
6974
StringView(const std::string &str) : data_(str.data()), size_(str.size()) {
@@ -76,6 +81,13 @@ class StringView {
7681
return leveldb::Slice(data_, size_);
7782
}
7883

84+
// Converts this StringView to a absl::string_view, which is an equivalent (and more
85+
// functional) type. The returned string_view has the same lifetime as this
86+
// StringView.
87+
operator absl::string_view() {
88+
return absl::string_view(data_, size_);
89+
}
90+
7991
private:
8092
const char *data_;
8193
const size_t size_;

Firestore/core/src/firebase/firestore/util/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,15 @@ cc_library(
107107
SOURCES
108108
autoid.cc
109109
autoid.h
110+
bits.cc
111+
bits.h
110112
comparison.cc
111113
comparison.h
112114
config.h
113115
firebase_assert.h
114116
log.h
117+
ordered_code.cc
118+
ordered_code.h
115119
secure_random.h
116120
string_util.cc
117121
string_util.h

Firestore/Port/bits.cc renamed to Firestore/core/src/firebase/firestore/util/bits.cc

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414
* limitations under the License.
1515
*/
1616

17-
#include "Firestore/Port/bits.h"
17+
#include "Firestore/core/src/firebase/firestore/util/bits.h"
1818

19-
#include <assert.h>
19+
#include "Firestore/core/src/firebase/firestore/util/firebase_assert.h"
2020

21-
namespace Firestore {
21+
namespace firebase {
22+
namespace firestore {
23+
namespace util {
2224

2325
int Bits::Log2Floor_Portable(uint32_t n) {
2426
if (n == 0) return -1;
@@ -32,8 +34,10 @@ int Bits::Log2Floor_Portable(uint32_t n) {
3234
log += shift;
3335
}
3436
}
35-
assert(value == 1);
37+
FIREBASE_ASSERT(value == 1);
3638
return log;
3739
}
3840

39-
} // namespace Firestore
41+
} // namespace util
42+
} // namespace firestore
43+
} // namespace firebase

0 commit comments

Comments
 (0)