Sha256: 0e80d0e8070ddae81de3974099389c9dac98312c2e9271e4326f9cd4e063b9be

Contents?: true

Size: 1.49 KB

Versions: 4

Compression:

Stored size: 1.49 KB

Contents

require 'thread'

class DatWorkerPool

  class LockedObject
    attr_reader :mutex

    def initialize(object = nil)
      @object = object
      @mutex  = Mutex.new
    end

    def value
      @mutex.synchronize{ @object }
    end

    def set(new_object)
      @mutex.synchronize{ @object = new_object }
    end

    def with_lock(&block)
      @mutex.synchronize{ block.call(@mutex, @object) }
    end

  end

  class LockedArray < LockedObject
    def initialize(array = nil)
      super(array || [])
    end

    alias :values :value

    def first;  @mutex.synchronize{ @object.first };  end
    def last;   @mutex.synchronize{ @object.last };   end
    def size;   @mutex.synchronize{ @object.size };   end
    def empty?; @mutex.synchronize{ @object.empty? }; end

    def push(new_item); @mutex.synchronize{ @object.push(new_item) }; end
    def pop;            @mutex.synchronize{ @object.pop };            end

    def shift;             @mutex.synchronize{ @object.shift };             end
    def unshift(new_item); @mutex.synchronize{ @object.unshift(new_item) }; end

    def delete(item); @mutex.synchronize{ @object.delete(item) }; end
  end

  class LockedSet < LockedObject
    def initialize; super(Set.new); end

    alias :values :value

    def size;   @mutex.synchronize{ @object.size };   end
    def empty?; @mutex.synchronize{ @object.empty? }; end

    def add(item);    @mutex.synchronize{ @object.add(item) };    end
    def remove(item); @mutex.synchronize{ @object.delete(item) }; end
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dat-worker-pool-0.6.3 lib/dat-worker-pool/locked_object.rb
dat-worker-pool-0.6.2 lib/dat-worker-pool/locked_object.rb
dat-worker-pool-0.6.1 lib/dat-worker-pool/locked_object.rb
dat-worker-pool-0.6.0 lib/dat-worker-pool/locked_object.rb