IGListKit/Source/Internal/IGListSectionMap.h
Andrew Monshizadeh 9735d611e8 Nitpicky comment fixes
Summary:
Mainly this addresses clarity of a few comments, line breaks at weird places, and style differences within a single file.

Just comments and including JetBrains `.idea` config folder in the `gitignore`.

- [X] All tests pass. Demo project builds and runs.
- [X] I added tests, an experiment, or detailed why my change isn't tested.
- [N/A] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [N/A] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/600

Differential Revision: D4810628

Pulled By: jessesquires

fbshipit-source-id: fce445c0253f592a43045ae098e440d41c166993
2017-03-31 13:01:40 -07:00

112 lines
2.9 KiB
Objective-C

/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import <Foundation/Foundation.h>
#import <IGListKit/IGListMacros.h>
@class IGListSectionController;
@protocol IGListSectionType;
NS_ASSUME_NONNULL_BEGIN
/**
The IGListSectionMap provides a way to map a collection of objects to a collection of section controllers and achieve
constant-time lookups O(1).
IGListSectionMap is a mutable object and does not guarantee thread safety.
*/
IGLK_SUBCLASSING_RESTRICTED
@interface IGListSectionMap : NSObject <NSCopying>
- (instancetype)initWithMapTable:(NSMapTable *)mapTable NS_DESIGNATED_INITIALIZER;
/**
The objects stored in the map.
*/
@property (nonatomic, strong, readonly) NSArray *objects;
/**
Update the map with objects and the section controller counterparts.
@param objects The objects in the collection.
@param sectionControllers The section controllers that map to each object.
*/
- (void)updateWithObjects:(NSArray <id <NSObject>> *)objects sectionControllers:(NSArray <id <NSObject>> *)sectionControllers;
/**
Fetch a section controller given a section.
@param section The section index of the section controller.
@return A section controller.
*/
- (nullable IGListSectionController <IGListSectionType> *)sectionControllerForSection:(NSInteger)section;
/**
Fetch the object for a section
@param section The section index of the object.
@return The object corresponding to the section.
*/
- (nullable id)objectForSection:(NSInteger)section;
/**
Fetch a section controller given an object. Can return nil.
@param object The object that maps to a section controller.
@return A section controller.
*/
- (nullable id)sectionControllerForObject:(id)object;
/**
Look up the section index for a section controller.
@param sectionController The list to look up.
@return The section index of the given section controller if it exists, NSNotFound otherwise.
*/
- (NSInteger)sectionForSectionController:(id)sectionController;
/**
Look up the section index for an object.
@param object The object to look up.
@return The section index of the given object if it exists, NSNotFound otherwise.
*/
- (NSInteger)sectionForObject:(id)object;
/**
Remove all saved objects and section controllers.
*/
- (void)reset;
/**
Update an object with a new instance.
*/
- (void)updateObject:(id)object;
/**
Applies a given block object to the entries of the section controller map.
@param block A block object to operate on entries in the section controller map.
*/
- (void)enumerateUsingBlock:(void (^)(id object, IGListSectionController<IGListSectionType> *sectionController, NSInteger section, BOOL *stop))block;
/**
:nodoc:
*/
- (instancetype)init NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END