class ExternalSortModule::ChunkWriter
Chunk
subclass that performs streaming writing to target with sliding window
Public Class Methods
new(target_file, target_offset, target_length, element_size, chunk_size = MAX_CHUNK_SIZE_)
click to toggle source
Calls superclass method
ExternalSortModule::Chunk::new
# File lib/geotree/externalsort.rb, line 146 def initialize(target_file, target_offset, target_length, element_size, chunk_size = MAX_CHUNK_SIZE_) super(target_file,target_offset,target_length,element_size, chunk_size) end
Public Instance Methods
write(src_buffer, src_offset = 0)
click to toggle source
Write an element to the target @param src_buffer source of element @param src_offset offset into source
# File lib/geotree/externalsort.rb, line 154 def write(src_buffer, src_offset = 0) raise IllegalStateException if done raise ArgumentError if (src_buffer.size - src_offset < @element_size) if @buffer_offset == @buffer.length max_size = @max_chunk_size chunk_size = [@target_end_offset - @target_offset, max_size].min @buffer = zero_bytes(chunk_size) @buffer_offset = 0 end @buffer[@buffer_offset,@element_size] = src_buffer[src_offset,@element_size] @buffer_offset += @element_size # If buffer is now full, flush to target if @buffer_offset == @buffer.size f = @target_file f.pos = @target_offset bytes_written = f.write(@buffer) raise IOError if @buffer.size != bytes_written @target_offset += bytes_written end end