Sha256: b1f791144d9a7af013d2121ea859a6c3fdedcc83cd3337feba6cc702468734d5

Contents?: true

Size: 785 Bytes

Versions: 18

Compression:

Stored size: 785 Bytes

Contents

require "thread"

class FutureResource

  def initialize
    @resource_lock          = Monitor.new
    @resource_value_blocker = @resource_lock.new_cond
  end

  def set_yet?
    @resource_lock.synchronize { defined? @resource }
  end

  def resource
    @resource_lock.synchronize do
      @resource_value_blocker.wait unless defined? @resource
      @resource
    end
  end

  def resource=(resource)
    @resource_lock.synchronize do
      raise ResourceAlreadySetException if defined? @resource
      @resource = resource
      @resource_value_blocker.broadcast
      @resource_value_blocker = nil # Don't really need it anymore.
    end
  end

  class ResourceAlreadySetException < StandardError
    def initialize
      super "Cannot set this resource twice!"
    end
  end

end

Version data entries

18 entries across 18 versions & 3 rubygems

Version Path
adhearsion-1.2.6 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.2.5 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.2.4 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.2.3 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.2.1 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.2.0 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.1.1 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.1.0 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.0.3 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.0.2 lib/adhearsion/foundation/future_resource.rb
adhearsion-cw-1.0.2.3 lib/adhearsion/foundation/future_resource.rb
adhearsion-cw-1.0.2.2 lib/adhearsion/foundation/future_resource.rb
adhearsion-cw-1.0.2.1 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.0.1 lib/adhearsion/foundation/future_resource.rb
adhearsion-1.0.0 lib/adhearsion/foundation/future_resource.rb
rene-adhearsion-0.8.6 lib/adhearsion/foundation/future_resource.rb
adhearsion-0.8.6 lib/adhearsion/foundation/future_resource.rb
adhearsion-0.8.5 lib/adhearsion/foundation/future_resource.rb