Commit Graph
21 Commits
Author SHA1 Message Date
Gil 8428d4a8e2 Migrate null, numbers, and GeoPoints to FSTDelegateValue (#3044)
* Migrate FSTNullValue to FSTDelegateValue
* Migrate FSTIntegerValue to FSTDelegateValue
* Migrate FSTDoubleValue to FSTDelegateValue
* Migrate FSTGeoPointValue to FSTDelegateValue
2019-05-26 10:02:21 -07:00
Gil 8770828dd8 Refactor usages of DatabaseId to avoid raw pointers (#3041)
* Remove stale references to DatabaseId
* Have Firestore take the DatabaseId directly
* Allow tests to default the database implicitly
* Have FSTSerializerBeta take DatabaseId by value
* Have FSTUserDataConverter take DatabaseId by value
* Make FIRFirestore.databaseID a const reference
* Make FSTFirestoreClient.databaseID a const reference
* Have FSTReferenceValue take DatabaseId by value
* Have DatabaseInfo take DatabaseId by value
* Have Serializer take DatabaseId by value
* Fix C++ ReferenceValue
  * Take DatabaseId by value
  * Reverse order to match Android
  * Rename `reference` to `key`
2019-05-21 20:28:51 -07:00
Gil 7ae2af4e6f Port FSTFieldValueOptions to C++ (#2989) 2019-05-14 07:43:51 -07:00
Gil 60e37f32e2 Use three-way comparisons in C++ (#2884)
* Remove last traces of Objective-C from document_key.h

* Generalize empty base optimization into CompressedMember

Remove ComparatorHolder.

* Add Comparator<T>.Compare

This makes C++ more like the other platforms, where three-way comparison
is the default.

For now, don't remove the less-than definition of operator()--this
allows these comparators to be used in both circumstances.

* Remove KeyComparator

With the transition between less-than and three-way comparison adapting
this class isn't worth it.

While technically this is losing use of std::lower_bound, the
performance cost is negligible because these arrays are guaranteed to be
always small. This also makes ArraySortedMap work more like it does in
the other ports.

* Add Compare to the remaining Comparators

* Migrate remaining comparator usage in immuntable to three-way

* Use absl::bit_cast in comparison

* Make Comparable depend upon CompareTo.

* Use Comparable in more places

* Remove Comparator::operator()

* Move things around in comparison.h

Move:
  * Objective-C ComparisonResult functions nearer to others
  * DefaultComparator to above the first specializations

* Make Comparison on by default, delegating to CompareTo if available

* Move NSString Comparator into comparison.h

* Remove no longer required Comparator classes

* Make FieldValue support Comparable
2019-04-25 09:27:02 -07:00
rsgowman c0e4211849 Fix FSTDelegateValue: property -> ivar (#2778)
* Fix FSTDelegateValue: property -> ivar

c++ properties don't mix well with obj-c properties.
2019-04-09 21:42:13 -04:00
rsgowman 58e36e15cb Migrate FSTStringValue to FSTDelegateValue (#2719) 2019-04-08 16:16:04 -04:00
rsgowman 82ced2d8c1 Add FSTDelegateValue which delegates to model::FieldValue (#2681)
* Fix FSTFieldValue instanceof check to use FSTFieldValue.type

Missed in the previous PR because this gets the class via [value class]
rather than [value isKindOfClass].

* Add FSTDelegateValue which delegates to model::FieldValue

Also migrates FSTBooleanValue to FSTDelegateValue as a proof-of-concept.
Other FSTXValues still TODO.
2019-04-04 14:47:59 -04:00
rsgowman 6e5221ba41 Eliminate 'instanceof' checks for FSTFieldValue (#2651)
Previously, we checked for FSTFieldValue subtypes via:
`[value isKindOfClass:[FSTStringValue class]]`

Now, we check via a new type parameter on FSTFieldValue, i.e.:
`value.type == firebase::firestore::model::FieldValue::Type::String`

Or with the appropriate using declaration:
`value.type == FieldValue::Type::String`

This should enable easier transition to C++.
2019-03-27 12:26:23 -04:00
Sebastian Schmidt 657f53a9b8 Adding FieldValue.increment() (#2075) 2019-03-06 14:51:30 -08:00
Konstantin Varlamov 213e427667 C++: make internal Objective-C API wrap DocumentSnapshot from core API (#2456) 2019-03-04 15:12:56 -05:00
Konstantin Varlamov 673b08592a C++: replace FSTMaybeDocumentDictionary with a C++ equivalent (#2139)
Also eliminate most usages of `FSTDocumentKey`, remove most methods from the Objective-C class and make it just a wrapper over `DocumentKey`. The only usage that cannot be directly replaced by C++ `DocumentKey` is in `FSTFieldValue`.
2018-12-10 11:57:08 -08:00
Gil 16f7be5864 Migrate nearly all usages of MakeStringView to MakeString (#1679) 2018-08-13 15:23:58 -07:00
Gil 03d26a76a0 Remove nearly all usages of WrapNSStringNoCopy (#1351) 2018-05-30 10:24:40 -07:00
Gil 8037a4bf79 Replace Objective-C assertions with C++ assertions (#1327)
* Migrate FSTFail to HARD_FAIL
* FSTCFail -> HARD_FAIL
* FSTCAssert -> HARD_ASSERT
* FSTAssert -> HARD_ASSERT
* Replace FSTAssert with NSAssert in dead Objective-C code
* Remove FSTAssert.h
2018-05-24 11:00:23 -07:00
Gil a25d054874 Replace the SnapshotOptions object with the behavior enum. (#1109)
Instead of calling

  `get(field, SnapshotOptions.serverTimestampBehavior(.estimate))`

call

  `get(field, serverTimestampBehavior: .estimate)`
2018-04-16 13:50:11 -07:00
Gil 0a66187053 Add lint checking for Objective-C++ sources (#1048)
* lint.sh now lints Objective-C++ too

* cpplint checks system-style includes that should be user-style

This prevents it from recognizing project sources as if they were C
system headers and then complaining that they're in the wrong place.

* cpplint checks #imports and #includes

* cpplint checks that C++ system headers aren't #imported

* cpplint checks for C system headers that could be C++ system headers

* cpplint checks that Objective-C sources include their headers
2018-04-09 11:54:39 -07:00
Konstantin Varlamov a17740e914 Add a flag to control whether DocumentSnapshots return Dates or Timestamps for timestamp fields (#831)
* add a new property `timestampsInSnapshotsEnabled` to `FirestoreSettings`, `false` by default;
* add a verbose warning message urging users to opt into the new behavior;
* set `timestampsInSnapshotsEnabled` to true in the integration tests to reduce the verbose console
spam during the test run and make sure the flag won't break anything once it's flipped.
2018-03-30 14:50:15 -04:00
zxu 9e815620e9 grand PR to port the remaining paths (FieldPath and ResourcePath). (#865)
* naively remove FSTPath import and source/test files.

* port FieldPath, part I

* port FieldPath, part II

* port ResourcePath, part I

* port ResourcePath, part II

* the grand commit to fix build errors

* use testutil:: helper instead of those from FSTHelpers

* fix test and lint

* use c_str in errmsg directly

* fix

* fix

* make code clean

* fix integration test I missed

* fix to avoid naming collision in preprocessor

* address changes

* address changes

* address changes

* fix: fieldMask are actually shared with different context.

* address changes

* address changes
2018-03-14 08:57:31 -04:00
Konstantin Varlamov 14ea068f5f Make FSTTimestamp into a public Firestore class (#698)
- FSTTimestamp is now FIRTimestamp, under Firestore/Source/{Public,API}. This is a temporary solution; eventually, FIRTimestamp is supposed to live somewhere under Firebase;
- move most internal Timestamp methods to the public header (the only exception is ISOString).
2018-02-20 17:33:57 -05:00
zxu a441190635 Implement Firestore DatabaseInfo and port both Database{Id,Info} C++ to the iOS code (#738)
* implement Firestore DatabaseInfo in C++

* temporary stash changes; blocking on the massive renaming of .m to .mm

* add database_info_test to project

* finish port DatabaseId and fix style, modular fixing DatabaseInfo

* port DatabaseInfo

* remove FSTDatabase{ID,Info} and their tests from project

* fix unit test

* use namespace alias

* use namespace alias, leftover

* address more changes

* refactoring to use raw pointer instead of value for property

* address changes

* remove self->

* fix style

* remove the name suffix Alloc

* fix a bug
2018-02-06 13:51:11 -05:00
Gil 39d8252300 Port comparison to C++ (#678)
This reimplements our comparison functions as C++ Comparators and then provides compatibility shims for interoperating with existing Objective-C usage.

A few specialized comparators aren't suitable for porting but only have a single usage (e.g. CompareBytes for comparing NSData * instances). In these cases I've moved them into the caller.

* Use int32_t for typeof(ID) in FSTDocumentReference

* Migrate callers of FSTComparison.h to Objective-C++

* Port comparison to C++

* Migrate usages of FSTComparison.h to C++ equivalents

* Remove FSTComparison
2018-01-19 12:27:11 -08:00