Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > dlライブラリ > DL::PtrDataクラス

class DL::PtrData

クラスの継承リスト: DL::PtrData < Object < Kernel

要約

メモリ領域を表すクラスです。C 言語のポインタに相当します。

目次

特異メソッド
malloc new
インスタンスメソッド
+ +@ ptr - -@ ref <=> == eql? [] []= data_type define_data_type free free= null? size size= struct! to_a to_i to_s to_str union!

特異メソッド

malloc(size, free = nil) -> DL::PtrData[permalink][rdoc]

[TODO]

サイズが size であるメモリ領域を確保し、それを指す DL::PtrData を返します。

[PARAM] size:
確保したいメモリ領域のサイズを指定します。
[PARAM] free:
返り値にセットされる free 関数を DL::Symbol で指定します。
new(addr, size = 0, free = nil) -> DL::PtrData[permalink][rdoc]

[TODO]

アドレス addr を指すポインタに相当する PtrData オブジェクトを返します。

size を指定した場合、アドレス addr に確保されているメモリ領域のサイズは size であるとします。 GC は free 関数を使用してメモリを解放します。

[PARAM] addr:
生成する PtrData オブジェクトが指すアドレスを整数で指定します。
[PARAM] size:
生成する PtrData オブジェクトが指すメモリ領域のサイズを整数で指定します。
[PARAM] free:
生成する PtrData オブジェクトの free 関数を DL::Symbol で指定します。

インスタンスメソッド

self + n -> DL::PtrData[permalink][rdoc]

自身のアドレスに n バイトを足した新しい PtrData オブジェクトを返します。

この返り値には、free 関数がセットされていません。

[PARAM] n:
アドレスの増分を整数で指定します。
ptr -> DL::PtrData[permalink][rdoc]
+ self -> DL::PtrData

自身の指す値を PtrData にして返します。 自身の指す値はポインタであると仮定します。 C 言語におけるポインタのポインタに対する間接参照 *p と同じです。

この返り値には、free 関数がセットされていません。

a = ['abc', 'def'].to_ptr
p a.ptr.to_s #=> "abc"
self - n -> DL::PtrData[permalink][rdoc]

自身のアドレスから n バイトを引いた新しい PtrData オブジェクトを返します。

この返り値には、free 関数がセットされていません。

[PARAM] n:
アドレスの差分を整数で指定します。
ref -> DL::PtrData[permalink][rdoc]
- self -> DL::PtrData

自身を指す PtrData オブジェクトを返します。 C 言語におけるポインタへのアドレス演算子の適用 &p と同じです。

この返り値には、free 関数がセットされていません。

s = "abc".to_ptr
p s == s.ref.ptr #=> true
self <=> other -> Integer[permalink][rdoc]

ポインタの指すアドレスの大小を比較します。

self == other -> bool[permalink][rdoc]
eql?(other) -> bool

ポインタの指すアドレスが同一かどうかを判定します。

self[key] -> object[permalink][rdoc]

[TODO]

構造体または共用体メンバ key の値を返します。返り値は DL::PtrData#struct! または DL::PtrData#union! によって定義された型により、Ruby のオブジェクトへ 変換されたものです。

[PARAM] key:
取得したい構造体か共用体のメンバの名前を、シンボルか文字列を指定します。
self[offset, len = 0] -> String[permalink][rdoc]

自身の指すアドレスに offset バイトを足したメモリ領域の先頭 len バイトを複製し、 文字列として返します。(self + offset).to_s(len) と同等です。 offset + len が自身のサイズより小さいかを検証しません。

[PARAM] offset:
値を得たい領域の先頭のアドレスまでのオフセットを整数で与えます。
[PARAM] len:
値を得たい領域のサイズを指定します。
self[key] = val[permalink][rdoc]

[TODO]

構造体または共用体メンバ key の値を val にします。

[PARAM] key:
構造体か共用体のメンバの名前を文字列かシンボルで指定します。
[PARAM] val:
自身のメンバにセットしたい値を指定します。
self[offset] = str[permalink][rdoc]

[TODO]

自身の指すアドレスに offset バイトを足したメモリ領域に 文字列 str をコピーします。コピー先の領域が str のサイズより大きいか検証しません。

[PARAM] offset:
書き換えたいメモリ領域のオフセットを整数で与えます。
[PARAM] str:
メモリ領域にセットしたいバイト列を文字列で指定します。
self[offset, len] = str[permalink][rdoc]

[TODO]

自身の指すアドレスに offset バイトを足したメモリ領域の先頭 len バイトに 文字列 str をコピーします。str のサイズが len より小さい場合は、残りの領域を 0 で埋めます。 コピー先の領域が len より大きいか検証しません。

[PARAM] offset:
書き換えたいメモリ領域のオフセットを整数で与えます。
[PARAM] len:
書き換えたいメモリ領域のサイズを整数で指定します。
[PARAM] str:
メモリ領域にセットしたいバイト列を文字列で指定します。
data_type -> [object][permalink][rdoc]

[TODO]

使ってはいけません。

define_data_type -> nil[permalink][rdoc]

[TODO]

使ってはいけません。

free -> DL::Symbol[permalink][rdoc]

[TODO]

GC がメモリを解放するのに使用するシンボルオブジェクト sym を返します。 sym は普通 PtrData#free= や PtrData.new によって設定されます。

free=(sym)[permalink][rdoc]

[TODO]

GC が自身を解放するのに使う関数を DL::Symbol で指定します。

[PARAM] sym:
自身を解放するのに使われる関数を DL::Symbol で指定します。
null? -> bool[permalink][rdoc]

自身が NULL なら true を返します。そうでないなら false を返します。

size -> Integer[permalink][rdoc]
size=(s)

[TODO]

自身の指す領域のサイズを返します。 s を指定した場合は、自身の指す領域のサイズは s であると設定します。 ただし、自身が指すメモリのサイズが s になるように再割り当てはしません。

[PARAM] s:
自身が指すメモリのサイズを指定します。
struct!(type, *members) -> nil[permalink][rdoc]

[TODO]

構造体のメンバにメソッド DL::PtrData#[] でアクセスできるようにします。 C 言語における構造体のポインタへのキャストと同じです。

ptr = DL.malloc(DL.sizeof('LL'))
ptr.struct!('LL', :tv_sec, :tv_usec)
ptr[:tv_sec] = 10
p ptr[:tv_sec] #=> 10
[PARAM] type:
構造体のメンバの型を文字列で指定します。型指定子は DL を参照して下さい。
[PARAM] members:
メンバの名前を文字列かシンボルで指定します。
to_a(type) -> [object][permalink][rdoc]
to_a(type, size) -> [object]

[TODO]

自身が指す領域から type で指定された型の配列を複製して返します。 type は 'S','P','I','L','D' そして 'F' のいずれかです。 size を指定した場合は、自身が指す領域からサイズが size である配列を 複製します。

size が自身のサイズより小さいかを検査しません。

type が定めされた型指定子でない場合、空の配列を返します。

[PARAM] type:
自身の要素の型を、長さが 1 の文字列で指定します。
[PARAM] size:
得たい配列のサイズを整数で指定します。
to_i -> Integer[permalink][rdoc]

自身が指すアドレスを整数で返します。

to_s -> String[permalink][rdoc]
to_s(len) -> String

自身が指す領域から長さ len の文字列を複製して返します。

len を省略した場合は、文字列の終りは '\0' であると仮定して、 strlen(3) を使って長さを算出します。

[PARAM] len:
文字列の長さを整数で指定します。
to_str[permalink][rdoc]

[TODO]

union!(type, *members) -> nil[permalink][rdoc]

[TODO]

共用体のメンバにメソッド DL::PtrData#[] でアクセスできるようにします。 C 言語における共用体のポインタへのキャストと同じです。

[PARAM] type:
共用体の型を文字列で指定します。型指定子は DL を参照して下さい。
[PARAM] members:
メンバの名前を文字列かシンボルで指定します。