Class: RbSDL2::RWObject
Defined Under Namespace
Classes: CloseCallback, ReadCallback, SeekCallback, SizeCallback, WriteCallback
Instance Method Summary collapse
- #__getobj__ ⇒ Object
-
#initialize(obj) ⇒ RWObject
constructor
obj 引数には Ruby の IO オブジェクトのように振る舞うオブジェクトを与える。 期待される振る舞いは close, read, seek, size, tell, write メソッド呼び出しに応答すること。 メソッドが無い場合やメソッドから例外が出た場合は SDL 側にエラー値を戻す。 autoclose 引数に true を与えた場合 close メソッドの呼び出し、GC の回収時に obj 引数に与えたオブジェクトを クローズする。 C のスコープへ渡す場合、ポインターが利用されている間 RWOps オブジェクトを生存させる必要がある。.
- #inspect ⇒ Object
Methods inherited from RWOps
#close, #closed?, open, #pos=, #read, #seek, #size, #tell, #to_ptr, #write
Constructor Details
#initialize(obj) ⇒ RWObject
obj 引数には Ruby の IO オブジェクトのように振る舞うオブジェクトを与える。 期待される振る舞いは close, read, seek, size, tell, write メソッド呼び出しに応答すること。 メソッドが無い場合やメソッドから例外が出た場合は SDL 側にエラー値を戻す。 autoclose 引数に true を与えた場合 close メソッドの呼び出し、GC の回収時に obj 引数に与えたオブジェクトを クローズする。 C のスコープへ渡す場合、ポインターが利用されている間 RWOps オブジェクトを生存させる必要がある。
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/rb_sdl2/rw_ops/rw_object.rb', line 92 def initialize(obj) ptr = ::SDL.AllocRW raise RbSDL2Error if ptr.null? super( begin # メンバーの関数ポインターが NULL であってはならない。 @st = ::SDL::RWops.new(ptr) # 引数に与えた proc 内で例外が出たときは SDL へ例外メッセージがセットされエラーを表す戻り値が渡される。 # デバッグモードの時は Ruby 側へ例外を出す。 # close_proc: 引数はなし。戻り値は無視される。RWops ポインタの開放を行う必要はない。 # read_proc: 引数に読み出すバイト数。戻り値は文字列。 # seek_proc: 引数に offset, whence。IO#seek を参照。戻り値は現在位置(IO#tell)。 # size_proc: 引数はなし。戻り値はバイト数。不明な場合は何らかの例外を出す。 # write_proc: 引数に書き込む文字列。戻り値は実際に書き込んだバイト数。 @st[:close] = @close_callback = CloseCallback.new {} # obj.close しない。autoclose=false @st[:read] = @read_callback = ReadCallback.new { |length| obj.read(length) } @st[:seek] = @seek_callback = SeekCallback.new { |offset, whence| obj.seek(offset, whence); obj.tell } @st[:size] = @size_callback = SizeCallback.new { obj.size } @st[:write] = @write_callback = WriteCallback.new { |str| obj.write(str) } RWOpsPointer.new(ptr) rescue => e ::SDL.FreeRW(ptr) raise e end ) @obj = obj end |
Instance Method Details
#__getobj__ ⇒ Object
120 |
# File 'lib/rb_sdl2/rw_ops/rw_object.rb', line 120 def __getobj__ = @obj |
#inspect ⇒ Object
122 123 124 |
# File 'lib/rb_sdl2/rw_ops/rw_object.rb', line 122 def inspect "#<#{self.class.name}:#{@obj.inspect}#{closed? ? " (closed)" : nil}>" end |