Class: ExternalSortModule::ChunkReader

Inherits:
Chunk
  • Object
show all
Defined in:
lib/geotree/externalsort.rb

Overview

Chunk subclass that performs streaming reading of target with sliding window

Instance Method Summary collapse

Methods inherited from Chunk

#done, #set_chunk_size

Constructor Details

#initialize(target_file, target_offset, target_length, element_size, chunk_size = MAX_CHUNK_SIZE_) ⇒ ChunkReader

Returns a new instance of ChunkReader.



98
99
100
# File 'lib/geotree/externalsort.rb', line 98

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

Instance Method Details

#peekarray, offset

Get next element

Returns:

  • (array, offset)

    containing element, or nil if chunk is done



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/geotree/externalsort.rb', line 112

def peek
  nil if done

  # If no more elements exist in the buffer, fill it from the target
  if @buffer_offset == @buffer.size
    max_size = @max_chunk_size

    chunk_size = [@target_end_offset - @target_offset, max_size].min

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

    @target_offset += chunk_size
    @buffer_offset = 0
  end
  [@buffer, @buffer_offset]
end

#peek_dumpObject

Display record being viewed using hex dump



103
104
105
106
107
108
# File 'lib/geotree/externalsort.rb', line 103

def peek_dump
  "(done)" if done

  buff, off = peek
  "Next element: "+hex_dump_to_string(buff,nil,off,@element_size)
end

#readarray, offset

Read next element, advance pointers

Returns:

  • (array, offset)

    containing element

Raises:

  • IllegalStateException if already done



135
136
137
138
139
140
# File 'lib/geotree/externalsort.rb', line 135

def read
  ret = peek
  raise IllegalStateException if !ret
  @buffer_offset += @element_size
  ret
end