Class: OklahomaMixer::FixedLengthDatabase
- Inherits:
-
HashDatabase
- Object
- HashDatabase
- OklahomaMixer::FixedLengthDatabase
- Defined in:
- lib/oklahoma_mixer/fixed_length_database.rb,
lib/oklahoma_mixer/fixed_length_database/c.rb
Defined Under Namespace
Modules: C
Constant Summary
Constants inherited from HashDatabase
HashDatabase::MODES, HashDatabase::OPTS
Instance Attribute Summary
Attributes inherited from HashDatabase
Instance Method Summary collapse
- #defrag(steps = 0) ⇒ Object
- #each ⇒ Object (also: #each_pair)
-
#each_key ⇒ Object
Iteration ###.
-
#keys(options = { }) ⇒ Object
Getting and Setting Keys ###.
-
#optimize(options) ⇒ Object
File System ###.
Methods inherited from HashDatabase
#[], #abort, #clear, #close, #commit, #copy, #default, #default=, #delete, #delete_if, #each_value, #empty?, #fetch, #file_size, #flush, #include?, #initialize, #read_only?, #size, #store, #to_hash, #transaction, #update, #values, #values_at
Constructor Details
This class inherits a constructor from OklahomaMixer::HashDatabase
Instance Method Details
#defrag(steps = 0) ⇒ Object
16 17 18 |
# File 'lib/oklahoma_mixer/fixed_length_database.rb', line 16 def defrag(steps = 0) # do nothing: not needed, but provided for a consistent interface end |
#each ⇒ Object Also known as: each_pair
72 73 74 75 76 |
# File 'lib/oklahoma_mixer/fixed_length_database.rb', line 72 def each each_key do |key| yield [key, self[key]] end end |
#each_key ⇒ Object
Iteration ###
62 63 64 65 66 67 68 69 70 |
# File 'lib/oklahoma_mixer/fixed_length_database.rb', line 62 def each_key try(:iterinit) loop do return self unless key = try( :iternext, :failure => 0, :no_error => {22 => nil} ) yield key # cast not needed: already Integer end end |
#keys(options = { }) ⇒ Object
Getting and Setting Keys ###
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/oklahoma_mixer/fixed_length_database.rb', line 24 def keys( = { }) if .include? :range warn "range supersedes prefix" if [:prefix] range = [:range] unless range.respond_to?(:first) and range.respond_to?(:last) fail ArgumentError, "Range or two element Array expected" end start = cast_key_in(range.first) include_start = !.fetch(:exclude_start, false) finish = cast_key_in(range.last) include_finish = !( range.respond_to?(:exclude_end?) ? range.exclude_end? : .fetch(:exclude_end, false) ) else fail ArgumentError, "prefix not supported" if [:prefix] start = cast_key_in(:min) include_start = true finish = cast_key_in(:max) include_finish = true end limit = .fetch(:limit, -1) Utilities.temp_int do |count| begin list = lib.range(@db, start, finish, limit, count) array = list.get_array_of_uint64(0, count.get_int(0)) array.shift if array.first == start and not include_start array.pop if array.last == finish and not include_finish array # cast not needed: already Integer ensure Utilities.free(list) if list end end end |
#optimize(options) ⇒ Object
File System ###
10 11 12 13 14 |
# File 'lib/oklahoma_mixer/fixed_length_database.rb', line 10 def optimize() try( [:tune] ? :tune : :optimize, .fetch(:width, 0).to_i, .fetch(:limsiz, 0).to_i ) end |