ffi-efl 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/Changelog +12 -0
  2. data/Rakefile +1 -1
  3. data/lib/efl/ecore.rb +17 -6
  4. data/lib/efl/ecore_evas.rb +78 -24
  5. data/lib/efl/ecore_getopt.rb +27 -23
  6. data/lib/efl/ecore_input.rb +1 -1
  7. data/lib/efl/edje.rb +11 -11
  8. data/lib/efl/eet.rb +20 -14
  9. data/lib/efl/eina.rb +1 -1
  10. data/lib/efl/eina_hash.rb +17 -30
  11. data/lib/efl/eina_list.rb +16 -25
  12. data/lib/efl/elementary.rb +8 -19
  13. data/lib/efl/evas.rb +167 -38
  14. data/lib/efl/ffi.rb +28 -17
  15. data/lib/efl/{ffi → native}/ecore.rb +9 -5
  16. data/lib/efl/{ffi → native}/ecore_evas.rb +27 -20
  17. data/lib/efl/{ffi → native}/ecore_getopt.rb +9 -5
  18. data/lib/efl/{ffi → native}/ecore_input.rb +9 -5
  19. data/lib/efl/{ffi → native}/edje.rb +14 -10
  20. data/lib/efl/{ffi → native}/eet.rb +9 -5
  21. data/lib/efl/{ffi → native}/eina.rb +9 -5
  22. data/lib/efl/{ffi → native}/eina_hash.rb +9 -5
  23. data/lib/efl/{ffi → native}/eina_list.rb +9 -5
  24. data/lib/efl/{ffi → native}/eina_types.rb +9 -5
  25. data/lib/efl/{ffi → native}/elementary.rb +70 -66
  26. data/lib/efl/{ffi → native}/evas.rb +11 -7
  27. data/lib/efl/native.rb +16 -0
  28. data/lib/efl.rb +1 -1
  29. data/spec/ecore_evas_spec.rb +325 -6
  30. data/spec/ecore_getopt_spec.rb +70 -104
  31. data/spec/ecore_input_spec.rb +6 -6
  32. data/spec/ecore_spec.rb +63 -60
  33. data/spec/edje_spec.rb +6 -6
  34. data/spec/eet_spec.rb +23 -22
  35. data/spec/eina_hash_spec.rb +53 -58
  36. data/spec/eina_list_spec.rb +28 -18
  37. data/spec/eina_spec.rb +6 -6
  38. data/spec/evas_spec.rb +371 -119
  39. data/tasks/constants.rb +4 -0
  40. data/test/test_edje.rb +1 -1
  41. data/test/test_elm_win-native.rb +38 -0
  42. data/test/test_evas.rb +4 -4
  43. metadata +32 -20
  44. data/test/test_elm_win.rb +0 -35
data/Changelog CHANGED
@@ -1,3 +1,15 @@
1
+ 2011-05-XX Jérémy Zurcher <jeremy@asynk.ch>
2
+ * release 0.0.4
3
+ * ruby 1.8.7 compatible
4
+ * FFI::AutoPointer usage fixed, constructors cleaned
5
+ * module Efl::Native used for all FFI => require 'efl/native'
6
+ * ClassHelper#method_missing enhanced
7
+ * REinaList and REinaHash cleaned
8
+ * EcoreEvas specs completed
9
+ * REvas and REvasObject spec completed
10
+ * REvasRectanlge, REvasLine, EvasPolygon classes added
11
+ * more test/*.rb
12
+
1
13
  2011-05-01 Jérémy Zurcher <jeremy@asynk.ch>
2
14
  * release 0.0.3
3
15
  + Evas, Evas_Ecore, Edje, Elm ... usable
data/Rakefile CHANGED
@@ -44,7 +44,7 @@ PROJ.spec.opts << '--color'
44
44
  PROJ.rcov.opts << '-I lib'
45
45
  #
46
46
  # Dependencies
47
- depend_on 'rake', '>=0.8.7'
47
+ depend_on 'ffi', '>=1.0.7'
48
48
  #
49
49
  task :default => [:spec]
50
50
  #
data/lib/efl/ecore.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
  # -*- coding: UTF-8 -*-
3
3
  #
4
- require 'efl/ffi/ecore'
4
+ require 'efl/native/ecore'
5
5
  #
6
6
  module Efl
7
7
  module Ecore
@@ -17,13 +17,24 @@ module Efl
17
17
  #
18
18
  class REcorePipe
19
19
  def initialize cb, data
20
- @ptr = Efl::Ecore.ecore_pipe_add cb, data
20
+ @ptr = FFI::AutoPointer.new Native.ecore_pipe_add(cb, data), REcorePipe.method(:release)
21
+ end
22
+ def self.release p
23
+ Native.ecore_pipe_del p
24
+ end
25
+ def del
26
+ @ptr.autorelease=false
27
+ REcorePipe.release @ptr
28
+ @ptr=nil
29
+ end
30
+ def read_close
31
+ Native.ecore_pipe_read_close @ptr
32
+ end
33
+ def write_close
34
+ Native.ecore_pipe_write_close @ptr
21
35
  end
22
- def del; Efl::Ecore.ecore_pipe_del @ptr; end
23
- def read_close; Efl::Ecore.ecore_pipe_read_close @ptr; end
24
- def write_close; Efl::Ecore.ecore_pipe_write_close @ptr; end
25
36
  def write data
26
- Efl::Ecore.ecore_pipe_write @ptr, FFI::MemoryPointer.from_string(data.to_s), data.to_s.length+1
37
+ Native.ecore_pipe_write @ptr, FFI::MemoryPointer.from_string(data.to_s), data.to_s.length+1
27
38
  end
28
39
  #
29
40
  end
@@ -1,49 +1,102 @@
1
1
  #! /usr/bin/env ruby
2
2
  # -*- coding: UTF-8 -*-
3
3
  #
4
- require 'efl/ffi/ecore_evas'
4
+ require 'efl/native/ecore_evas'
5
5
  #
6
6
  module Efl
7
7
  #
8
8
  module EcoreEvas
9
+ #
10
+ def self.ecore_evas_list
11
+ EinaList::REinaList.new Native.ecore_evas_ecore_evas_list_get
12
+ end
13
+ def self.engines_list
14
+ EinaList::REinaList.new Native.ecore_evas_engines_get
15
+ end
9
16
  #
10
17
  class REcoreEvas
11
18
  include Efl::ClassHelper
12
- proxy_list [Efl::EcoreEvas,'ecore_evas_'].freeze
13
- def initialize o=nil, &block
19
+ search_prefixes 'ecore_evas_'
20
+ def initialize o=nil
14
21
  @ptr = (
15
22
  case o
16
23
  when NilClass
17
- FFI::AutoPointer.new Efl::EcoreEvas.ecore_evas_new(nil, 0, 0, 0, 0, nil), method(:free)
18
- when self.class
19
- o.to_ptr
20
- when FFI::AutoPointer
21
- o
24
+ FFI::AutoPointer.new Native.ecore_evas_new(nil, 0, 0, 0, 0, nil), REcoreEvas.method(:release)
25
+ when Hash
26
+ FFI::AutoPointer.new Native.ecore_evas_new(o[:engine_name], o[:x], o[:y], o[:w], o[:h], o[:extra_options]), REcoreEvas.method(:release)
22
27
  when FFI::Pointer
23
- FFI::AutoPointer.new o, method(:free)
28
+ o
24
29
  else
25
30
  raise ArgumentError.new "wrong argument #{o.class.name}"
26
31
  end
27
32
  )
28
33
  yield self if block_given?
29
34
  end
35
+ def self.release p
36
+ Native.ecore_evas_free p unless p.nil?
37
+ end
30
38
  def free p=nil
31
- return Efl::EcoreEvas.ecore_evas_free p unless p.nil?
32
- Efl::EcoreEvas.ecore_evas_free @ptr
33
- @ptr.free
39
+ @ptr.autorelease=false
40
+ REcoreEvas.release @ptr
34
41
  @ptr=nil
35
42
  end
36
- def get
43
+ def geometry_get
44
+ x = FFI::MemoryPointer.new :int
45
+ y = FFI::MemoryPointer.new :int
46
+ w = FFI::MemoryPointer.new :int
47
+ h = FFI::MemoryPointer.new :int
48
+ Native.ecore_evas_geometry_get @ptr, x, y, w, h
49
+ [ x.read_int, y.read_int, w.read_int, h.read_int ]
50
+ end
51
+ alias :geometry :geometry_get
52
+ def size
53
+ geometry_get[2..-1]
54
+ end
55
+ def size= wh
56
+ Native.evas_object_resize @ptr, *wh
57
+ end
58
+ def name_class_get
59
+ n = FFI::MemoryPointer.new :pointer
60
+ c = FFI::MemoryPointer.new :pointer
61
+ Native.ecore_evas_name_class_get @ptr, n, c
62
+ [ n.read_pointer.read_string, c.read_pointer.read_string ]
63
+ end
64
+ def size_min_get
65
+ w = FFI::MemoryPointer.new :int
66
+ h = FFI::MemoryPointer.new :int
67
+ Native.ecore_evas_size_min_get @ptr, w, h
68
+ [ w.read_int, h.read_int ]
69
+ end
70
+ def size_max_get
71
+ w = FFI::MemoryPointer.new :int
72
+ h = FFI::MemoryPointer.new :int
73
+ Native.ecore_evas_size_max_get @ptr, w, h
74
+ [ w.read_int, h.read_int ]
75
+ end
76
+ def size_base_get
77
+ w = FFI::MemoryPointer.new :int
78
+ h = FFI::MemoryPointer.new :int
79
+ Native.ecore_evas_size_base_get @ptr, w, h
80
+ [ w.read_int, h.read_int ]
81
+ end
82
+ def size_step_get
83
+ w = FFI::MemoryPointer.new :int
84
+ h = FFI::MemoryPointer.new :int
85
+ Native.ecore_evas_size_step_get @ptr, w, h
86
+ [ w.read_int, h.read_int ]
87
+ end
88
+ def evas
37
89
  # EAPI Evas *ecore_evas_get(const Ecore_Evas *ee);
38
- Efl::Evas::REvas.new Efl::EcoreEvas.ecore_evas_get @ptr
90
+ Evas::REvas.new Native.ecore_evas_get @ptr
39
91
  end
92
+ alias :get :evas
40
93
  def object_image_new
41
94
  # EAPI Evas_Object *ecore_evas_object_image_new(Ecore_Evas *ee_target);
42
- Efl::Evas::REvasObject.new Efl::EcoreEvas.ecore_evas_object_image_new @prt
95
+ Evas::REvasObject.new Native.ecore_evas_object_image_new @prt
43
96
  end
44
97
  def object_associate_get
45
98
  # EAPI Evas_Object *ecore_evas_object_associate_get(const Ecore_Evas *ee);
46
- Efl::Evas::REvasObject.new Efl::EcoreEvas.ecore_evas_object_associate_get @prt
99
+ Evas::REvasObject.new Native.ecore_evas_object_associate_get @prt
47
100
  end
48
101
  #
49
102
  end
@@ -55,23 +108,24 @@ module Efl
55
108
  class REvas
56
109
  def ecore_evas_get
57
110
  # EAPI Ecore_Evas *ecore_evas_ecore_evas_get(const Evas *e);
58
- Efl::EcoreEvas::REcoreEvas.new Efl::EcoreEvas.ecore_evas_ecore_evas_get @ptr
111
+ EcoreEvas::REcoreEvas.new Native.ecore_evas_ecore_evas_get @ptr
59
112
  end
60
113
  end
61
114
  #
62
115
  class REvasObject
63
116
  def ecore_evas_get
64
117
  # EAPI Ecore_Evas *ecore_evas_object_ecore_evas_get(Evas_Object *obj);
65
- Efl::EcoreEvas::REcoreEvas.new Efl::EcoreEvas.ecore_evas_object_ecore_evas_get @ptr
66
- end
67
- def evas_get
68
- # EAPI Evas *ecore_evas_object_evas_get(Evas_Object *obj);
69
- Efl::Evas::REvas.new Efl::EcoreEvas.ecore_evas_object_evas_get @ptr
118
+ EcoreEvas::REcoreEvas.new Native.ecore_evas_object_ecore_evas_get @ptr
70
119
  end
120
+ alias :ecore_evas :ecore_evas_get
121
+ # FIXME override REvas#evas_get => evas_object_evas_get
122
+ # def evas_get
123
+ # # EAPI Evas *ecore_evas_object_evas_get(Evas_Object *obj);
124
+ # Evas::REvas.new Efl::EcoreEvas.ecore_evas_object_evas_get @ptr
125
+ # end
126
+ # alias :evas :evas_get
71
127
  end
72
128
  end
73
- # TODO
74
- #EAPI unsigned char ecore_getopt_callback_ecore_evas_list_engines(const Ecore_Getopt *parser, const Ecore_Getopt_Desc *desc, const char *str, void *data, Ecore_Getopt_Value *storage);
75
129
  #
76
130
  end
77
131
  #
@@ -1,13 +1,13 @@
1
1
  #! /usr/bin/env ruby
2
2
  # -*- coding: UTF-8 -*-
3
3
  #
4
- require 'efl/ffi/ecore_getopt'
4
+ require 'efl/native/ecore_getopt'
5
5
  #
6
6
  module Efl
7
7
  #
8
- module EcoreGetopt
8
+ module Native
9
9
  #
10
- class Value < FFI::Union
10
+ class EcoreGetoptValue < FFI::Union
11
11
  layout :strp, :pointer,
12
12
  :boolp, :eina_bool_p,
13
13
  :shortp, :short_p,
@@ -18,10 +18,10 @@ module Efl
18
18
  :ulongp, :ulong_p,
19
19
  :doublep, :double_p,
20
20
  :listp, :eina_list_p,
21
- :ptrp, :void_p,
21
+ :ptrp, :void_p
22
22
  end
23
23
  #
24
- class DescStoreDef < FFI::Union
24
+ class EcoreGetoptDescStoreDef < FFI::Union
25
25
  layout :strv, :pointer,
26
26
  :boolv, :uchar,
27
27
  :shortv, :short,
@@ -30,40 +30,40 @@ module Efl
30
30
  :ushortv, :ushort,
31
31
  :uintv, :uint,
32
32
  :ulongv, :ulong,
33
- :doublev, :double,
33
+ :doublev, :double
34
34
  end
35
35
  #
36
- class DescStore < FFI::Struct
36
+ class EcoreGetoptDescStore < FFI::Struct
37
37
  layout :type, :ecore_getopt_type, # enum
38
38
  :arg_req, :ecore_getopt_desc_arg_requirement, # enum
39
- :def, DescStoreDef,
39
+ :def, EcoreGetoptDescStoreDef
40
40
  end
41
41
  #
42
42
  callback :ecore_getopt_desc_cb, [:ecore_getopt_p, :ecore_getopt_desc_p, :string, :pointer, :ecore_getopt_value_p ], :eina_bool
43
43
  #
44
- class DescCallback < FFI::Struct
44
+ class EcoreGetoptDescCallback < FFI::Struct
45
45
  layout :func, :ecore_getopt_desc_cb,
46
46
  :data, :pointer,
47
47
  :arg_req, :ecore_getopt_desc_arg_requirement, # enum
48
- :def, :pointer,
48
+ :def, :pointer
49
49
  end
50
50
  #
51
- class ActionParam < FFI::Union
52
- layout :store, DescStore,
51
+ class EcoreGetoptActionParam < FFI::Union
52
+ layout :store, EcoreGetoptDescStore,
53
53
  :store_const, :pointer,
54
54
  :choices, :pointer,
55
55
  :append_type, :ecore_getopt_type, # enum
56
- :callback, DescCallback,
57
- :dummy, :pointer,
56
+ :callback, EcoreGetoptDescCallback,
57
+ :dummy, :pointer
58
58
  end
59
59
  #
60
- class Desc < FFI::Struct
60
+ class EcoreGetoptDesc < FFI::Struct
61
61
  layout :shortname, :char,
62
62
  :longname, :pointer,
63
63
  :help, :pointer,
64
64
  :metavar, :pointer,
65
65
  :action, :ecore_getopt_action, # enum
66
- :action_param, ActionParam,
66
+ :action_param, EcoreGetoptActionParam
67
67
  end
68
68
  #
69
69
  class EcoreGetopt < FFI::Struct
@@ -74,12 +74,15 @@ module Efl
74
74
  :license, :pointer,
75
75
  :description, :pointer,
76
76
  :strict, :char
77
- # :descs, :pointer, # NULL terminated EcoreGetopt_Desc[]
77
+ # :descs, :pointer, # NULL terminated EcoreGetopt_Desc[]
78
78
 
79
79
  def desc_ptr idx
80
- Efl::EcoreGetopt::Desc.new to_ptr+Efl::EcoreGetopt::EcoreGetopt.size+(idx*Efl::EcoreGetopt::Desc.size)
80
+ Native::EcoreGetoptDesc.new to_ptr+Native::EcoreGetopt.size+(idx*Native::EcoreGetoptDesc.size)
81
81
  end
82
82
  end
83
+ end
84
+ #
85
+ module EcoreGetopt
83
86
  #
84
87
  class REcoreGetopt
85
88
  def initialize desc
@@ -99,6 +102,7 @@ module Efl
99
102
  @refs << p
100
103
  p
101
104
  end
105
+ private :p_from_string
102
106
  def << o
103
107
  @options.insert -2, o
104
108
  end
@@ -109,14 +113,14 @@ module Efl
109
113
  @ecore_getopt.to_ptr
110
114
  end
111
115
  def create
112
- @ecore_getopt = Efl::EcoreGetopt::EcoreGetopt.new FFI::MemoryPointer.new (Efl::EcoreGetopt::EcoreGetopt.size+Efl::EcoreGetopt::Desc.size*@options.length), 1
116
+ @ecore_getopt = Native::EcoreGetopt.new( FFI::MemoryPointer.new( :uchar, Native::EcoreGetopt.size+Native::EcoreGetoptDesc.size*@options.length) )
113
117
  [:prog,:usage,:version,:copyright,:license,:description].each do |sym|
114
118
  @ecore_getopt[sym] = ( @desc.has_key?(sym) ? FFI::MemoryPointer.from_string(@desc[sym]) : FFI::Pointer::NULL )
115
119
  end
116
120
  @ecore_getopt[:strict] = @desc[:strict] if @desc.has_key? :strict
117
121
  @options.each_with_index do |o,i|
118
122
  d = @ecore_getopt.desc_ptr i
119
- d[:shortname] = o[0].ord
123
+ d[:shortname] = o[0].to_s.bytes.first
120
124
  d[:longname] = p_from_string o[1]
121
125
  d[:help] = p_from_string o[2]
122
126
  d[:metavar] = o[3]
@@ -152,9 +156,9 @@ module Efl
152
156
  d[:action_param][:dummy] = FFI::Pointer::NULL
153
157
  end
154
158
  end
155
- @values_p = FFI::MemoryPointer.new Efl::EcoreGetopt::Value, @values.length, false
159
+ @values_p = FFI::MemoryPointer.new Native::EcoreGetoptValue, @values.length, false
156
160
  @values.each_with_index do |v,i|
157
- Efl::EcoreGetopt::Value.new(@values_p+(i*Efl::EcoreGetopt::Value.size))[v[0]] = v[1]
161
+ Native::EcoreGetoptValue.new(@values_p+(i*Native::EcoreGetoptValue.size))[v[0]] = v[1]
158
162
  end
159
163
  end
160
164
  def parse argv
@@ -163,7 +167,7 @@ module Efl
163
167
  ptr[i].put_pointer 0, p_from_string(s)
164
168
  end
165
169
  ptr[argv.length].put_pointer 0, FFI::Pointer::NULL
166
- Efl::EcoreGetopt.ecore_getopt_parse @ecore_getopt, @values_p, argv.length, ptr
170
+ Native.ecore_getopt_parse @ecore_getopt, @values_p, argv.length, ptr
167
171
  end
168
172
  def store_full short, long, help, meta, type, arg_req, def_val
169
173
  self << [ short, long, help, meta, :ecore_getopt_action_store, [:store, [type,arg_req, def_val] ] ]
@@ -1,7 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
  # -*- coding: UTF-8 -*-
3
3
  #
4
- require 'efl/ffi/ecore_input'
4
+ require 'efl/native/ecore_input'
5
5
  #
6
6
  module Efl
7
7
  #
data/lib/efl/edje.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # -*- coding: UTF-8 -*-
3
3
  #
4
4
  require 'efl/evas'
5
- require 'efl/ffi/edje'
5
+ require 'efl/native/edje'
6
6
  #
7
7
  module Efl
8
8
  #
@@ -10,34 +10,34 @@ module Efl
10
10
  #
11
11
  class REdje < Efl::Evas::REvasObject
12
12
  #
13
- proxy_list [Efl::Edje,'edje_object_'].freeze
13
+ search_prefixes 'edje_object_'
14
14
  def part_object_get part
15
15
  # EAPI const Evas_Object *edje_object_part_object_get (const Evas_Object *obj, const char *part);
16
- Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_object_get @ptr, part
16
+ Evas::RevasObject.new Native.edje_object_part_object_get @ptr, part
17
17
  end
18
18
  def part_swallow_get part
19
19
  # EAPI Evas_Object *edje_object_part_swallow_get (const Evas_Object *obj, const char *part);
20
- Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_swallow_get @ptr, part
20
+ Evas::RevasObject.new Native.edje_object_part_swallow_get @ptr, part
21
21
  end
22
22
  def external_object_get part
23
23
  # EAPI Evas_Object *edje_object_part_external_object_get (const Evas_Object *obj, const char *part);
24
- Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_external_object_get @ptr, part
24
+ Evas::RevasObject.new Native.edje_object_part_external_object_get @ptr, part
25
25
  end
26
26
  def external_content_get part, content
27
27
  # EAPI Evas_Object *edje_object_part_external_content_get (const Evas_Object *obj, const char *part, const char *content);
28
- Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_external_content_get @ptr, part, content
28
+ Evas::RevasObject.new Native.edje_object_part_external_content_get @ptr, part, content
29
29
  end
30
30
  def part_box_remove part, child
31
31
  # EAPI Evas_Object *edje_object_part_box_remove (Evas_Object *obj, const char *part, Evas_Object *child);
32
- Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_box_remove @ptr, part, child
32
+ Evas::RevasObject.new Native.edje_object_part_box_remove @ptr, part, child
33
33
  end
34
34
  def part_box_remove_at part, pos
35
35
  # EAPI Evas_Object *edje_object_part_box_remove_at (Evas_Object *obj, const char *part, unsigned int pos);
36
- Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_box_remove_at @ptr, part, pos
36
+ Evas::RevasObject.new Native.edje_object_part_box_remove_at @ptr, part, pos
37
37
  end
38
- def part_child_get part, col, row
38
+ def part_table_child_get part, col, row
39
39
  # EAPI Evas_Object *edje_object_part_table_child_get (Evas_Object *obj, const char *part, unsigned int col, unsigned int row);
40
- Efl::Evas::RevasObject.new Efl::Edje.edje_object_part_child_get @ptr, part, col, row
40
+ Evas::RevasObject.new Native.edje_object_part_table_child_get @ptr, part, col, row
41
41
  end
42
42
  end
43
43
  #
@@ -48,7 +48,7 @@ module Efl
48
48
  class REvas
49
49
  def edje_object_add
50
50
  # EAPI Evas_Object *edje_object_add (Evas *evas);
51
- Efl::Edje::REdje.new Efl::Edje.edje_object_add @ptr
51
+ Edje::REdje.new Native.edje_object_add @ptr
52
52
  end
53
53
  end
54
54
  #
data/lib/efl/eet.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
  # -*- coding: UTF-8 -*-
3
3
  #
4
- require 'efl/ffi/eet'
4
+ require 'efl/native/eet'
5
5
  #
6
6
  module Efl
7
7
  #
@@ -10,32 +10,38 @@ module Efl
10
10
  class REetFile
11
11
  #
12
12
  include Efl::ClassHelper
13
- proxy_list [Efl::Eet,'eet_'].freeze
13
+ search_prefixes 'eet_'
14
14
  #
15
15
  def initialize ptr
16
16
  @ptr=ptr
17
17
  end
18
18
  private :initialize
19
19
  #
20
- def self.open path, mode=:eet_file_mode_read, &blk
21
- if blk
22
- f = Efl::Eet.eet_open path, mode
23
- raise Exception.new "Unable to open file #{path}" if f.nil?
24
- yield REetFile.new f
25
- Efl::Eet.eet_close f
26
- else
27
- f = Efl::Eet.eet_open path, mode
28
- return REetFile.new f unless f.nil?
29
- end
20
+ def self.open path, mode=:eet_file_mode_read
21
+ p = Native.eet_open path, mode
22
+ raise Exception.new "Unable to open file #{path}" if p.nil?
23
+ o = REetFile.new FFI::AutoPointer.new p, REetFile.method(:release)
24
+ return o if not block_given?
25
+ yield o
26
+ o.close
27
+ nil
28
+ end
29
+ def self.release p
30
+ Native.eet_close f
31
+ end
32
+ def close
33
+ @ptr.autorelease=false
34
+ Native.eet_close @ptr
35
+ @ptr = nil
30
36
  end
31
37
  #
32
38
  def write key, data, compress=false
33
- Efl::Eet.eet_write @ptr, key, FFI::MemoryPointer.from_string(data), data.bytesize, ( compress ? 1 : 0 )
39
+ Native.eet_write @ptr, key, data, data.bytesize, ( compress ? 1 : 0 )
34
40
  end
35
41
  #
36
42
  def read key
37
43
  ptr = FFI::MemoryPointer.new(:int)
38
- data = Efl::Eet.eet_read @ptr, key, ptr
44
+ data = Native.eet_read @ptr, key, ptr
39
45
  s = ptr.read_int
40
46
  ptr.free
41
47
  return nil if s==0
data/lib/efl/eina.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
  # -*- coding: UTF-8 -*-
3
3
  #
4
- require 'efl/ffi/eina'
4
+ require 'efl/native/eina'
5
5
  #
6
6
  module Efl
7
7
  #
data/lib/efl/eina_hash.rb CHANGED
@@ -1,56 +1,43 @@
1
1
  #! /usr/bin/env ruby
2
2
  # -*- coding: UTF-8 -*-
3
3
  #
4
- require 'efl/ffi/eina_hash'
4
+ require 'efl/native/eina_hash'
5
5
  #
6
- class Hash
7
- def self.from_eina_hash o
8
- if o.is_a? Efl::EinaHash::REinaHash
9
- o.to_h
10
- elsif o.is_a? FFI::Pointer
11
- Efl::EinaHash::REinaHash.new(o).to_h
12
- else
13
- raise ArgumentError.new " wrong argument #{o.class.name}"
14
- end
15
- end
16
- end
17
6
  module Efl
18
7
  module EinaHash
19
8
  #
20
9
  class REinaHash
21
10
  include Enumerable
22
11
  include Efl::ClassHelper
23
- proxy_list [Efl::EinaHash,'eina_hash_'].freeze
12
+ search_prefixes 'eina_hash_'
24
13
  def initialize o=nil, &block
25
- cstr = ( block_given? ? block : Proc.new { Efl::EinaHash.eina_hash_string_djb2_new FFI::Pointer::NULL } )
14
+ cstr = ( block_given? ? block : Proc.new { Native.eina_hash_string_djb2_new FFI::Pointer::NULL } )
26
15
  @ptr = (
27
16
  case o
28
17
  when NilClass
29
- FFI::AutoPointer.new cstr.call, method(:free)
30
- when self.class
31
- o.to_ptr
32
- when FFI::AutoPointer
33
- o
18
+ FFI::AutoPointer.new cstr.call, REinaHash.method(:release)
34
19
  when FFI::Pointer
35
- FFI::AutoPointer.new ( o==FFI::Pointer::NULL ? cstr.call : o ), method(:free)
20
+ FFI::AutoPointer.new( (o==FFI::Pointer::NULL ? cstr.call : o), REinaHash.method(:release))
36
21
  when Hash
37
22
  ptr = cstr.call
38
- o.each do |k,v| Efl::EinaHash.eina_hash_add ptr, k, v end
39
- FFI::AutoPointer.new ptr, method(:free)
23
+ o.each do |k,v| Native.eina_hash_add ptr, k, v end
24
+ FFI::AutoPointer.new ptr, REinaHash.method(:release)
40
25
  else
41
26
  raise ArgumentError.new "wrong argument #{o.class.name}"
42
27
  end
43
28
  )
44
29
  end
45
- def free p=nil
46
- return Efl::EinaHash.eina_hash_free p unless p.nil?
47
- Efl::EinaHash.eina_hash_free @ptr
48
- @ptr.free
49
- @ptr = nil
30
+ def self.release p
31
+ Native.eina_hash_free p
32
+ end
33
+ def del
34
+ @ptr.autorelease=false
35
+ EinaHash.release @ptr
36
+ @ptr=nil
50
37
  end
51
38
  def each data=FFI::Pointer::NULL, &block
52
39
  return if not block_given?
53
- Efl::EinaHash::eina_hash_foreach @ptr, Proc.new{|h,k,v,d| block.call(k,v) }, data
40
+ Native.eina_hash_foreach @ptr, Proc.new{|h,k,v,d| block.call(k,v) }, data
54
41
  end
55
42
  def to_h
56
43
  rh = {}
@@ -68,12 +55,12 @@ module Efl
68
55
  end
69
56
  # for fun and tests
70
57
  def add k, v
71
- Efl::EinaHash.eina_hash_add @ptr, k, v
58
+ Native.eina_hash_add @ptr, k, v
72
59
  v
73
60
  end
74
61
  alias :[]= :add
75
62
  def find k
76
- r = Efl::EinaHash.eina_hash_find @ptr, k
63
+ r = Native.eina_hash_find @ptr, k
77
64
  return ( r==FFI::Pointer::NULL ? nil : r )
78
65
  end
79
66
  alias :[] :find