package com.meloda.fast.extensions import androidx.annotation.UiThread import androidx.lifecycle.MutableLiveData object LiveDataExtensions { operator fun MutableLiveData>.set(position: Int, v: T) { val value = (this.value ?: arrayListOf()).apply { this[position] = v } this.value = value } operator fun MutableLiveData>.get(position: Int): T { return (value as MutableList)[position] } @JvmOverloads fun MutableLiveData>.add(v: T, position: Int = -1) { val value = (this.value ?: arrayListOf()).apply { if (position == -1) this.add(v) else this.add(position, v) } this.value = value } @JvmOverloads fun MutableLiveData>.addAll(values: List, position: Int = -1) { val value = (this.value ?: arrayListOf()).apply { if (position == -1) this.addAll(values) else this.addAll(position, values) } this.value = value } @Suppress("TYPE_INFERENCE_ONLY_INPUT_TYPES_WARNING") fun MutableLiveData>.removeAll(values: List) { val value = (this.value ?: arrayListOf()).apply { this.removeAll(values) } this.value = value } fun MutableLiveData>.removeAt(index: Int) { val value = (this.value ?: arrayListOf()).apply { this.removeAt(index) } this.value = value } fun MutableLiveData>.remove(item: T) { val value = (this.value ?: arrayListOf()).apply { this.remove(item) } this.value = value } operator fun MutableLiveData>.iterator(): Iterator { return (value as MutableList).iterator() } fun MutableLiveData>.clear() { value = arrayListOf() } val MutableLiveData>.indices get() = (value as MutableList).indices val MutableLiveData>.size get() = (value as MutableList).size fun MutableLiveData>.isEmpty(): Boolean { return (value as MutableList).isEmpty() } fun MutableLiveData>.isNotEmpty(): Boolean { return !isEmpty() } fun MutableLiveData>.requireValue() = value!! @UiThread operator fun MutableLiveData>.plusAssign(values: List) { val value = (this.value ?: arrayListOf()).apply { this.addAll(values) } this.value = value } operator fun MutableLiveData>.plusAssign(v: T) { val value = (this.value ?: arrayListOf()).apply { this.add(v) } this.value = value } operator fun MutableLiveData>.minusAssign(values: List) { val value = (this.value ?: arrayListOf()).apply { this.removeAll(values) } this.value = value } operator fun MutableLiveData>.minusAssign(v: T) { val value = (this.value ?: arrayListOf()).apply { this.remove(v) } this.value = value } }