fiddley 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/fiddley.rb +1 -1
- data/lib/fiddley/function.rb +5 -7
- data/lib/fiddley/library.rb +20 -8
- data/lib/fiddley/struct.rb +1 -1
- data/lib/fiddley/utils.rb +100 -20
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf2d272d2170487e17fb8f3c96e70076228361f6
|
4
|
+
data.tar.gz: c1a3515ec44871af8a51f0e482f1bcc0352903f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8679a00557727ed2d2590f82f7d85f9977c415f5001338d4463653f28d407b0270dbd24b6e51a20a42ee4139e2cfa7c8de197a4b371b519cabd49a1e1e88b270
|
7
|
+
data.tar.gz: 538b0728b44e29d737fbfb6a3f0d8ff0f572049853ed45a2a4cdd554eaec1ddc95528659b648dde7a8d65b5e6a4cee1d4e321631801b879cff6159b978067fb5
|
data/README.md
CHANGED
data/lib/fiddley.rb
CHANGED
data/lib/fiddley/function.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
require "fiddle
|
1
|
+
require "fiddle"
|
2
2
|
require "fiddley/utils"
|
3
3
|
|
4
4
|
module Fiddley
|
5
|
-
class Function
|
5
|
+
class Function < Fiddle::Closure::BlockCaller
|
6
|
+
include Fiddley::Utils
|
7
|
+
|
6
8
|
def initialize(ret, params, blk)
|
7
|
-
|
8
|
-
extend Fiddle::Importer
|
9
|
-
dlload Fiddley::Library::LIBC
|
10
|
-
@@func = bind("#{Fiddley::Utils.type2str(ret)} callback(#{params.map{|e| Fiddley::Utils.type2str(e)}.join(', ')})", &blk)
|
11
|
-
end
|
9
|
+
super(type2type(ret), params.map{|e| type2type(e)}, &blk)
|
12
10
|
end
|
13
11
|
end
|
14
12
|
end
|
data/lib/fiddley/library.rb
CHANGED
@@ -6,15 +6,27 @@ module Fiddley
|
|
6
6
|
include Fiddley::Utils
|
7
7
|
include Fiddle::Importer
|
8
8
|
|
9
|
-
def ffi_lib(
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
def ffi_lib(*args)
|
10
|
+
args.each do |soes|
|
11
|
+
soes = [soes] unless soes.is_a?(Array)
|
12
|
+
loaded = false
|
13
|
+
soes.each do |so|
|
14
|
+
begin
|
15
|
+
begin
|
16
|
+
dlload so
|
17
|
+
rescue Fiddle::DLError
|
18
|
+
begin
|
19
|
+
dlload LIBPREFIX + so
|
20
|
+
rescue Fiddle::DLError
|
21
|
+
dlload LIBPREFIX + so + "." + LIBSUFFIX
|
22
|
+
end
|
23
|
+
end
|
24
|
+
loaded = true
|
25
|
+
break
|
26
|
+
rescue Fiddle::DLError
|
27
|
+
end
|
17
28
|
end
|
29
|
+
raise Fiddle::DLError, "can't load #{soes.join(' or ')}" unless loaded
|
18
30
|
end
|
19
31
|
end
|
20
32
|
|
data/lib/fiddley/struct.rb
CHANGED
data/lib/fiddley/utils.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "fiddle"
|
2
|
+
|
1
3
|
module Fiddley
|
2
4
|
unless "".respond_to?(:unpack1)
|
3
5
|
module RefineStringUnpack1
|
@@ -13,27 +15,56 @@ module Fiddley
|
|
13
15
|
|
14
16
|
module Utils
|
15
17
|
# assumes short = 16bit, int = 32bit, long long = 64bit
|
16
|
-
|
17
|
-
|
18
|
-
SIZET_FORMAT = POINTER_SIZE == LONG_SIZE ? 'l!' : 'q'
|
19
|
-
SIZET_TYPE = POINTER_SIZE == LONG_SIZE ? 'unsigned long' : 'unsigned long long'
|
18
|
+
SIZET_FORMAT = Fiddle::SIZEOF_VOIDP == Fiddle::SIZEOF_LONG ? 'l!' : 'q'
|
19
|
+
SIZET_TYPE = Fiddle::SIZEOF_VOIDP == Fiddle::SIZEOF_LONG ? 'unsigned long' : 'unsigned long long'
|
20
20
|
|
21
21
|
module_function def type2size(type)
|
22
22
|
case type
|
23
23
|
when :char, :uchar, :int8, :uint8
|
24
|
-
|
24
|
+
Fiddle::SIZEOF_CHAR
|
25
|
+
when :short, :ushort, :int16, :uint16
|
26
|
+
Fiddle::SIZEOF_SHORT
|
27
|
+
when :int, :uint, :int32, :uint32, :bool
|
28
|
+
Fiddle::SIZEOF_INT
|
29
|
+
when :long, :ulong
|
30
|
+
Fiddle::SIZEOF_LONG
|
31
|
+
when :int64, :uint64, :long_long, :ulong_long
|
32
|
+
Fiddle::SIZEOF_LONG_LONG
|
33
|
+
when :float
|
34
|
+
Fiddle::SIZEOF_FLOAT
|
35
|
+
when :double
|
36
|
+
Fiddle::SIZEOF_DOUBLE
|
37
|
+
when :size_t
|
38
|
+
Fiddle::SIZEOF_SIZE_T
|
39
|
+
when :string, :pointer
|
40
|
+
Fiddle::SIZEOF_VOIDP
|
41
|
+
else
|
42
|
+
raise RuntimeError, "unknown type #{type}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
module_function def type2offset_size(type)
|
47
|
+
case type
|
48
|
+
when :char, :uchar, :int8, :uint8
|
49
|
+
Fiddle::ALIGN_CHAR
|
25
50
|
when :short, :ushort, :int16, :uint16
|
26
|
-
|
51
|
+
Fiddle::ALIGN_SHORT
|
27
52
|
when :int, :uint, :int32, :uint32, :bool
|
28
|
-
|
53
|
+
Fiddle::ALIGN_INT
|
29
54
|
when :long, :ulong
|
30
|
-
|
55
|
+
Fiddle::ALIGN_LONG
|
31
56
|
when :int64, :uint64, :long_long, :ulong_long
|
32
|
-
|
33
|
-
when :
|
34
|
-
|
57
|
+
Fiddle::ALIGN_LONG_LONG
|
58
|
+
when :float
|
59
|
+
Fiddle::ALIGN_FLOAT
|
60
|
+
when :double
|
61
|
+
Fiddle::ALIGN_DOUBLE
|
62
|
+
when :size_t
|
63
|
+
Fiddle::ALIGN_SIZE_T
|
64
|
+
when :string, :pointer
|
65
|
+
Fiddle::ALIGN_VOIDP
|
35
66
|
else
|
36
|
-
raise
|
67
|
+
raise RuntimeError, "unknown type #{type}"
|
37
68
|
end
|
38
69
|
end
|
39
70
|
|
@@ -65,12 +96,16 @@ module Fiddley
|
|
65
96
|
str.unpack1('q')
|
66
97
|
when :ulong_long, :uint64
|
67
98
|
str.unpack1('Q')
|
68
|
-
when :string, :pointer
|
69
|
-
str.unpack1('p')
|
70
99
|
when :size_t
|
71
100
|
str.unpack1(SIZET_FORMAT)
|
101
|
+
when :float
|
102
|
+
str.unpack1('f')
|
103
|
+
when :double
|
104
|
+
str.unpack1('d')
|
105
|
+
when :string, :pointer
|
106
|
+
str.unpack1('p')
|
72
107
|
else
|
73
|
-
raise
|
108
|
+
raise RuntimeError, "unknown type #{type}"
|
74
109
|
end
|
75
110
|
end
|
76
111
|
|
@@ -102,12 +137,16 @@ module Fiddley
|
|
102
137
|
[value].pack('q')
|
103
138
|
when :ulong_long, :uint64
|
104
139
|
[value].pack('Q')
|
105
|
-
when :string, :pointer
|
106
|
-
[value].pack('p')
|
107
140
|
when :size_t
|
108
141
|
[value].pack(SIZET_FORMAT)
|
142
|
+
when :float
|
143
|
+
[value].pack('f')
|
144
|
+
when :double
|
145
|
+
[value].pack('d')
|
146
|
+
when :string, :pointer
|
147
|
+
[value].pack('p')
|
109
148
|
else
|
110
|
-
raise
|
149
|
+
raise RuntimeError, "unknown type #{type}"
|
111
150
|
end
|
112
151
|
end
|
113
152
|
|
@@ -133,13 +172,54 @@ module Fiddley
|
|
133
172
|
"long long"
|
134
173
|
when :ulong_long, :uint64
|
135
174
|
"unsigned long long"
|
136
|
-
when :string, :pointer
|
137
|
-
"void *"
|
138
175
|
when :size_t
|
139
176
|
SIZET_TYPE
|
177
|
+
when :float
|
178
|
+
"float"
|
179
|
+
when :double
|
180
|
+
"double"
|
181
|
+
when :string, :pointer
|
182
|
+
"void *"
|
140
183
|
else
|
141
184
|
type.to_s
|
142
185
|
end
|
143
186
|
end
|
187
|
+
|
188
|
+
module_function def type2type(type)
|
189
|
+
case type
|
190
|
+
when :char, :int8
|
191
|
+
Fiddle::TYPE_CHAR
|
192
|
+
when :uchar, :uint8
|
193
|
+
-Fiddle::TYPE_CHAR
|
194
|
+
when :short, :int16
|
195
|
+
Fiddle::TYPE_SHORT
|
196
|
+
when :ushort, :uint16
|
197
|
+
-Fiddle::TYPE_SHORT
|
198
|
+
when :int, :int32
|
199
|
+
Fiddle::TYPE_INT
|
200
|
+
when :uint, :uint32
|
201
|
+
-Fiddle::TYPE_INT
|
202
|
+
when :long
|
203
|
+
Fiddle::TYPE_LONG
|
204
|
+
when :ulong
|
205
|
+
-Fiddle::TYPE_LONG
|
206
|
+
when :long_long, :int64
|
207
|
+
Fiddle::TYPE_LONG_LONG
|
208
|
+
when :ulong_long, :uint64
|
209
|
+
-Fiddle::TYPE_LONG_LONG
|
210
|
+
when :float
|
211
|
+
Fiddle::TYPE_FLOAT
|
212
|
+
when :double
|
213
|
+
Fiddle::TYPE_DOUBLE
|
214
|
+
when :size_t
|
215
|
+
Fiddle::TYPE_SIZE_T
|
216
|
+
when :string, :pointer
|
217
|
+
Fiddle::TYPE_VOIDP
|
218
|
+
when :void
|
219
|
+
Fiddle::TYPE_VOID
|
220
|
+
else
|
221
|
+
raise RuntimeError, "unknown type #{type}"
|
222
|
+
end
|
223
|
+
end
|
144
224
|
end
|
145
225
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fiddley
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- U.Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Use Fiddle instead of Ruby-FFI !!!
|
14
14
|
email:
|