class PackedIndex
Constants
- ELEMS
Attributes
Public Class Methods
Source
# File lib/rbbt/packed_index.rb, line 37 def initialize(file, write = false, pattern = nil) @file = file if write @stream = Open.open(file, :mode => 'wb') @mask, @item_size = PackedIndex.process_mask pattern header = [@mask.length, @item_size].pack("ll") @stream.write(header) @stream.write(mask) @offset = @mask.length + 8 else @stream = Open.open(file, :mode => 'rb') header = @stream.read(8) mask_length, @item_size = header.unpack("ll") @mask = @stream.read(mask_length) @offset = @mask.length + 8 end @nil_string = "NIL" << ("-" * (@item_size - 3)) end
Source
# File lib/rbbt/packed_index.rb, line 11 def self.process_mask(mask) str = "" size = 0 mask.each do |e| if ELEMS.include? e str << ELEMS[e][0] size += ELEMS[e][1] elsif e =~ /^(\d+)s$/ num = $1.to_i str << "a" << num.to_s size += num else e, num = e.split(":") str << e size = (num.nil? ? size + 1 : size + num.to_i) end end [str, size] end
Public Instance Methods
Source
# File lib/rbbt/packed_index.rb, line 69 def <<(payload) if payload.nil? @stream.write nil_string else @stream.write payload.pack(mask) end end
Source
# File lib/rbbt/packed_index.rb, line 77 def [](position) @stream.seek(position * item_size + offset) encoded = @stream.read(item_size) return nil if encoded.nil? or encoded == nil_string encoded.unpack mask end
Source
# File lib/rbbt/packed_index.rb, line 90 def close stream.close unless stream.closed? end
Source
# File lib/rbbt/packed_index.rb, line 60 def persistence_path=(value) @file=value end
Source
# File lib/rbbt/packed_index.rb, line 64 def read(force = false) close @stream = Open.open(file, :mode => 'rb') end
Source
# File lib/rbbt/packed_index.rb, line 31 def size @size ||= begin (File.size(file) - offset) / item_size end end
Source
# File lib/rbbt/packed_index.rb, line 84 def values_at(*positions) positions.collect{|p| self[p] } end