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.
- data/Changelog +12 -0
- data/Rakefile +1 -1
- data/lib/efl/ecore.rb +17 -6
- data/lib/efl/ecore_evas.rb +78 -24
- data/lib/efl/ecore_getopt.rb +27 -23
- data/lib/efl/ecore_input.rb +1 -1
- data/lib/efl/edje.rb +11 -11
- data/lib/efl/eet.rb +20 -14
- data/lib/efl/eina.rb +1 -1
- data/lib/efl/eina_hash.rb +17 -30
- data/lib/efl/eina_list.rb +16 -25
- data/lib/efl/elementary.rb +8 -19
- data/lib/efl/evas.rb +167 -38
- data/lib/efl/ffi.rb +28 -17
- data/lib/efl/{ffi → native}/ecore.rb +9 -5
- data/lib/efl/{ffi → native}/ecore_evas.rb +27 -20
- data/lib/efl/{ffi → native}/ecore_getopt.rb +9 -5
- data/lib/efl/{ffi → native}/ecore_input.rb +9 -5
- data/lib/efl/{ffi → native}/edje.rb +14 -10
- data/lib/efl/{ffi → native}/eet.rb +9 -5
- data/lib/efl/{ffi → native}/eina.rb +9 -5
- data/lib/efl/{ffi → native}/eina_hash.rb +9 -5
- data/lib/efl/{ffi → native}/eina_list.rb +9 -5
- data/lib/efl/{ffi → native}/eina_types.rb +9 -5
- data/lib/efl/{ffi → native}/elementary.rb +70 -66
- data/lib/efl/{ffi → native}/evas.rb +11 -7
- data/lib/efl/native.rb +16 -0
- data/lib/efl.rb +1 -1
- data/spec/ecore_evas_spec.rb +325 -6
- data/spec/ecore_getopt_spec.rb +70 -104
- data/spec/ecore_input_spec.rb +6 -6
- data/spec/ecore_spec.rb +63 -60
- data/spec/edje_spec.rb +6 -6
- data/spec/eet_spec.rb +23 -22
- data/spec/eina_hash_spec.rb +53 -58
- data/spec/eina_list_spec.rb +28 -18
- data/spec/eina_spec.rb +6 -6
- data/spec/evas_spec.rb +371 -119
- data/tasks/constants.rb +4 -0
- data/test/test_edje.rb +1 -1
- data/test/test_elm_win-native.rb +38 -0
- data/test/test_evas.rb +4 -4
- metadata +32 -20
- 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
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/
|
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 =
|
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
|
-
|
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
|
data/lib/efl/ecore_evas.rb
CHANGED
@@ -1,49 +1,102 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
# -*- coding: UTF-8 -*-
|
3
3
|
#
|
4
|
-
require 'efl/
|
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
|
-
|
13
|
-
def initialize o=nil
|
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
|
18
|
-
when
|
19
|
-
o.
|
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
|
-
|
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
|
-
|
32
|
-
|
33
|
-
@ptr.free
|
39
|
+
@ptr.autorelease=false
|
40
|
+
REcoreEvas.release @ptr
|
34
41
|
@ptr=nil
|
35
42
|
end
|
36
|
-
def
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
#
|
data/lib/efl/ecore_getopt.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
# -*- coding: UTF-8 -*-
|
3
3
|
#
|
4
|
-
require 'efl/
|
4
|
+
require 'efl/native/ecore_getopt'
|
5
5
|
#
|
6
6
|
module Efl
|
7
7
|
#
|
8
|
-
module
|
8
|
+
module Native
|
9
9
|
#
|
10
|
-
class
|
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
|
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
|
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,
|
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
|
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
|
52
|
-
layout :store,
|
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,
|
57
|
-
:dummy, :pointer
|
56
|
+
:callback, EcoreGetoptDescCallback,
|
57
|
+
:dummy, :pointer
|
58
58
|
end
|
59
59
|
#
|
60
|
-
class
|
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,
|
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
|
-
#
|
77
|
+
# :descs, :pointer, # NULL terminated EcoreGetopt_Desc[]
|
78
78
|
|
79
79
|
def desc_ptr idx
|
80
|
-
|
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 =
|
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].
|
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
|
159
|
+
@values_p = FFI::MemoryPointer.new Native::EcoreGetoptValue, @values.length, false
|
156
160
|
@values.each_with_index do |v,i|
|
157
|
-
|
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
|
-
|
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] ] ]
|
data/lib/efl/ecore_input.rb
CHANGED
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/
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
36
|
+
Evas::RevasObject.new Native.edje_object_part_box_remove_at @ptr, part, pos
|
37
37
|
end
|
38
|
-
def
|
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
|
-
|
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
|
-
|
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/
|
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
|
-
|
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
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
-
|
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 =
|
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
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/
|
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
|
-
|
12
|
+
search_prefixes 'eina_hash_'
|
24
13
|
def initialize o=nil, &block
|
25
|
-
cstr = ( block_given? ? block : Proc.new {
|
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(:
|
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 (
|
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|
|
39
|
-
FFI::AutoPointer.new ptr, method(:
|
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
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
@ptr
|
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
|
-
|
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
|
-
|
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 =
|
63
|
+
r = Native.eina_hash_find @ptr, k
|
77
64
|
return ( r==FFI::Pointer::NULL ? nil : r )
|
78
65
|
end
|
79
66
|
alias :[] :find
|