gogyou 0.2.3 → 0.2.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.
- checksums.yaml +4 -4
- data/HISTORY.ja.md +57 -0
- data/LICENSE +1 -1
- data/README.md +129 -44
- data/Rakefile +4 -1
- data/gemstub.rb +2 -2
- data/lib/gogyou.rb +66 -40
- data/lib/gogyou/accessor.rb +80 -57
- data/lib/gogyou/bytearray.rb +856 -0
- data/lib/gogyou/extensions.rb +477 -0
- data/lib/gogyou/ffi.rb +52 -0
- data/lib/gogyou/fiddle.rb +53 -0
- data/lib/gogyou/primitives.rb +160 -52
- data/lib/gogyou/typespec.rb +1 -1
- data/lib/gogyou/version.rb +1 -1
- data/mkprims.rb +74 -38
- data/test/test_loadstore.rb +65 -0
- data/test/test_packbin.rb +65 -0
- metadata +21 -8
- data/lib/gogyou/mixin.rb +0 -640
data/lib/gogyou/ffi.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require "ffi"
|
2
|
+
require_relative "../gogyou"
|
3
|
+
|
4
|
+
module Gogyou
|
5
|
+
module Extensions
|
6
|
+
module FFI
|
7
|
+
module AbstractMemory
|
8
|
+
def to_address
|
9
|
+
to_i
|
10
|
+
end
|
11
|
+
|
12
|
+
alias to_ptr to_address
|
13
|
+
|
14
|
+
def bytesize
|
15
|
+
size
|
16
|
+
end
|
17
|
+
|
18
|
+
def setbinary(index, mem, offset = 0, size = mem.bytesize - offset)
|
19
|
+
offset = offset.to_i
|
20
|
+
size = size.to_i
|
21
|
+
size1 = mem.bytesize - offset
|
22
|
+
size = size1 if size > size1
|
23
|
+
|
24
|
+
if size > 0
|
25
|
+
put_bytes(index, mem.byteslice(offset, size))
|
26
|
+
end
|
27
|
+
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def byteslice(index, size)
|
32
|
+
get_bytes(index, size)
|
33
|
+
end
|
34
|
+
|
35
|
+
def setbyte(o, n)
|
36
|
+
set_uint8(o, n)
|
37
|
+
end
|
38
|
+
|
39
|
+
def getbyte(o)
|
40
|
+
get_uint8(o)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
module FFI
|
48
|
+
class AbstractMemory
|
49
|
+
include Gogyou::Extensions::FFI::AbstractMemory
|
50
|
+
include Gogyou::Extensions::ByteArray
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "fiddle"
|
2
|
+
require_relative "../gogyou"
|
3
|
+
|
4
|
+
module Gogyou
|
5
|
+
module Extensions
|
6
|
+
module Fiddle
|
7
|
+
module Pointer
|
8
|
+
def to_address
|
9
|
+
to_i
|
10
|
+
end
|
11
|
+
|
12
|
+
alias to_ptr to_address
|
13
|
+
|
14
|
+
def bytesize
|
15
|
+
size
|
16
|
+
end
|
17
|
+
|
18
|
+
def setbinary(index, mem, offset = 0, size = mem.bytesize - offset)
|
19
|
+
offset = offset.to_i
|
20
|
+
size = size.to_i
|
21
|
+
size1 = mem.bytesize - offset
|
22
|
+
size = size1 if size > size1
|
23
|
+
|
24
|
+
if size > 0
|
25
|
+
self[index, size] = mem.byteslice(offset, size)
|
26
|
+
end
|
27
|
+
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def byteslice(index, size)
|
32
|
+
return nil unless index < bytesize
|
33
|
+
self[index, size]
|
34
|
+
end
|
35
|
+
|
36
|
+
def setbyte(o, n)
|
37
|
+
self[o] = 0xff & n.to_i
|
38
|
+
end
|
39
|
+
|
40
|
+
def getbyte(o)
|
41
|
+
0xff & self[o]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module Fiddle
|
49
|
+
class Pointer
|
50
|
+
include Gogyou::Extensions::Fiddle::Pointer
|
51
|
+
include Gogyou::Extensions::ByteArray
|
52
|
+
end
|
53
|
+
end
|
data/lib/gogyou/primitives.rb
CHANGED
@@ -5,43 +5,43 @@
|
|
5
5
|
require_relative "typespec"
|
6
6
|
|
7
7
|
module Gogyou
|
8
|
-
|
9
|
-
|
10
|
-
BasicStruct = superclass
|
8
|
+
class Primitive < ::Struct.new(:name, :bytesize, :bytealign)
|
9
|
+
BasicStruct = superclass
|
11
10
|
|
12
|
-
|
11
|
+
undef :name=, :bytesize=, :bytealign=
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
def initialize(name, bytesize, bytealign, aset, aref)
|
14
|
+
super(name.intern, bytesize.to_i, bytealign.to_i)
|
15
|
+
define_singleton_method(:aset, aset)
|
16
|
+
define_singleton_method(:aref, aref)
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
def extensible?
|
20
|
+
false
|
21
|
+
end
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
def to_s
|
24
|
+
"\#<#{self.class}:#{name} bytesize=#{bytesize.inspect}, bytealign=#{bytealign.inspect}>"
|
25
|
+
end
|
27
26
|
|
28
|
-
|
27
|
+
alias inspect to_s
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
q.text ">"
|
29
|
+
def pretty_print(q)
|
30
|
+
#name, bytesize, bytealign
|
31
|
+
q.group(1, "\#<#{self.class}:#{name}") do
|
32
|
+
q.breakable " "
|
33
|
+
q.text "bytesize="
|
34
|
+
q.pp bytesize
|
35
|
+
q.text ","
|
36
|
+
q.breakable " "
|
37
|
+
q.text "bytealign="
|
38
|
+
q.pp bytealign
|
42
39
|
end
|
40
|
+
q.text ">"
|
43
41
|
end
|
42
|
+
end
|
44
43
|
|
44
|
+
module Primitives
|
45
45
|
SIZE_T = Primitive[:size_t, TypeSpec::SIZEOF_SIZE_T, TypeSpec::SIZEOF_SIZE_T,
|
46
46
|
->(buf, offset, num) { buf.store_sizet(offset, num) },
|
47
47
|
->(buf, offset) { buf.load_sizet(offset) }].freeze
|
@@ -162,36 +162,36 @@ module Gogyou
|
|
162
162
|
UCHAR = Primitive[:uchar, 1, 1,
|
163
163
|
->(buf, offset, num) { buf.store8(offset, num) },
|
164
164
|
->(buf, offset) { buf.loadu8(offset) }].freeze
|
165
|
-
SHORT = Primitive[:short,
|
166
|
-
->(buf, offset, num) { buf.
|
167
|
-
->(buf, offset) { buf.
|
168
|
-
USHORT = Primitive[:ushort,
|
169
|
-
->(buf, offset, num) { buf.
|
170
|
-
->(buf, offset) { buf.
|
171
|
-
INT = Primitive[:int,
|
172
|
-
->(buf, offset, num) { buf.
|
173
|
-
->(buf, offset) { buf.
|
174
|
-
UINT = Primitive[:uint,
|
175
|
-
->(buf, offset, num) { buf.
|
176
|
-
->(buf, offset) { buf.
|
165
|
+
SHORT = Primitive[:short, TypeSpec::SIZEOF_SHORT, TypeSpec::SIZEOF_SHORT,
|
166
|
+
->(buf, offset, num) { buf.store_short(offset, num) },
|
167
|
+
->(buf, offset) { buf.load_short(offset) }].freeze
|
168
|
+
USHORT = Primitive[:ushort, TypeSpec::SIZEOF_SHORT, TypeSpec::SIZEOF_SHORT,
|
169
|
+
->(buf, offset, num) { buf.store_short(offset, num) },
|
170
|
+
->(buf, offset) { buf.load_ushort(offset) }].freeze
|
171
|
+
INT = Primitive[:int, TypeSpec::SIZEOF_INT, TypeSpec::SIZEOF_INT,
|
172
|
+
->(buf, offset, num) { buf.store_int(offset, num) },
|
173
|
+
->(buf, offset) { buf.load_int(offset) }].freeze
|
174
|
+
UINT = Primitive[:uint, TypeSpec::SIZEOF_INT, TypeSpec::SIZEOF_INT,
|
175
|
+
->(buf, offset, num) { buf.store_int(offset, num) },
|
176
|
+
->(buf, offset) { buf.load_uint(offset) }].freeze
|
177
177
|
LONG = Primitive[:long, TypeSpec::SIZEOF_LONG, TypeSpec::SIZEOF_LONG,
|
178
178
|
->(buf, offset, num) { buf.store_long(offset, num) },
|
179
179
|
->(buf, offset) { buf.load_long(offset) }].freeze
|
180
180
|
ULONG = Primitive[:ulong, TypeSpec::SIZEOF_LONG, TypeSpec::SIZEOF_LONG,
|
181
181
|
->(buf, offset, num) { buf.store_long(offset, num) },
|
182
182
|
->(buf, offset) { buf.load_ulong(offset) }].freeze
|
183
|
-
LONGLONG = Primitive[:longlong,
|
184
|
-
->(buf, offset, num) { buf.
|
185
|
-
->(buf, offset) { buf.
|
186
|
-
ULONGLONG = Primitive[:ulonglong,
|
187
|
-
->(buf, offset, num) { buf.
|
188
|
-
->(buf, offset) { buf.
|
189
|
-
FLOAT = Primitive[:float,
|
190
|
-
->(buf, offset, num) { buf.
|
191
|
-
->(buf, offset) { buf.
|
192
|
-
DOUBLE = Primitive[:double,
|
193
|
-
->(buf, offset, num) { buf.
|
194
|
-
->(buf, offset) { buf.
|
183
|
+
LONGLONG = Primitive[:longlong, TypeSpec::SIZEOF_LONGLONG, TypeSpec::SIZEOF_LONGLONG,
|
184
|
+
->(buf, offset, num) { buf.store_longlong(offset, num) },
|
185
|
+
->(buf, offset) { buf.load_longlong(offset) }].freeze
|
186
|
+
ULONGLONG = Primitive[:ulonglong, TypeSpec::SIZEOF_LONGLONG, TypeSpec::SIZEOF_LONGLONG,
|
187
|
+
->(buf, offset, num) { buf.store_longlong(offset, num) },
|
188
|
+
->(buf, offset) { buf.load_ulonglong(offset) }].freeze
|
189
|
+
FLOAT = Primitive[:float, TypeSpec::SIZEOF_FLOAT, TypeSpec::SIZEOF_FLOAT,
|
190
|
+
->(buf, offset, num) { buf.store_float(offset, num) },
|
191
|
+
->(buf, offset) { buf.load_float(offset) }].freeze
|
192
|
+
DOUBLE = Primitive[:double, TypeSpec::SIZEOF_DOUBLE, TypeSpec::SIZEOF_DOUBLE,
|
193
|
+
->(buf, offset, num) { buf.store_double(offset, num) },
|
194
|
+
->(buf, offset) { buf.load_double(offset) }].freeze
|
195
195
|
FLOAT_BE = Primitive[:float_be, 4, 4,
|
196
196
|
->(buf, offset, num) { buf.storef32be(offset, num) },
|
197
197
|
->(buf, offset) { buf.loadf32be(offset) }].freeze
|
@@ -210,5 +210,113 @@ module Gogyou
|
|
210
210
|
DOUBLE_SWAP = Primitive[:double_swap, 8, 8,
|
211
211
|
->(buf, offset, num) { buf.storef64swap(offset, num) },
|
212
212
|
->(buf, offset) { buf.loadf64swap(offset) }].freeze
|
213
|
+
FLOAT16_T = Primitive[:float16_t, 2, 2,
|
214
|
+
->(buf, offset, num) { buf.storef16(offset, num) },
|
215
|
+
->(buf, offset) { buf.loadf16(offset) }].freeze
|
216
|
+
FLOAT16_SWAP = Primitive[:float16_swap, 2, 2,
|
217
|
+
->(buf, offset, num) { buf.storef16swap(offset, num) },
|
218
|
+
->(buf, offset) { buf.loadf16swap(offset) }].freeze
|
219
|
+
FLOAT16_BE = Primitive[:float16_be, 2, 2,
|
220
|
+
->(buf, offset, num) { buf.storef16be(offset, num) },
|
221
|
+
->(buf, offset) { buf.loadf16be(offset) }].freeze
|
222
|
+
FLOAT16_LE = Primitive[:float16_le, 2, 2,
|
223
|
+
->(buf, offset, num) { buf.storef16le(offset, num) },
|
224
|
+
->(buf, offset) { buf.loadf16le(offset) }].freeze
|
225
|
+
FLOAT32_T = Primitive[:float32_t, 4, 4,
|
226
|
+
->(buf, offset, num) { buf.storef32(offset, num) },
|
227
|
+
->(buf, offset) { buf.loadf32(offset) }].freeze
|
228
|
+
FLOAT32_SWAP = Primitive[:float32_swap, 4, 4,
|
229
|
+
->(buf, offset, num) { buf.storef32swap(offset, num) },
|
230
|
+
->(buf, offset) { buf.loadf32swap(offset) }].freeze
|
231
|
+
FLOAT32_BE = Primitive[:float32_be, 4, 4,
|
232
|
+
->(buf, offset, num) { buf.storef32be(offset, num) },
|
233
|
+
->(buf, offset) { buf.loadf32be(offset) }].freeze
|
234
|
+
FLOAT32_LE = Primitive[:float32_le, 4, 4,
|
235
|
+
->(buf, offset, num) { buf.storef32le(offset, num) },
|
236
|
+
->(buf, offset) { buf.loadf32le(offset) }].freeze
|
237
|
+
FLOAT64_T = Primitive[:float64_t, 8, 8,
|
238
|
+
->(buf, offset, num) { buf.storef64(offset, num) },
|
239
|
+
->(buf, offset) { buf.loadf64(offset) }].freeze
|
240
|
+
FLOAT64_SWAP = Primitive[:float64_swap, 8, 8,
|
241
|
+
->(buf, offset, num) { buf.storef64swap(offset, num) },
|
242
|
+
->(buf, offset) { buf.loadf64swap(offset) }].freeze
|
243
|
+
FLOAT64_BE = Primitive[:float64_be, 8, 8,
|
244
|
+
->(buf, offset, num) { buf.storef64be(offset, num) },
|
245
|
+
->(buf, offset) { buf.loadf64be(offset) }].freeze
|
246
|
+
FLOAT64_LE = Primitive[:float64_le, 8, 8,
|
247
|
+
->(buf, offset, num) { buf.storef64le(offset, num) },
|
248
|
+
->(buf, offset) { buf.loadf64le(offset) }].freeze
|
249
|
+
FIXED16Q8_T = Primitive[:fixed16q8_t, 2, 2,
|
250
|
+
->(buf, offset, num) { buf.store16q8(offset, num) },
|
251
|
+
->(buf, offset) { buf.loadi16q8(offset) }].freeze
|
252
|
+
FIXED16Q8_SWAP = Primitive[:fixed16q8_swap, 2, 2,
|
253
|
+
->(buf, offset, num) { buf.store16q8swap(offset, num) },
|
254
|
+
->(buf, offset) { buf.loadi16q8swap(offset) }].freeze
|
255
|
+
FIXED16Q8_BE = Primitive[:fixed16q8_be, 2, 2,
|
256
|
+
->(buf, offset, num) { buf.store16q8be(offset, num) },
|
257
|
+
->(buf, offset) { buf.loadi16q8be(offset) }].freeze
|
258
|
+
FIXED16Q8_LE = Primitive[:fixed16q8_le, 2, 2,
|
259
|
+
->(buf, offset, num) { buf.store16q8le(offset, num) },
|
260
|
+
->(buf, offset) { buf.loadi16q8le(offset) }].freeze
|
261
|
+
FIXED32Q6_T = Primitive[:fixed32q6_t, 4, 4,
|
262
|
+
->(buf, offset, num) { buf.store32q6(offset, num) },
|
263
|
+
->(buf, offset) { buf.loadi32q6(offset) }].freeze
|
264
|
+
FIXED32Q6_SWAP = Primitive[:fixed32q6_swap, 4, 4,
|
265
|
+
->(buf, offset, num) { buf.store32q6swap(offset, num) },
|
266
|
+
->(buf, offset) { buf.loadi32q6swap(offset) }].freeze
|
267
|
+
FIXED32Q6_BE = Primitive[:fixed32q6_be, 4, 4,
|
268
|
+
->(buf, offset, num) { buf.store32q6be(offset, num) },
|
269
|
+
->(buf, offset) { buf.loadi32q6be(offset) }].freeze
|
270
|
+
FIXED32Q6_LE = Primitive[:fixed32q6_le, 4, 4,
|
271
|
+
->(buf, offset, num) { buf.store32q6le(offset, num) },
|
272
|
+
->(buf, offset) { buf.loadi32q6le(offset) }].freeze
|
273
|
+
FIXED32Q8_T = Primitive[:fixed32q8_t, 4, 4,
|
274
|
+
->(buf, offset, num) { buf.store32q8(offset, num) },
|
275
|
+
->(buf, offset) { buf.loadi32q8(offset) }].freeze
|
276
|
+
FIXED32Q8_SWAP = Primitive[:fixed32q8_swap, 4, 4,
|
277
|
+
->(buf, offset, num) { buf.store32q8swap(offset, num) },
|
278
|
+
->(buf, offset) { buf.loadi32q8swap(offset) }].freeze
|
279
|
+
FIXED32Q8_BE = Primitive[:fixed32q8_be, 4, 4,
|
280
|
+
->(buf, offset, num) { buf.store32q8be(offset, num) },
|
281
|
+
->(buf, offset) { buf.loadi32q8be(offset) }].freeze
|
282
|
+
FIXED32Q8_LE = Primitive[:fixed32q8_le, 4, 4,
|
283
|
+
->(buf, offset, num) { buf.store32q8le(offset, num) },
|
284
|
+
->(buf, offset) { buf.loadi32q8le(offset) }].freeze
|
285
|
+
FIXED32Q12_T = Primitive[:fixed32q12_t, 4, 4,
|
286
|
+
->(buf, offset, num) { buf.store32q12(offset, num) },
|
287
|
+
->(buf, offset) { buf.loadi32q12(offset) }].freeze
|
288
|
+
FIXED32Q12_SWAP = Primitive[:fixed32q12_swap, 4, 4,
|
289
|
+
->(buf, offset, num) { buf.store32q12swap(offset, num) },
|
290
|
+
->(buf, offset) { buf.loadi32q12swap(offset) }].freeze
|
291
|
+
FIXED32Q12_BE = Primitive[:fixed32q12_be, 4, 4,
|
292
|
+
->(buf, offset, num) { buf.store32q12be(offset, num) },
|
293
|
+
->(buf, offset) { buf.loadi32q12be(offset) }].freeze
|
294
|
+
FIXED32Q12_LE = Primitive[:fixed32q12_le, 4, 4,
|
295
|
+
->(buf, offset, num) { buf.store32q12le(offset, num) },
|
296
|
+
->(buf, offset) { buf.loadi32q12le(offset) }].freeze
|
297
|
+
FIXED32Q16_T = Primitive[:fixed32q16_t, 4, 4,
|
298
|
+
->(buf, offset, num) { buf.store32q16(offset, num) },
|
299
|
+
->(buf, offset) { buf.loadi32q16(offset) }].freeze
|
300
|
+
FIXED32Q16_SWAP = Primitive[:fixed32q16_swap, 4, 4,
|
301
|
+
->(buf, offset, num) { buf.store32q16swap(offset, num) },
|
302
|
+
->(buf, offset) { buf.loadi32q16swap(offset) }].freeze
|
303
|
+
FIXED32Q16_BE = Primitive[:fixed32q16_be, 4, 4,
|
304
|
+
->(buf, offset, num) { buf.store32q16be(offset, num) },
|
305
|
+
->(buf, offset) { buf.loadi32q16be(offset) }].freeze
|
306
|
+
FIXED32Q16_LE = Primitive[:fixed32q16_le, 4, 4,
|
307
|
+
->(buf, offset, num) { buf.store32q16le(offset, num) },
|
308
|
+
->(buf, offset) { buf.loadi32q16le(offset) }].freeze
|
309
|
+
FIXED32Q24_T = Primitive[:fixed32q24_t, 4, 4,
|
310
|
+
->(buf, offset, num) { buf.store32q24(offset, num) },
|
311
|
+
->(buf, offset) { buf.loadi32q24(offset) }].freeze
|
312
|
+
FIXED32Q24_SWAP = Primitive[:fixed32q24_swap, 4, 4,
|
313
|
+
->(buf, offset, num) { buf.store32q24swap(offset, num) },
|
314
|
+
->(buf, offset) { buf.loadi32q24swap(offset) }].freeze
|
315
|
+
FIXED32Q24_BE = Primitive[:fixed32q24_be, 4, 4,
|
316
|
+
->(buf, offset, num) { buf.store32q24be(offset, num) },
|
317
|
+
->(buf, offset) { buf.loadi32q24be(offset) }].freeze
|
318
|
+
FIXED32Q24_LE = Primitive[:fixed32q24_le, 4, 4,
|
319
|
+
->(buf, offset, num) { buf.store32q24le(offset, num) },
|
320
|
+
->(buf, offset) { buf.loadi32q24le(offset) }].freeze
|
213
321
|
end
|
214
322
|
end
|
data/lib/gogyou/typespec.rb
CHANGED
@@ -4,7 +4,7 @@ module Gogyou
|
|
4
4
|
SIZEOF_SHORT = [0].pack("S!").bytesize
|
5
5
|
SIZEOF_INT = [0].pack("I!").bytesize
|
6
6
|
SIZEOF_LONG = [0].pack("L!").bytesize
|
7
|
-
SIZEOF_LONGLONG = [0].pack("Q
|
7
|
+
SIZEOF_LONGLONG = [0].pack("Q").bytesize
|
8
8
|
SIZEOF_SIZE_T = [nil].pack("P").bytesize
|
9
9
|
SIZEOF_FLOAT = [0].pack("F").bytesize
|
10
10
|
SIZEOF_DOUBLE = [0].pack("D").bytesize
|
data/lib/gogyou/version.rb
CHANGED
data/mkprims.rb
CHANGED
@@ -44,22 +44,58 @@ int64_swap 8 8 store64swap loadi64swap
|
|
44
44
|
uint64_swap 8 8 store64swap loadu64swap
|
45
45
|
char 1 1 store8 loadi8
|
46
46
|
uchar 1 1 store8 loadu8
|
47
|
-
short
|
48
|
-
ushort
|
49
|
-
int
|
50
|
-
uint
|
51
|
-
long
|
52
|
-
ulong
|
53
|
-
longlong
|
54
|
-
ulonglong
|
55
|
-
float
|
56
|
-
double
|
47
|
+
short TypeSpec::SIZEOF_SHORT TypeSpec::SIZEOF_SHORT store_short load_short
|
48
|
+
ushort TypeSpec::SIZEOF_SHORT TypeSpec::SIZEOF_SHORT store_short load_ushort
|
49
|
+
int TypeSpec::SIZEOF_INT TypeSpec::SIZEOF_INT store_int load_int
|
50
|
+
uint TypeSpec::SIZEOF_INT TypeSpec::SIZEOF_INT store_int load_uint
|
51
|
+
long TypeSpec::SIZEOF_LONG TypeSpec::SIZEOF_LONG store_long load_long
|
52
|
+
ulong TypeSpec::SIZEOF_LONG TypeSpec::SIZEOF_LONG store_long load_ulong
|
53
|
+
longlong TypeSpec::SIZEOF_LONGLONG TypeSpec::SIZEOF_LONGLONG store_longlong load_longlong
|
54
|
+
ulonglong TypeSpec::SIZEOF_LONGLONG TypeSpec::SIZEOF_LONGLONG store_longlong load_ulonglong
|
55
|
+
float TypeSpec::SIZEOF_FLOAT TypeSpec::SIZEOF_FLOAT store_float load_float
|
56
|
+
double TypeSpec::SIZEOF_DOUBLE TypeSpec::SIZEOF_DOUBLE store_double load_double
|
57
57
|
float_be 4 4 storef32be loadf32be
|
58
58
|
double_be 8 8 storef64be loadf64be
|
59
59
|
float_le 4 4 storef32le loadf32le
|
60
60
|
double_le 8 8 storef64le loadf64le
|
61
61
|
float_swap 4 4 storef32swap loadf32swap
|
62
62
|
double_swap 8 8 storef64swap loadf64swap
|
63
|
+
float16_t 2 2 storef16 loadf16
|
64
|
+
float16_swap 2 2 storef16swap loadf16swap
|
65
|
+
float16_be 2 2 storef16be loadf16be
|
66
|
+
float16_le 2 2 storef16le loadf16le
|
67
|
+
float32_t 4 4 storef32 loadf32
|
68
|
+
float32_swap 4 4 storef32swap loadf32swap
|
69
|
+
float32_be 4 4 storef32be loadf32be
|
70
|
+
float32_le 4 4 storef32le loadf32le
|
71
|
+
float64_t 8 8 storef64 loadf64
|
72
|
+
float64_swap 8 8 storef64swap loadf64swap
|
73
|
+
float64_be 8 8 storef64be loadf64be
|
74
|
+
float64_le 8 8 storef64le loadf64le
|
75
|
+
fixed16q8_t 2 2 store16q8 loadi16q8
|
76
|
+
fixed16q8_swap 2 2 store16q8swap loadi16q8swap
|
77
|
+
fixed16q8_be 2 2 store16q8be loadi16q8be
|
78
|
+
fixed16q8_le 2 2 store16q8le loadi16q8le
|
79
|
+
fixed32q6_t 4 4 store32q6 loadi32q6
|
80
|
+
fixed32q6_swap 4 4 store32q6swap loadi32q6swap
|
81
|
+
fixed32q6_be 4 4 store32q6be loadi32q6be
|
82
|
+
fixed32q6_le 4 4 store32q6le loadi32q6le
|
83
|
+
fixed32q8_t 4 4 store32q8 loadi32q8
|
84
|
+
fixed32q8_swap 4 4 store32q8swap loadi32q8swap
|
85
|
+
fixed32q8_be 4 4 store32q8be loadi32q8be
|
86
|
+
fixed32q8_le 4 4 store32q8le loadi32q8le
|
87
|
+
fixed32q12_t 4 4 store32q12 loadi32q12
|
88
|
+
fixed32q12_swap 4 4 store32q12swap loadi32q12swap
|
89
|
+
fixed32q12_be 4 4 store32q12be loadi32q12be
|
90
|
+
fixed32q12_le 4 4 store32q12le loadi32q12le
|
91
|
+
fixed32q16_t 4 4 store32q16 loadi32q16
|
92
|
+
fixed32q16_swap 4 4 store32q16swap loadi32q16swap
|
93
|
+
fixed32q16_be 4 4 store32q16be loadi32q16be
|
94
|
+
fixed32q16_le 4 4 store32q16le loadi32q16le
|
95
|
+
fixed32q24_t 4 4 store32q24 loadi32q24
|
96
|
+
fixed32q24_swap 4 4 store32q24swap loadi32q24swap
|
97
|
+
fixed32q24_be 4 4 store32q24be loadi32q24be
|
98
|
+
fixed32q24_le 4 4 store32q24le loadi32q24le
|
63
99
|
EOS
|
64
100
|
|
65
101
|
File.open(path, "wb") do |f|
|
@@ -71,43 +107,43 @@ File.open(path, "wb") do |f|
|
|
71
107
|
require_relative "typespec"
|
72
108
|
|
73
109
|
module Gogyou
|
74
|
-
|
75
|
-
|
76
|
-
BasicStruct = superclass
|
110
|
+
class Primitive < ::Struct.new(:name, :bytesize, :bytealign)
|
111
|
+
BasicStruct = superclass
|
77
112
|
|
78
|
-
|
113
|
+
undef :name=, :bytesize=, :bytealign=
|
79
114
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
115
|
+
def initialize(name, bytesize, bytealign, aset, aref)
|
116
|
+
super(name.intern, bytesize.to_i, bytealign.to_i)
|
117
|
+
define_singleton_method(:aset, aset)
|
118
|
+
define_singleton_method(:aref, aref)
|
119
|
+
end
|
85
120
|
|
86
|
-
|
87
|
-
|
88
|
-
|
121
|
+
def extensible?
|
122
|
+
false
|
123
|
+
end
|
89
124
|
|
90
|
-
|
91
|
-
|
92
|
-
|
125
|
+
def to_s
|
126
|
+
"\\\#<\#{self.class}:\#{name} bytesize=\#{bytesize.inspect}, bytealign=\#{bytealign.inspect}>"
|
127
|
+
end
|
93
128
|
|
94
|
-
|
129
|
+
alias inspect to_s
|
95
130
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
end
|
107
|
-
q.text ">"
|
131
|
+
def pretty_print(q)
|
132
|
+
#name, bytesize, bytealign
|
133
|
+
q.group(1, "\\\#<\#{self.class}:\#{name}") do
|
134
|
+
q.breakable " "
|
135
|
+
q.text "bytesize="
|
136
|
+
q.pp bytesize
|
137
|
+
q.text ","
|
138
|
+
q.breakable " "
|
139
|
+
q.text "bytealign="
|
140
|
+
q.pp bytealign
|
108
141
|
end
|
142
|
+
q.text ">"
|
109
143
|
end
|
144
|
+
end
|
110
145
|
|
146
|
+
module Primitives
|
111
147
|
EOS
|
112
148
|
|
113
149
|
records = records.split(/\n/)
|