class PDF::Reader::ObjectCache

nodoc
This is an internal class, no promises about a stable API.
A Hash-like object for caching commonly used objects from a PDF file.

def [](key)

def [](key)
  update_stats(key)
  @objects[key] || @lru_cache[key]
end

def []=(key, value)

def []=(key, value)
  if cacheable?(value)
    @objects[key] = value
  else
    @lru_cache[key] = value
  end
end

def cacheable?(obj)

def cacheable?(obj)
  obj.is_a?(Hash) && CACHEABLE_TYPES.include?(obj[:Type])
end

def each(&block)

def each(&block)
  @objects.each(&block)
  @lru_cache.each(&block)
end

def each_key(&block)

def each_key(&block)
  @objects.each_key(&block)
  @lru_cache.each_key(&block)
end

def each_value(&block)

def each_value(&block)
  @objects.each_value(&block)
  @lru_cache.each_value(&block)
end

def empty?

def empty?
  @objects.empty? && @lru_cache.empty?
end

def fetch(key, local_default = nil)

def fetch(key, local_default = nil)
  update_stats(key)
  @objects[key] || @lru_cache.fetch(key, local_default)
end

def has_value?(value)

def has_value?(value)
  @objects.has_value?(value) || @lru_cache.has_value?(value)
end

def include?(key)

def include?(key)
  @objects.include?(key) || @lru_cache.include?(key)
end

def initialize(lru_size = 1000)

def initialize(lru_size = 1000)
  @objects = {}
  @lru_cache = Hashery::LRUHash.new(lru_size.to_i)
  @hits = 0
  @misses = 0
end

def keys

def keys
  @objects.keys + @lru_cache.keys
end

def size

def size
  @objects.size + @lru_cache.size
end

def to_s

def to_s
  "<PDF::Reader::ObjectCache size: #{self.size}>"
end

def update_stats(key)

def update_stats(key)
  if has_key?(key)
    @hits += 1
  else
    @misses += 1
  end
end

def values

def values
  @objects.values + @lru_cache.values
end