class ExternalSortModule::ChunkRandomAccess

A subclass of Chunk that does not use a sliding window, and instead can contain the entire target length; includes methods for accessing target elements in arbitrary (non-streaming) order

Attributes

num_elements[R]

Public Class Methods

new(target_file, target_offset, target_length, element_size) click to toggle source

Construct chunk, and read the complete targeted bytes to the buffer

Calls superclass method ExternalSortModule::Chunk::new
# File lib/geotree/externalsort.rb, line 58
def initialize(target_file, target_offset, target_length, element_size)
  super(target_file,target_offset,target_length,element_size,target_length)

  @num_elements = target_length / element_size

  chunk_size = target_length

  f = @target_file
  f.pos = @target_offset
  @buffer = f.read(chunk_size)
  raise IOError if !@buffer || @buffer.size != chunk_size
end

Public Instance Methods

element(index) click to toggle source

Get element from chunk @param index of element,

# File lib/geotree/externalsort.rb, line 73
def element(index)
  raise ArgumentError if index < 0 || index >= num_elements
  off = index * @element_size
  [@buffer,off]
end
replace_buffer_with(b) click to toggle source

Replace existing buffer

# File lib/geotree/externalsort.rb, line 80
def replace_buffer_with(b)
  raise IllegalArgumentException if b.size != @buffer.size
  @buffer = b
end
write() click to toggle source

Write buffer to target

# File lib/geotree/externalsort.rb, line 86
def write
  f = @target_file
  f.pos = @target_end_offset - @target_length
  bytes_written = f.write(@buffer)
  raise IOError if @buffer.size != bytes_written
end