123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- ////////////////////////////////////////////////////////////////////////////
- //
- // Copyright 2016 Realm Inc.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //
- ////////////////////////////////////////////////////////////////////////////
- #import <Realm/RLMCollection_Private.h>
- #import <Realm/RLMRealm.h>
- #import <realm/keys.hpp>
- #import <realm/object-store/collection_notifications.hpp>
- #import <vector>
- #import <mutex>
- namespace realm {
- class CollectionChangeCallback;
- class List;
- class Obj;
- class Results;
- class TableView;
- struct CollectionChangeSet;
- struct ColKey;
- namespace object_store {
- class Collection;
- class Dictionary;
- class Set;
- }
- }
- class RLMClassInfo;
- @class RLMFastEnumerator, RLMManagedArray, RLMManagedSet, RLMManagedDictionary, RLMProperty, RLMObjectBase;
- @protocol RLMCollectionPrivate
- @property (nonatomic, readonly) RLMRealm *realm;
- @property (nonatomic, readonly) RLMClassInfo *objectInfo;
- @property (nonatomic, readonly) NSUInteger count;
- - (realm::TableView)tableView;
- - (RLMFastEnumerator *)fastEnumerator;
- - (realm::NotificationToken)addNotificationCallback:(id)block
- keyPaths:(std::optional<std::vector<std::vector<std::pair<realm::TableKey, realm::ColKey>>>>&&)keyPaths;
- @end
- // An object which encapsulates the shared logic for fast-enumerating RLMArray
- // RLMSet and RLMResults, and has a buffer to store strong references to the current
- // set of enumerated items
- @interface RLMFastEnumerator : NSObject
- - (instancetype)initWithBackingCollection:(realm::object_store::Collection const&)backingCollection
- collection:(id)collection
- classInfo:(RLMClassInfo&)info;
- - (instancetype)initWithBackingDictionary:(realm::object_store::Dictionary const&)backingDictionary
- dictionary:(RLMManagedDictionary *)dictionary
- classInfo:(RLMClassInfo&)info;
- - (instancetype)initWithResults:(realm::Results&)results
- collection:(id)collection
- classInfo:(RLMClassInfo&)info;
- // Detach this enumerator from the source collection. Must be called before the
- // source collection is changed.
- - (void)detach;
- - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state
- count:(NSUInteger)len;
- @end
- NSUInteger RLMFastEnumerate(NSFastEnumerationState *state, NSUInteger len, id<RLMCollectionPrivate> collection);
- @interface RLMNotificationToken ()
- - (void)suppressNextNotification;
- - (RLMRealm *)realm;
- @end
- @interface RLMCollectionChange ()
- - (instancetype)initWithChanges:(realm::CollectionChangeSet)indices;
- @end
- @interface RLMCancellationToken : RLMNotificationToken {
- @public
- __unsafe_unretained RLMRealm *_realm;
- realm::NotificationToken _token;
- std::mutex _mutex;
- }
- @end
- realm::CollectionChangeCallback RLMWrapCollectionChangeCallback(void (^block)(id, id, NSError *),
- id collection, bool skipFirst);
- template<typename Collection>
- NSArray *RLMCollectionValueForKey(Collection& collection, NSString *key, RLMClassInfo& info);
- std::vector<std::pair<std::string, bool>> RLMSortDescriptorsToKeypathArray(NSArray<RLMSortDescriptor *> *properties);
- realm::ColKey columnForProperty(NSString *propertyName,
- realm::object_store::Collection const& backingCollection,
- RLMClassInfo *objectInfo,
- RLMPropertyType propertyType,
- RLMCollectionType collectionType);
- static inline bool canAggregate(RLMPropertyType type, bool allowDate) {
- switch (type) {
- case RLMPropertyTypeInt:
- case RLMPropertyTypeFloat:
- case RLMPropertyTypeDouble:
- case RLMPropertyTypeDecimal128:
- case RLMPropertyTypeAny:
- return true;
- case RLMPropertyTypeDate:
- return allowDate;
- default:
- return false;
- }
- }
- NSArray *RLMToIndexPathArray(realm::IndexSet const& set, NSUInteger section);
|