Sha256: 4105bc1494f39bd3ec69d164b40b8e6f8748278261844ddd7009a33e8d2bc77e

Contents?: true

Size: 876 Bytes

Versions: 1

Compression:

Stored size: 876 Bytes

Contents

module HashPersistent
  class Counting
    class << self
      @@store = {}
      @@prefix = ""
      @@next_key = 0
      @@next_key_inc_lock = Mutex.new

      def setup(store, prefix)
        raise ArgumentError unless store.respond_to?(:has_key?) and prefix.respond_to?(:to_s)
        @@store = store
        @@prefix = prefix
      end

      def find(key)
        @@store[@@prefix + key]
      end
    end

    attr_reader :key

    def initialize
      @@next_key_inc_lock.synchronize do
        @key = @@next_key.to_s
        @@next_key += 1
      end
      @@store[@@prefix + @key] = self
    end

    def delete
      raise RuntimeError unless @@store.has_key?(@@prefix + @key)
      @@store.delete(@@prefix + @key)
    end

    def update
      raise RuntimeError unless @@store.has_key?(@@prefix + @key)
      @@store[@@prefix + @key] = self
    end    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kissifer-hash-persistent-0.0.3 lib/hash-persistent/counting.rb