Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > dlライブラリ > DL::CPtrクラス
クラスの継承リスト: DL::CPtr < Object < Kernel < BasicObject
メモリ領域を表すクラスです。C 言語のポインタに相当します。
self[val] -> DL::CPtr
[permalink][rdoc]to_ptr(val) -> DL::CPtr
与えられた val と関連した CPtr オブジェクトを生成して返します。
val が文字列の場合は文字列が格納されているメモリ領域を指す CPtr オブジェクトを返します。 IO オブジェクトの場合は FILE ポインタを表す CPtr オブジェクトを返します。 val に to_ptr メソッドが定義されている場合は、val.to_ptr を呼びます。 上以外の場合は、整数に変換しそれをアドレスとする CPtr オブジェクトを返します。
例:
require 'dl' s = "abc" p DL::CPtr[s].to_i #=> 136186388 p [s].pack('p*').unpack('l!*')[0] #=> 136186388
malloc(size, free = nil) -> DL::CPtr
[permalink][rdoc]与えられた長さ size のメモリ領域を確保し、それを表す CPtr オブジェクトを生成して返します。
new(addr, size = 0, free = nil) -> DL::CPtr
[permalink][rdoc]与えられた addr が指すメモリ領域を表す CPtr オブジェクトを生成して返します。
size を指定した場合、アドレス addr に確保されているメモリ領域のサイズは size であると仮定されます。GC は free 関数を使用してメモリを解放します。
self + n -> DL::CPtr
[permalink][rdoc]自身のアドレスに n バイトを足した新しい CPtr オブジェクトを返します。
この返り値には、free 関数がセットされていません。
例:
require 'dl' s = 'abc' cptr = DL::CPtr[s] p cptr[0,1] #=> "a" cptr += 1 p cptr[0,1] #=> "b"
ptr -> DL::CPtr
[permalink][rdoc]+ self -> DL::CPtr
自身の指す値を CPtr にして返します。 自身の指す値はポインタであると仮定します。 C 言語におけるポインタのポインタに対する間接参照 *p と同じです。
この返り値には、free 関数がセットされていません。
例:
require 'dl/import' s = 'abc' cptr = DL::CPtr[s] cref = cptr.ref p cref.to_s(4).unpack('l*')[0] #=> 136121648 p cptr.to_i #=> 136121648 p cref.ptr.to_s #=> "abc"
self - n -> DL::CPtr
[permalink][rdoc]自身のアドレスから n バイトを引いた新しい CPtr オブジェクトを返します。
この返り値には、free 関数がセットされていません。
例:
require 'dl' s = 'abc' cptr = DL::CPtr[s] cptr += 1 p cptr[0,1] #=> "b" cptr -= 1 p cptr[0,1] #=> "a"
ref -> DL::CPtr
[permalink][rdoc]- self -> DL::CPtr
自身を指す CPtr オブジェクトを返します。 C 言語におけるポインタへのアドレス演算子の適用 &p と同じです。
この返り値には、free 関数がセットされていません。
例:
require 'dl/import' s = 'abc' cptr = DL::CPtr[s] cref = cptr.ref p cref.to_s(4).unpack('l*')[0] #=> 136121648 p cptr.to_i #=> 136121648 p cref.ptr.to_s #=> "abc"
self <=> other -> Integer
[permalink][rdoc]ポインタの指すアドレスの大小を比較します。
eql?(other) -> bool
[permalink][rdoc]self == other -> bool
ポインタの指すアドレスが同一かどうかを判定します。
例:
require 'dl' s = 'abc' cptr = DL::CPtr[s] cptr0 = DL::CPtr[s] cptr1 = cptr + 1 p cptr == cptr1 #=> false p cptr == cptr0 #=> true
self[offset] -> Integer
[permalink][rdoc]自身の指すアドレスに offset バイトを足したメモリ領域の先頭を整数として返します。
例:
require 'dl' s = 'abc' cptr = DL::CPtr[s] p cptr[0] #=> 97 p cptr[1] #=> 98
self[offset, len] -> String
[permalink][rdoc]自身の指すアドレスに offset バイトを足したメモリ領域の先頭 len バイトを複製し、 文字列として返します。
(self + offset).to_s(len) と同等です。 offset + len が自身のサイズより小さいかを検証しません。
例:
require 'dl' s = 'abc' cptr = DL::CPtr[s] p cptr[0, 1] #=> "a" p cptr[1, 2] #=> "bc"
self[offset] = n
[permalink][rdoc]自身の指すアドレスに offset バイトを足したメモリ領域を指定された n に書き換えます。
例:
require 'dl' s = 'abc' cptr = DL::CPtr[s] cptr[0] = 65 p cptr.to_s #=> "Bbc"
self[offset, len] = v
[permalink][rdoc]自身の指すアドレスに offset バイトを足したメモリ領域の先頭 len バイトに 文字列 str をコピーします。
str のサイズが len より小さい場合は、残りの領域を 0 で埋めます。 コピー先の領域が len より大きいか検証しません。
例:
require 'dl' s = 'abc' cptr = DL::CPtr[s] p cptr[1,2] = "AA" p cptr.to_s #=> "aAA"
free -> DL::CFunc
[permalink][rdoc]GC がメモリを解放するのに使用する DL::CFunc オブジェクトを返します。
これは普通 DL::CPtr#free= や DL::CPtr.new によって設定されます。
free=(cfunc)
[permalink][rdoc]GC が自身を解放するのに使う関数を DL::CFunc で指定します。
null? -> bool
[permalink][rdoc]自身が NULL なら true を返します。そうでないなら false を返します。
size -> Integer
[permalink][rdoc]自身の指す領域のサイズを返します。
基本的には DL::CPtr.new で指定したサイズが返されます。 DL::CPtr.to_ptr で文字列を変換したときは、そのバイト数が返されます。 DL::CPtr#size= でこの値を変更することができます。
size=(s)
[permalink][rdoc]自身の指す領域のサイズを変えます。
変更してもメモリの再割り当てはしません。単にオブジェクトが記録している size の情報が変更されるだけです。
to_i -> Integer
[permalink][rdoc]to_int -> Integer
自身が指すアドレスを整数で返します。
to_s -> String
[permalink][rdoc]to_s(len) -> String
自身が指す領域から長さ len の文字列を複製して返します。
len を省略した場合は、文字列の終りは '\0' であると仮定して、 strlen(3) を使って長さを算出します。
to_str -> String
[permalink][rdoc]to_str(len) -> String
自身が指す領域から長さ len の文字列を複製して返します。
len を省略した場合は、self.size をその代わりに使います。
to_value -> object
[permalink][rdoc]自身はヒープに確保された Ruby のオブジェクトを指すポインタであると仮定して、 自身が指すオブジェクトを返します。
例:
require 'dl' s = 'abc' i = DL.dlwrap(s) cptr = DL::CPtr.new(i) p cptr.to_value #=> "abc"