     func didDelete<T: Object>(object: T, indexPath: NSIndexPath)
 }
 
-
+/**
+The Cache is responsible to store a copy of the current objects used by the RRC obtained by the original request.
+It has an Array of sections where the objects are stored, always filtered and sorted by the request.
+
+The array of sections is constructed depending on the SectionKeyPath given in the RRC creation.
+
+When interacting with the cache is important to do it always in this order:
+Taking into account that a MOVE is not an update but a pair of delete/insert operations.
+
+- Deletions
+- Insertions
+- Updates (Only for objects that won't change position)
+
+:important: always call the three methods, the operations are commited at the end
+so calling only `delete` will change the cache but not call the delegate.
+*/
 class RealmResultsCache<T: Object> {
     var request: RealmRequest<T>
     var sectionKeyPath: String? = ""

    
    //MARK: Helpers
    
    func updateType(object: T) -> RealmCacheUpdateType {
        let oldSectionOptional = sectionForOutdateObject(object)
        guard let oldSection = oldSectionOptional else { return .Insert }

        return keyPathValue
    }
    
    /**
    Sort an array of objects (mirrors of the original realm objects)
    Using the SortDescriptors of the RealmRequest of the RRC.
    
    :param: mirrors Objects to sort
    
    :returns: sorted Array<T>
    */
    private func sortedMirrors(mirrors: [T]) -> [T] {
        let mutArray = NSMutableArray(array: mirrors)
        let sorts = request.sortDescriptors.map(toNSSortDescriptor)
