Class: PDF::Reader::ObjectCache
- Inherits:
-
Object
- Object
- PDF::Reader::ObjectCache
- Defined in:
- lib/pdf/reader/object_cache.rb
Overview
A Hash-like object for caching commonly used objects from a PDF file.
This is an internal class, no promises about a stable API.
Constant Summary collapse
- 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
[:Catalog, :Page, :Pages]
Instance Attribute Summary collapse
- #hits ⇒ Object readonly
- #misses ⇒ Object readonly
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #each(&block) ⇒ Object (also: #each_pair)
- #each_key(&block) ⇒ Object
- #each_value(&block) ⇒ Object
- #empty? ⇒ Boolean
- #fetch(key, local_default = nil) ⇒ Object
- #has_value?(value) ⇒ Boolean
- #include?(key) ⇒ Boolean (also: #has_key?, #key?, #member?)
-
#initialize(lru_size = 1000) ⇒ ObjectCache
constructor
A new instance of ObjectCache.
- #keys ⇒ Object
- #size ⇒ Object (also: #length)
- #to_s ⇒ Object
- #values ⇒ Object
Constructor Details
#initialize(lru_size = 1000) ⇒ ObjectCache
Returns a new instance of ObjectCache.
27 28 29 30 31 32 |
# File 'lib/pdf/reader/object_cache.rb', line 27 def initialize(lru_size = 1000) @objects = {} #: Hash[untyped, untyped] @lru_cache = Hashery::LRUHash.new(lru_size.to_i) #: Hashery::LRUHash @hits = 0 #: Integer @misses = 0 #: Integer end |
Instance Attribute Details
#hits ⇒ Object (readonly)
21 22 23 |
# File 'lib/pdf/reader/object_cache.rb', line 21 def hits @hits end |
#misses ⇒ Object (readonly)
24 25 26 |
# File 'lib/pdf/reader/object_cache.rb', line 24 def misses @misses end |
Instance Method Details
#[](key) ⇒ Object
34 35 36 37 |
# File 'lib/pdf/reader/object_cache.rb', line 34 def [](key) update_stats(key) @objects[key] || @lru_cache[key] end |
#[]=(key, value) ⇒ Object
39 40 41 42 43 44 45 |
# File 'lib/pdf/reader/object_cache.rb', line 39 def []=(key, value) if cacheable?(value) @objects[key] = value else @lru_cache[key] = value end end |
#each(&block) ⇒ Object Also known as: each_pair
52 53 54 55 |
# File 'lib/pdf/reader/object_cache.rb', line 52 def each(&block) @objects.each(&block) @lru_cache.each(&block) end |
#each_key(&block) ⇒ Object
58 59 60 61 |
# File 'lib/pdf/reader/object_cache.rb', line 58 def each_key(&block) @objects.each_key(&block) @lru_cache.each_key(&block) end |
#each_value(&block) ⇒ Object
63 64 65 66 |
# File 'lib/pdf/reader/object_cache.rb', line 63 def each_value(&block) @objects.each_value(&block) @lru_cache.each_value(&block) end |
#empty? ⇒ Boolean
73 74 75 |
# File 'lib/pdf/reader/object_cache.rb', line 73 def empty? @objects.empty? && @lru_cache.empty? end |
#fetch(key, local_default = nil) ⇒ Object
47 48 49 50 |
# File 'lib/pdf/reader/object_cache.rb', line 47 def fetch(key, local_default = nil) update_stats(key) @objects[key] || @lru_cache.fetch(key) { local_default } end |
#has_value?(value) ⇒ Boolean
84 85 86 |
# File 'lib/pdf/reader/object_cache.rb', line 84 def has_value?(value) @objects.has_value?(value) || @lru_cache.has_value?(value) end |
#include?(key) ⇒ Boolean Also known as: has_key?, key?, member?
77 78 79 |
# File 'lib/pdf/reader/object_cache.rb', line 77 def include?(key) @objects.include?(key) || @lru_cache.include?(key) end |
#keys ⇒ Object
94 95 96 |
# File 'lib/pdf/reader/object_cache.rb', line 94 def keys @objects.keys + @lru_cache.keys end |
#size ⇒ Object Also known as: length
68 69 70 |
# File 'lib/pdf/reader/object_cache.rb', line 68 def size @objects.size + @lru_cache.size end |
#to_s ⇒ Object
89 90 91 |
# File 'lib/pdf/reader/object_cache.rb', line 89 def to_s "<PDF::Reader::ObjectCache size: #{self.size}>" end |
#values ⇒ Object
99 100 101 |
# File 'lib/pdf/reader/object_cache.rb', line 99 def values @objects.values + @lru_cache.values end |