class Concurrent::Promises::AbstractFlatPromise

Public Class Methods

new(delayed_because, blockers_count, event_or_future) click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1788
def initialize(delayed_because, blockers_count, event_or_future)
  delayed = LockFreeStack.of1(self)
  super(delayed, blockers_count, event_or_future)
  # noinspection RubyArgCount
  @Touched        = AtomicBoolean.new false
  @DelayedBecause = delayed_because || LockFreeStack.new

  event_or_future.add_callback_clear_delayed_node delayed.peek
end

Public Instance Methods

touch() click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1798
def touch
  if @Touched.make_true
    clear_and_propagate_touch @DelayedBecause
  end
end

Private Instance Methods

add_delayed_of(future) click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1818
def add_delayed_of(future)
  delayed = future.promise.delayed_because
  if touched?
    clear_and_propagate_touch delayed
  else
    BlockedPromise.add_delayed @DelayedBecause, delayed
    clear_and_propagate_touch @DelayedBecause if touched?
  end
end
on_resolvable(resolved_future, index) click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1810
def on_resolvable(resolved_future, index)
  resolve_with resolved_future.internal_state
end
resolvable?(countdown, future, index) click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1814
def resolvable?(countdown, future, index)
  !@Future.internal_state.resolved? && super(countdown, future, index)
end
touched?() click to toggle source
# File lib/concurrent-ruby/concurrent/promises.rb, line 1806
def touched?
  @Touched.value
end