     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? = ""

        return keyPathValue
    }
    
    private func sortedMirrors(mirrors: [T]) -> [T] {
        let mutArray = NSMutableArray(array: mirrors)
        let sorts = request.sortDescriptors.map(toNSSortDescriptor)

        return mutArray as AnyObject as! [T]
    }

    /**
    Sort the sections using the Given KeyPath
    */
    private func sortSections() {
        sections.sortInPlace { $0.keyPath.localizedCaseInsensitiveCompare($1.keyPath) == NSComparisonResult.OrderedAscending }
    }
    
    /**
    Transforms a SortDescriptor into a NSSortDescriptor that can be applied to NSMutableArray
    
    :param: sort SortDescriptor object
    
    :returns: NSSortDescriptor
    */
    private func toNSSortDescriptor(sort: SortDescriptor) -> NSSortDescriptor {
        return NSSortDescriptor(key: sort.property, ascending: sort.ascending)
    }
