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