2025-01-11 00:25:52 +01:00

68 lines
1.9 KiB
GDScript

extends ReadOnlyReactiveCollectionBase
class_name ReadOnlyReactiveCollection
var _collection : ReactiveCollectionBase
var _observers : Array[ObserverBase]
var is_disposed : bool
class _Observable extends Observable:
func _init(source : Observable, observers : Array[ObserverBase]):
var subscribe_ = func(observer, scheduler = null):
if not observer in observers:
observers.push_back(observer)
return source.subscribe1(observer, scheduler)
super._init(subscribe_)
func _init(collection : ReactiveCollectionBase):
super._init()
self.is_disposed = false
self._collection = collection
self._observe_add = self._Observable.new(collection.ObserveAdd, self._observers)
self._observe_move = self._Observable.new(collection.ObserveMove, self._observers)
self._observe_remove = self._Observable.new(collection.ObserveRemove, self._observers)
self._observe_replace = self._Observable.new(collection.ObserveReplace, self._observers)
self._observe_reset = self._Observable.new(collection.ObserveReset, self._observers)
func ObserveCountChanged(_notify_current_count : bool = false) -> Observable:
return self._collection.ObserveCountChanged(_notify_current_count)
func at(index : int):
if self.is_disposed:
DisposedError.raise()
return null
return self._collection.at(index)
func find(item) -> int:
if self.is_disposed:
DisposedError.raise()
return -1
return self._collection.find(item)
func to_list() -> Array:
if self.is_disposed:
DisposedError.raise()
return []
return self._collection.to_list()
func iter() -> Iterator:
if self.is_disposed:
DisposedError.raise()
return null
return self._collection.iter()
func size() -> int:
if self.is_disposed:
DisposedError.raise()
return -1
return self._collection.size()
func dispose():
if this.is_disposed:
return
this.is_disposed = true
for observer in this._observers:
observer.on_completed()