class PDF::Reader::ObjectCache

A Hash-like object for caching commonly used objects from a PDF file.

This is an internal class, no promises about a stable API.

Constants

CACHEABLE_TYPES

These object types use little memory and are accessed a heap of times as part of random page access, so we’ll cache the unmarshalled objects and avoid lots of repetitive (and expensive) tokenising

Attributes

hits[R]
misses[R]

Public Class Methods

new(lru_size = 1000) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 22
def initialize(lru_size = 1000)
  @objects = {}
  @lru_cache = Hashery::LRUHash.new(lru_size.to_i)
  @hits = 0
  @misses = 0
end

Public Instance Methods

[](key) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 29
def [](key)
  update_stats(key)
  @objects[key] || @lru_cache[key]
end
[]=(key, value) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 34
def []=(key, value)
  if cacheable?(value)
    @objects[key] = value
  else
    @lru_cache[key] = value
  end
end
each(&block) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 47
def each(&block)
  @objects.each(&block)
  @lru_cache.each(&block)
end
Also aliased as: each_pair
each_key(&block) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 53
def each_key(&block)
  @objects.each_key(&block)
  @lru_cache.each_key(&block)
end
each_pair(&block)
Alias for: each
each_value(&block) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 58
def each_value(&block)
  @objects.each_value(&block)
  @lru_cache.each_value(&block)
end
empty?() click to toggle source
# File lib/pdf/reader/object_cache.rb, line 68
def empty?
  @objects.empty? && @lru_cache.empty?
end
fetch(key, local_default = nil) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 42
def fetch(key, local_default = nil)
  update_stats(key)
  @objects[key] || @lru_cache.fetch(key, local_default)
end
has_key?(key)
Alias for: include?
has_value?(value) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 79
def has_value?(value)
  @objects.has_value?(value) || @lru_cache.has_value?(value)
end
include?(key) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 72
def include?(key)
  @objects.include?(key) || @lru_cache.include?(key)
end
Also aliased as: has_key?, key?, member?
key?(key)
Alias for: include?
keys() click to toggle source
# File lib/pdf/reader/object_cache.rb, line 87
def keys
  @objects.keys + @lru_cache.keys
end
length()
Alias for: size
member?(key)
Alias for: include?
size() click to toggle source
# File lib/pdf/reader/object_cache.rb, line 63
def size
  @objects.size + @lru_cache.size
end
Also aliased as: length
to_s() click to toggle source
# File lib/pdf/reader/object_cache.rb, line 83
def to_s
  "<PDF::Reader::ObjectCache size: #{self.size}>"
end
values() click to toggle source
# File lib/pdf/reader/object_cache.rb, line 91
def values
  @objects.values + @lru_cache.values
end

Private Instance Methods

cacheable?(obj) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 105
def cacheable?(obj)
  obj.is_a?(Hash) && CACHEABLE_TYPES.include?(obj[:Type])
end
update_stats(key) click to toggle source
# File lib/pdf/reader/object_cache.rb, line 97
def update_stats(key)
  if has_key?(key)
    @hits += 1
  else
    @misses += 1
  end
end