Class: NativeMallocBuffer

Inherits:
Object
  • Object
show all
Includes:
NativeBuffer
Defined in:
lib/oinky/nbuffer.rb,
lib/oinky/nbuffer.rb

Overview

This is a specific implementation of NativeBuffer. It uses malloc/free.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from NativeBuffer

#<=>, #clone, #each_byte, #each_char, #inspect, #rb_str

Constructor Details

#initialize(v = 0) ⇒ NativeMallocBuffer

Returns a new instance of NativeMallocBuffer.



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/oinky/nbuffer.rb', line 120

def initialize(v = 0)
  if (v.is_a? Fixnum)
    @ptr = FFI::MemoryPointer.new :pointer
    size = v
    if size > 0 
      @ptr = LibC.malloc(size)
      @length = size
    else
      @ptr = nil
      @length = 0
    end
  elsif v.is_a? String
    size = v.length
    @ptr = LibC.malloc(size)
    LibC.memcpy(@ptr, v, size)
    @length = size
  elsif v.is_a? NativeBuffer
    size = v.length
    @ptr = LibC.malloc(size)
    LibC.memcpy(@ptr, v.ptr, size)
    @length = size
  else
    raise OinkyException.new("Invalid initialize parameter to NativeMallocBuffer.new") 
  end

  ObjectSpace.define_finalizer( self, self.class.finalize(@ptr) )
end

Instance Attribute Details

#lengthObject (readonly)

Returns the value of attribute length.



118
119
120
# File 'lib/oinky/nbuffer.rb', line 118

def length
  @length
end

#ptrObject (readonly)

Returns the value of attribute ptr.



118
119
120
# File 'lib/oinky/nbuffer.rb', line 118

def ptr
  @ptr
end

Class Method Details

.finalize(ptr) ⇒ Object



148
149
150
# File 'lib/oinky/nbuffer.rb', line 148

def self.finalize(ptr)
  proc { LibC.free(ptr) }
end