Class: Franz::Sash
- Inherits:
-
Object
- Object
- Franz::Sash
- Defined in:
- lib/franz/sash.rb
Overview
Sash - A threadsafe hash/array hybrid with access times
Think of it like a Hash where the keys map to “value buffers”
Instance Method Summary collapse
-
#flush(key) ⇒ Array<Object>
Flush and return a key’s value buffer.
-
#get(key) ⇒ Array<Object>
Return a key’s value buffer.
-
#initialize ⇒ Sash
constructor
Create a new, empty Sash.
-
#insert(key, value) ⇒ Object
Insert a value into a key’s value buffer.
-
#keys ⇒ Array<Object>
Grab a list of known keys.
-
#length ⇒ Integer
Return the number of keys.
-
#mtime(key) ⇒ Time
Return the last time the key’s value buffer was modified.
-
#remove(key) ⇒ Array<Object>
Remove and return a key’s value buffer.
-
#size(key) ⇒ Integer
Return the size of a key’s value buffer.
Constructor Details
#initialize ⇒ Sash
Create a new, empty Sash.
20 21 22 23 24 25 |
# File 'lib/franz/sash.rb', line 20 def initialize @mutex = Mutex.new @mtime = Hash.new { |default, key| default[key] = nil } @hash = Hash.new { |default, key| default[key] = [] } @size = Hash.new { |default, key| default[key] = 0 } end |
Instance Method Details
#flush(key) ⇒ Array<Object>
Flush and return a key’s value buffer.
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/franz/sash.rb', line 81 def flush key value = nil @mutex.synchronize do value = @hash[key] @hash[key] = [] @size[key] = 0 @mtime[key] = Time.now end return value end |
#get(key) ⇒ Array<Object>
Return a key’s value buffer.
57 |
# File 'lib/franz/sash.rb', line 57 def get key ; @hash[key] end |
#insert(key, value) ⇒ Object
Insert a value into a key’s value buffer.
43 44 45 46 47 48 49 50 |
# File 'lib/franz/sash.rb', line 43 def insert key, value @mutex.synchronize do @hash[key] << value @size[key] += 1 @mtime[key] = Time.now end return value end |
#keys ⇒ Array<Object>
Grab a list of known keys.
30 |
# File 'lib/franz/sash.rb', line 30 def keys ; @hash.keys end |
#length ⇒ Integer
Return the number of keys.
35 |
# File 'lib/franz/sash.rb', line 35 def length ; keys.length ; end |
#mtime(key) ⇒ Time
Return the last time the key’s value buffer was modified.
74 |
# File 'lib/franz/sash.rb', line 74 def mtime key ; @mtime[key] end |
#remove(key) ⇒ Array<Object>
Remove and return a key’s value buffer.
64 65 66 67 |
# File 'lib/franz/sash.rb', line 64 def remove key @size[key] -= 1 @hash.delete(key) end |
#size(key) ⇒ Integer
Return the size of a key’s value buffer.
97 98 99 |
# File 'lib/franz/sash.rb', line 97 def size key @size[key] end |