<commit_before>TLIndexPathTools
================

TLIndexPathTools is a set of components designed to greatly simplify building
rich, dynamic table and collection views. Here are some of the awesome things that TLIndexPathTools does:

* Automatically calculate and perform animated inserts, deletes and moves.
* Automatically organize the data model into sections.
* Simplify implementing data source and delegate methods via rich data model APIs.
* Provide a simpler alternative to Core Data's `NSFetchedResultsController`

##Installation

1. Download the TLIndexPathTools project
2. Add the TLIndexPathTools sub-folder (sibling of the Examples folder) to your Xcode project.
3. Link to QuartzCore.framework and CoreData.framework (on the Build Phases tab of your project's target).

<!--CoreData is required for Core Data integration and because `TLIndexPathSectionInfo` implements the `NSFetchedResultsSectionInfo` protocol. QuartzCore is required because the Grid extension uses it.-->

##Overview

Table and collection view batch updates are great. Users love apps that animate smoothly between states. But if you've done any non-trivial batch updates, you've probably found that they can make your view controller implementation very complex (and confusing). TLIndexPathTools makes all of this very easy by providing two simple classes `TLIndexPathDataModel` and `TLIndexPathUpdates`: `TLIndexPathDataModel` represents a single version of your data model, providing a rich API for organizing and accessing the data, and `TLIndexPathUpdates` takes two versions of your data model and performs the batch updates on your table or collection view.

Most of the functionality of TLIndexPathTools can be accomplished with just `TLIndexPathDataModel` and `TLIndexPathUpdates`. However, there are a number of additional components that build on these classes to make life a little bit easier.

* `TLIndexPathController` provides a common programming model for building view controllers that work interchangeably with Core Data `NSFetchRequests` or plain arrays. One controller to rule them all.
* `TLTableViewController` and `TLCollectionViewController` are base  table and collection view implementations that provide the essential data source and delegate methods to get you up and running quickly with a few bells and whistles, like data-driven table cell height calculation, thrown in for good measure.
* `TLIndexPathItem` is a wrapper class for your data items, useful for things like heterogenous data or multiple cell prototypes. Take a look at the [Settings sample project][1], for example.
* The `Extensions` folder contains a number of extensions for things like [collapsable sections][2] and [expandable tree views][3]. This is a good resource to see how `TLIndexPathDataModel` can be easily extended for special data structures.
* And last, but not least, the `Examples` folder contains numerous sample projects demonstrating various use cases and features of the framework. [Shuffle][4] is a good starting point and be sure to try [Core Data][5].

This version of TLIndexPathTools is designed to handle up to a few thousand items. Larger data sets may not perform well.<commit_msg>Improve readme overview section<commit_after>TLIndexPathTools
================

TLIndexPathTools is a set of components designed to greatly simplify building
rich, dynamic table and collection views. Here are some of the awesome things that TLIndexPathTools does:

* Automatically calculate and perform animated inserts, deletes and moves.
* Automatically organize the data model into sections.
* Simplify implementing data source and delegate methods via rich data model APIs.
* Provide a simpler alternative to Core Data's `NSFetchedResultsController`

##Installation

1. Download the TLIndexPathTools project
2. Add the TLIndexPathTools sub-folder (sibling of the Examples folder) to your Xcode project.
3. Link to QuartzCore.framework and CoreData.framework (on the Build Phases tab of your project's target).

<!--CoreData is required for Core Data integration and because `TLIndexPathSectionInfo` implements the `NSFetchedResultsSectionInfo` protocol. QuartzCore is required because the Grid extension uses it.-->

##Overview

Table and collection view batch updates (inserts, deletes and moves) are great because they provide the smooth animation everyone loves. But if you've ever written batch update code, you may have found that they can make your view controller's implementation very complex (and confusing). TLIndexPathTools makes all of this very easy by providing two simple classes to do the bookkeeping and perform the batch updates for you. `TLIndexPathDataModel` does the bookkeeping. It can organize your data into sections and provides a rich API to simplify implementing data source and delegate methods. `TLIndexPathUpdates` performs the batch updates. All you've got to do is provide two versions of your data model.

Most of the functionality in TLIndexPathTools can be accomplished with just `TLIndexPathDataModel` and `TLIndexPathUpdates`. However, there are a number of additional components that build on these classes to make life a little bit easier.

* `TLIndexPathController` provides a common programming model for building view controllers that work interchangeably with Core Data `NSFetchRequests` or plain arrays. One controller to rule them all.
* `TLTableViewController` and `TLCollectionViewController` are base  table and collection view implementations that provide the essential data source and delegate methods to get you up and running quickly with a few bells and whistles, like data-driven table cell height calculation, thrown in for good measure.
* `TLIndexPathItem` is a wrapper class for your data items, useful for things like heterogenous data or multiple cell prototypes. Take a look at the [Settings sample project][1], for example.
* The `Extensions` folder contains a number of extensions for things like [collapsable sections][2] and [expandable tree views][3]. This is a good resource to see how `TLIndexPathDataModel` can be easily extended for special data structures.
* And last, but not least, the `Examples` folder contains numerous sample projects demonstrating various use cases and features of the framework. [Shuffle][4] is a good starting point and be sure to try [Core Data][5].

This version of TLIndexPathTools is designed to handle up to a few thousand items. Larger data sets may not perform well.
{'fraction_non_alphanumeric': 0.04625618811881188, 'fraction_numerical': 0.0024752475247524753, 'mean_word_length': 5.400990099009901, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2509221', 'n_tokens_mistral': 1474, 'n_tokens_neox': 1425, 'n_words': 892}