class Phlex::FIFO

@api private

def [](key)

def [](key)
	k, v = @store[key.hash]
	v if k.eql?(key)
end

def []=(key, value)

def []=(key, value)
	return if value.bytesize > @max_value_bytesize
	digest = key.hash
	@mutex.synchronize do
		# Check the key definitely doesn't exist now we have the lock
		return if @store[digest]
		@store[digest] = [key, value].freeze
		@bytesize += value.bytesize
		while @bytesize > @max_bytesize
			k, v = @store.shift
			@bytesize -= v[1].bytesize
		end
	end
end

def clear

def clear
	@mutex.synchronize do
		@store.clear
		@bytesize = 0
	end
end

def expand(bytes)

def expand(bytes)
	@mutex.synchronize do
		@max_bytesize += bytes
	end
end

def initialize(max_bytesize: 2_000, max_value_bytesize: 2_000)

def initialize(max_bytesize: 2_000, max_value_bytesize: 2_000)
	@store = {}
	@max_bytesize = max_bytesize
	@max_value_bytesize = max_value_bytesize
	@bytesize = 0
	@mutex = Monitor.new
end

def size

def size
	@store.size
end