         return current.contains(where: { isEqual($0, value) })
     }
     
-    public func append(_ value: Element) {
-        guard !contains(where: { isEqual($0, value) }) else { return }
+    public func append(_ value: Element) -> (Bool, count: Int) {
+        guard !contains(where: { isEqual($0, value) }) else { return (false, current.count) }
+        
         current.append(value)
         added.append(value)
         filtered = current
+        
+        return (true, current.count)
     }
     
-    public func update(_ value: Element) {
+    public func appendOrUpdate(_ value: Element) -> Int {
+        guard !append(value).0 else { return current.count }
+        _ = update(value)
+        return 0
+    }
+    
+    public func update(_ value: Element) -> (Bool, count: Int)  {
         // если нет в списке - выходим
-        guard let currentIndex = index(where: { isEqual($0, value) }) else { return }
+        guard let currentIndex = index(where: { isEqual($0, value) }) else { return (false, current.count) }
         // если есть в списке добавленных - выходим
-        guard !added.contains(where: { isEqual($0, value) }) else { return }
+        guard !added.contains(where: { isEqual($0, value) }) else { return (false, current.count)  }
         
         if let updatedIndex = updated.index(where:{ isEqual($0, value) }) {
           updated[updatedIndex] = value

        
        current[currentIndex] = value
        filtered = current
    }
    
    public func remove(_ value: Element) {
        guard let index = current.index(where: { isEqual($0, value) }) else { return }
        current.remove(at: index)
        
        // если объект был добавлен, то удаляем его из списка добавленных

            deleted.append(value)
        }
        filtered = current
        return (true, current.count)
    }
    
    public func filter(_ isIncluded: (Element) -> Bool) {
