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 |