ffi-efl 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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