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.
- 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
|