Advertisement
Guest User

Mutable List Impl

a guest
Jun 7th, 2021
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.94 KB | None | 0 0
  1. internal class SavableList<T> (
  2.     private val listSource: MutableList<T>,
  3.     private val saveAction: SavableList<T>.() -> Unit
  4. ) : MutableList<T> by listSource {
  5.     private fun save() = saveAction()
  6.    
  7.     override fun add(element: T): Boolean =
  8.         listSource.add(element).apply { save() }
  9.  
  10.     override fun add(index: Int, element: T) {
  11.         listSource.add(index, element)
  12.         save()
  13.     }
  14.  
  15.     override fun addAll(elements: Collection<T>): Boolean =
  16.         listSource.addAll(elements).apply { save() }
  17.  
  18.     override fun addAll(index: Int, elements: Collection<T>): Boolean =
  19.         listSource.addAll(index, elements).apply { save() }
  20.  
  21.     override fun clear() {
  22.         listSource.clear()
  23.         save()
  24.     }
  25.  
  26.     private fun listIterator(iterator: MutableListIterator<T>) = object : MutableListIterator<T> by listIterator() {
  27.         override fun add(element: T) {
  28.             iterator.add(element)
  29.             save()
  30.         }
  31.         override fun remove() {
  32.             iterator.remove()
  33.             save()
  34.         }
  35.         override fun set(element: T) {
  36.             iterator.set(element)
  37.             save()
  38.         }
  39.     }
  40.  
  41.     override fun listIterator(): MutableListIterator<T> =
  42.         listIterator(listSource.listIterator())
  43.  
  44.     override fun listIterator(index: Int): MutableListIterator<T> =
  45.         listIterator(listSource.listIterator(index))
  46.  
  47.     override fun remove(element: T): Boolean =
  48.         listSource.remove(element).apply { save() }
  49.  
  50.     override fun removeAll(elements: Collection<T>): Boolean =
  51.         listSource.retainAll(elements).apply { save() }
  52.  
  53.     override fun removeAt(index: Int): T =
  54.         listSource.removeAt(index).apply { save() }
  55.  
  56.     override fun retainAll(elements: Collection<T>): Boolean =
  57.         listSource.retainAll(elements).apply { save() }
  58.  
  59.     override fun set(index: Int, element: T): T =
  60.         listSource.set(index, element).apply { save() }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement