class DiskBlockFile
Block file that stores its contents to disk
Public Class Methods
new(block_size, path)
click to toggle source
Calls superclass method
BlockFile::new
# File lib/geotree/diskblockfile.rb, line 7 def initialize(block_size, path) @path = path super(block_size) end
Public Instance Methods
close_storage()
click to toggle source
# File lib/geotree/diskblockfile.rb, line 55 def close_storage flush @file = nil end
flush()
click to toggle source
# File lib/geotree/diskblockfile.rb, line 60 def flush @file.flush end
open_storage()
click to toggle source
# File lib/geotree/diskblockfile.rb, line 47 def open_storage existed = File.file?(@path) @file = File.open(@path, existed ? "r+b" : "w+b") raise IOError if !@file existed end
read(block_name, dest_buffer = nil)
click to toggle source
# File lib/geotree/diskblockfile.rb, line 12 def read(block_name, dest_buffer = nil) db = false dest_buffer ||= alloc_buffer offset = block_size * block_name @file.pos = offset @file.read(block_size,dest_buffer) raise IOError if (dest_buffer.size != block_size) !db || hex_dump(dest_buffer,"Disk.read #{block_name}") dest_buffer end
write(block_name, src_buffer)
click to toggle source
# File lib/geotree/diskblockfile.rb, line 29 def write(block_name, src_buffer) db = false !db || pr("Disk.write %d\n",block_name) !db || hex_dump(src_buffer) offset = block_size * block_name @file.pos = offset raise ArgumentError if src_buffer.size != block_size count = @file.write(src_buffer) if count != src_buffer.size raise IOError,"wrote #{count} bytes instead of #{src_buffer.size}" end end