Class: ExternalSortModule::Chunk

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

Overview

Base class for chunking file access. Essentially a buffer that acts as a sliding window into a binary file.

Direct Known Subclasses

ChunkRandomAccess, ChunkReader, ChunkWriter

Instance Method Summary collapse

Constructor Details

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

Constructor

Parameters:

  • target_file

    file containing target area

  • target_offset

    offset to start of the target area for this chunk

  • target_length

    length of target area

  • element_size

    size of each element; target_length must be a multiple of this

Raises:

  • (ArgumentError)


24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/geotree/externalsort.rb', line 24

def initialize(target_file, target_offset, target_length, element_size, chunk_size = MAX_CHUNK_SIZE_)
  @target_file = target_file
  @target_offset = target_offset
  @target_length = target_length

  @target_end_offset = target_offset + target_length
  @element_size = element_size
  raise ArgumentError if target_length % element_size != 0

  set_chunk_size(chunk_size)

  @buffer = []
  @buffer_offset = 0
end

Instance Method Details

#doneObject



45
46
47
# File 'lib/geotree/externalsort.rb', line 45

def done
  @buffer_offset == @buffer.size && @target_offset == @target_end_offset
end

#set_chunk_size(n) ⇒ Object

Raises:

  • (ArgumentError)


39
40
41
42
43
# File 'lib/geotree/externalsort.rb', line 39

def set_chunk_size(n)
  n -= (n % @element_size)
  raise ArgumentError if n <= 0
  @max_chunk_size = [n,@target_length].min
end