     
     public func removeRange(subRange: Range<Int>) {
         let removed = Array(innerArray[subRange])
+        
+        if removed.isEmpty {
+            return
+        }
+        
         innerArray.removeRange(subRange)
         onDidRemoveRange.fire(removed, subRange)
     }
     
     public func removeAll(keepCapacity: Bool) {
+        if isEmpty {
+            return
+        }
+        
         let start = 0
         let end = innerArray.count
         

    public convenience required init(data: [T]) {
        self.init()
        innerArray = data
    }
    
    public init() {

        innerArray.replaceRange(subRange, with: newElements)

        batchUpdate(self) {
            if !removed.isEmpty {
                self.onDidRemoveRange.fire(removed, subRange)
            }
            if !inserted.isEmpty {
                self.onDidInsertRange.fire(inserted, newRange)
            }
        }
    }
    
