class Concurrent::Collection::CopyOnWriteObserverSet
Experimental RBS support (using type sampling data from the type_fusion
project).
# sig/concurrent-ruby/concurrent/collection/copy_on_write_observer_set.rbs class Concurrent::Collection::CopyOnWriteObserverSet < Concurrent::Collection::Synchronization::LockableObject def clear_observers_and_return_old: () -> untyped def initialize: () -> void def notify_and_delete_observers: (*Array[] args, ) -> Concurrent::Collection::CopyOnWriteObserverSet def notify_to: (Hash observers, *Array[] args) -> untyped def ns_initialize: () -> untyped end
@api private
duplicated and replaced with a new one.
every time an observer is added or removed the whole internal data structure is
A thread safe observer set implemented using copy-on-write approach:
def add_observer(observer = nil, func = :update, &block)
def add_observer(observer = nil, func = :update, &block) if observer.nil? && block.nil? raise ArgumentError, 'should pass observer as a first argument or block' elsif observer && block raise ArgumentError.new('cannot provide both an observer and a block') end if block observer = block func = :call end synchronize do new_observers = @observers.dup new_observers[observer] = func @observers = new_observers observer end end
def clear_observers_and_return_old
Experimental RBS support (using type sampling data from the type_fusion
project).
def clear_observers_and_return_old: () -> untyped
This signature was generated using 2 samples from 1 application.
def clear_observers_and_return_old synchronize do old_observers = @observers @observers = {} old_observers end end
def count_observers
def count_observers observers.count end
def delete_observer(observer)
def delete_observer(observer) synchronize do new_observers = @observers.dup new_observers.delete(observer) @observers = new_observers observer end end
def delete_observers
def delete_observers self.observers = {} self end
def initialize
Experimental RBS support (using type sampling data from the type_fusion
project).
def initialize: () -> void
This signature was generated using 1 sample from 1 application.
def initialize super() synchronize { ns_initialize } end
def notify_and_delete_observers(*args, &block)
Experimental RBS support (using type sampling data from the type_fusion
project).
def notify_and_delete_observers: (* args, ) -> Concurrent::Collection::CopyOnWriteObserverSet
This signature was generated using 1 sample from 1 application.
-
(CopyOnWriteObserverSet)
- self
Parameters:
-
args
(Object
) -- arguments to be passed to each observer
def notify_and_delete_observers(*args, &block) old = clear_observers_and_return_old notify_to(old, *args, &block) self end
def notify_observers(*args, &block)
-
(CopyOnWriteObserverSet)
- self
Parameters:
-
args
(Object
) -- arguments to be passed to each observer
def notify_observers(*args, &block) notify_to(observers, *args, &block) self end
def notify_to(observers, *args)
Experimental RBS support (using type sampling data from the type_fusion
project).
def notify_to: ( observers, * args) -> untyped
This signature was generated using 4 samples from 1 application.
def notify_to(observers, *args) raise ArgumentError.new('cannot give arguments and a block') if block_given? && !args.empty? observers.each do |observer, function| args = yield if block_given? observer.send(function, *args) end end
def ns_initialize
Experimental RBS support (using type sampling data from the type_fusion
project).
def ns_initialize: () -> untyped
This signature was generated using 1 sample from 1 application.
def ns_initialize @observers = {} end
def observers
def observers synchronize { @observers } end
def observers=(new_set)
def observers=(new_set) synchronize { @observers = new_set } end