     
     open func reloadData() { }
     
-    fileprivate func compute() {
+    fileprivate func computeIndices() {
         
         for (sectionIndex, var section) in sections.enumerated() {
             section.index = sectionIndex

    
    public func append(cells:[CollectionCellDescriptable], in section:CollectionSectionDescriptable) {
        section.cells.append(contentsOf: cells)
        compute()
        
        result?.insertedCellDescriptors.append(contentsOf: cells)
        result?.insertedIndexPaths.append(contentsOf: cells.map{ $0.indexPath } )
    }
    
    public func remove(cells:[CollectionCellDescriptable]) {
        var needToCompute = false
        cells.forEach { (cellToDelete) in
            if let section = sectionDescriptable(for: cellToDelete) {
                if let index = section.cells.index(where: {$0 === cellToDelete} ) {
                    section.cells.remove(at: index)
                    result?.deletedIndexPaths.append( cellToDelete.indexPath )
                    result?.deletedCellDescriptors.append(cellToDelete )
                    needToCompute = true
                }
            }
        }
        if needToCompute {
            compute()
        }
    }
    

    
    public var sections = [CollectionSectionDescriptable]() {
        didSet {
            computeIndices()
        }
    }
    
