diff options
-rw-r--r-- | lib/efl/eina_hash.rb | 33 | ||||
-rw-r--r-- | spec/eina_hash_spec.rb | 16 |
2 files changed, 15 insertions, 34 deletions
diff --git a/lib/efl/eina_hash.rb b/lib/efl/eina_hash.rb index 9aa8808..59d99e2 100644 --- a/lib/efl/eina_hash.rb +++ b/lib/efl/eina_hash.rb @@ -3,17 +3,6 @@ # require 'efl/ffi/eina_hash' # -class Hash - def self.from_eina_hash o - if o.is_a? Efl::EinaHash::REinaHash - o.to_h - elsif o.is_a? FFI::Pointer - Efl::EinaHash::REinaHash.new(o).to_h - else - raise ArgumentError.new " wrong argument #{o.class.name}" - end - end -end module Efl module EinaHash # @@ -26,27 +15,25 @@ module Efl @ptr = ( case o when NilClass - FFI::AutoPointer.new cstr.call, method(:free) - when self.class - o.to_ptr - when FFI::AutoPointer - o + FFI::AutoPointer.new cstr.call, REinaHash.method(:release) when FFI::Pointer - FFI::AutoPointer.new ( o==FFI::Pointer::NULL ? cstr.call : o ), method(:free) + FFI::AutoPointer.new ( o==FFI::Pointer::NULL ? cstr.call : o ), REinaHash.method(:release) when Hash ptr = cstr.call o.each do |k,v| Efl::EinaHash.eina_hash_add ptr, k, v end - FFI::AutoPointer.new ptr, method(:free) + FFI::AutoPointer.new ptr, REinaHash.method(:release) else raise ArgumentError.new "wrong argument #{o.class.name}" end ) end - def free p=nil - return Efl::EinaHash.eina_hash_free p unless p.nil? - Efl::EinaHash.eina_hash_free @ptr - @ptr.free - @ptr = nil + def self.release p + Efl::EinaHash.eina_hash_free p + end + def del + @ptr.autorelease=false + EinaHash.release @ptr + @ptr=nil end def each data=FFI::Pointer::NULL, &block return if not block_given? diff --git a/spec/eina_hash_spec.rb b/spec/eina_hash_spec.rb index 0376b08..4d1526c 100644 --- a/spec/eina_hash_spec.rb +++ b/spec/eina_hash_spec.rb @@ -37,19 +37,13 @@ describe Efl::EinaHash do end # it "should be able to convert into ruby Hash from NULL pointer" do - h = Hash.from_eina_hash FFI::Pointer::NULL + h = REinaHash.new(FFI::Pointer::NULL).to_h h.empty?.should be_true h.is_a?(Hash).should be_true end # it "should be able to convert into ruby Hash from empty REinaHash" do - h = Hash.from_eina_hash REinaHash.new - h.empty?.should be_true - h.is_a?(Hash).should be_true - end - # - it "should be able to convert into ruby Hash from empty REinaHash pointer" do - h = Hash.from_eina_hash REinaHash.new.to_ptr + h = REinaHash.new(FFI::Pointer::NULL).to_h h.empty?.should be_true h.is_a?(Hash).should be_true end @@ -75,7 +69,7 @@ describe Efl::EinaHash do true } cpt.should == 4 - rh = Hash.from_eina_hash h + rh = h.to_h rh.length.should == 4 rh2 = {} rh.each { |k,v| @@ -102,7 +96,7 @@ describe Efl::EinaHash do h['k1'].read_string.should == "D1" h['k2'].read_string.should == "D2" h['k3'].read_string.should == "D3" - rh = Hash.from_eina_hash h.to_ptr + rh = h.to_h rh.length.should == 4 end # @@ -152,7 +146,7 @@ describe Efl::EinaHash do rh['k3'].read_string.should == "D3" end # - it "should be able to build from ruby Hash" do + it "should be able to build REinaHash from ruby Hash" do rh = {} k0 = FFI::MemoryPointer.from_string "0" k1 = FFI::MemoryPointer.from_string "1" |