summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/efl/eina_hash.rb33
1 files changed, 10 insertions, 23 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?