class MMap

Constants

MAP_PRIVATE
MAP_SHARED
PROT_EXEC
PROT_READ
PROT_WRITE
Version

Attributes

size[RW]

Public Class Methods

new(file, size = nil, prot = PROT_READ | PROT_WRITE, map = MAP_SHARED) click to toggle source
# File lib/mmap_ffi.rb, line 20
def initialize(file, size = nil, prot = PROT_READ | PROT_WRITE, map = MAP_SHARED)
  @size = file.size
  @ptr = FFIMMap.mmap( FFI::Pointer.new(:void,0), @size, prot, map , file.fileno, 0 )
end

Public Instance Methods

[](range) click to toggle source
# File lib/mmap_ffi.rb, line 25
def [](range)
  raise "expected to index mmap reads with ranges, got #{range.class}" unless range.is_a? Range
  range = range.min..[range.max, @size-1].min
  return nil unless range.min # nil if min > max
  (@ptr+range.min).read_bytes(range.size)
end
[]=(key, value) click to toggle source
# File lib/mmap_ffi.rb, line 32
def []=(key, value)
  raise "expected to index mmap writes with ints, got #{key.class}" unless key.is_a? Integer
  return nil if(key >= @size)
  endoffset = [value.size, @size-1-key].min
  (@ptr+key).write_bytes( value[0..endoffset] )
end
raw_ptr() click to toggle source
# File lib/mmap_ffi.rb, line 39
def raw_ptr
  @ptr
end