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.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#vim: set fileencoding:utf-8
|
2
2
|
|
3
3
|
# gogyou.rb
|
4
|
-
# - AUTHOR: dearblue <dearblue@users.
|
5
|
-
# - WEBSIZE:
|
4
|
+
# - AUTHOR: dearblue <dearblue@users.osdn.me>
|
5
|
+
# - WEBSIZE: https://osdn.jp/projects/rutsubo/
|
6
6
|
# - LICENSE: same as 2-clause BSD License
|
7
7
|
|
8
8
|
#--
|
@@ -24,42 +24,61 @@
|
|
24
24
|
#
|
25
25
|
# 原始的な型情報は Gogyou::Primitives で定義してあり、struct や union メソッド内で利用できる型を次の表に示します:
|
26
26
|
#
|
27
|
-
# ====
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
27
|
+
# ==== 型名
|
28
|
+
#
|
29
|
+
# * C の型名
|
30
|
+
# 符号あり 符号なし
|
31
|
+
# ---- ----
|
32
|
+
# char 型 char uchar
|
33
|
+
# unsigned_char
|
34
|
+
# short 型 short ushort
|
35
|
+
# unsigned_short
|
36
|
+
# int 型 int uint
|
37
|
+
# unsigned_int
|
38
|
+
# long 型 long ulong
|
39
|
+
# unsigned_long
|
40
|
+
# long long 型 longlong ulonglong
|
41
|
+
# long_long unsigned_long_long
|
42
|
+
# sizeof 型 ssize_t size_t
|
43
|
+
# ポインタ整数型 intptr_t uintptr_t
|
44
|
+
# float float N/A
|
45
|
+
# double double N/A
|
46
|
+
#
|
47
|
+
# * バイトオーダー環境依存・ビット数環境非依存
|
48
|
+
# バイトオーダー環境依存 バイトオーダー反転
|
49
|
+
# 符号あり 符号なし 符号あり 符号なし
|
50
|
+
# ---- ---- ---- ----
|
51
|
+
# 8ビット整数型 int8_t uint8_t N/A N/A
|
52
|
+
# 16ビット整数型 int16_t uint16_t int16_swap uint16_swap
|
53
|
+
# 32ビット整数型 int32_t uint32_t int32_swap uint32_swap
|
54
|
+
# 64ビット整数型 int64_t uint64_t int64_swap uint64_swap
|
55
|
+
# 16ビット浮動小数点実数型 float16_t N/A float16_swap N/A
|
56
|
+
# 32ビット浮動小数点実数型 float32_t N/A float32_swap N/A
|
57
|
+
# 64ビット浮動小数点実数型 float64_t N/A float64_swap N/A
|
58
|
+
#
|
59
|
+
# * バイトオーダー・ビット数環境非依存
|
60
|
+
# ビッグエンディアン リトルエンディアン
|
61
|
+
# 符号あり 符号なし 符号あり 符号なし
|
62
|
+
# ---- ---- ---- ----
|
63
|
+
# 16ビット整数型 int16_be uint16_be int16_le uint16_le
|
64
|
+
# 24ビット整数型 int24_be uint24_be int24_le uint24_le
|
65
|
+
# 32ビット整数型 int32_be uint32_be int32_le uint32_le
|
66
|
+
# 48ビット整数型 int48_be uint48_be int48_le uint48_le
|
67
|
+
# 64ビット整数型 int64_be uint64_be int64_le uint64_le
|
68
|
+
# 16ビット浮動小数点実数型 float16_be N/A float16_le N/A
|
69
|
+
# 32ビット浮動小数点実数型 float32_be N/A float32_le N/A
|
70
|
+
# 64ビット浮動小数点実数型 float64_be N/A float64_le N/A
|
71
|
+
#
|
72
|
+
# * 固定小数点実数型 (ビット数環境非依存)
|
73
|
+
#
|
74
|
+
# バイトオーダー環境依存 バイトオーダー環境非依存
|
75
|
+
#
|
76
|
+
# 16ビット固定小数点実数型(小数部8ビット) fixed16q8_t fixed16q8_swap fixed16q8_be fixed16q8_le
|
77
|
+
# 32ビット固定小数点実数型(小数部6ビット) fixed32q6_t fixed32q6_swap fixed32q6_be fixed32q6_le
|
78
|
+
# 32ビット固定小数点実数型(小数部8ビット) fixed32q8_t fixed32q8_swap fixed32q8_be fixed32q8_le
|
79
|
+
# 32ビット固定小数点実数型(小数部12ビット) fixed32q12_t fixed32q12_swap fixed32q12_be fixed32q12_le
|
80
|
+
# 32ビット固定小数点実数型(小数部16ビット) fixed32q16_t fixed32q16_swap fixed32q16_be fixed32q16_le
|
81
|
+
# 32ビット固定小数点実数型(小数部24ビット) fixed32q24_t fixed32q24_swap fixed32q24_be fixed32q24_le
|
63
82
|
#
|
64
83
|
#
|
65
84
|
# ==== 利用者定義の型情報
|
@@ -134,12 +153,19 @@
|
|
134
153
|
# * #\<field> / #\<field>= - 構造体・共用体のフィールドへの参照・代入メソッド。配列の場合は定義されない。
|
135
154
|
# * #[] / []= - 配列の要素への参照・代入メソッド。構造体・共用体の場合は定義されない。
|
136
155
|
#
|
156
|
+
# * 構造体のメモリイメージとなるバッファオブジェクト
|
157
|
+
#
|
158
|
+
# 構造体のバイト列を表現するオブジェクトのことです。
|
159
|
+
#
|
160
|
+
# * String
|
161
|
+
# * Fiddle::Pointer
|
162
|
+
#
|
137
163
|
module Gogyou
|
138
164
|
Gogyou = self
|
139
165
|
|
140
166
|
require_relative "gogyou/version"
|
141
167
|
require_relative "gogyou/typespec"
|
142
|
-
require_relative "gogyou/
|
168
|
+
require_relative "gogyou/extensions"
|
143
169
|
require_relative "gogyou/model"
|
144
170
|
require_relative "gogyou/primitives"
|
145
171
|
require_relative "gogyou/accessor"
|
@@ -149,7 +175,7 @@ module Gogyou
|
|
149
175
|
|
150
176
|
Gogyou::Primitives.constants.each do |n|
|
151
177
|
prim = Gogyou::Primitives.const_get(n)
|
152
|
-
next unless prim.kind_of?(Gogyou::
|
178
|
+
next unless prim.kind_of?(Gogyou::Primitive)
|
153
179
|
TYPEMAP[prim.name.to_sym] = prim
|
154
180
|
end
|
155
181
|
|
data/lib/gogyou/accessor.rb
CHANGED
@@ -50,10 +50,12 @@ module Gogyou
|
|
50
50
|
@buffer__GOGYOU__
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
54
|
-
@buffer__GOGYOU__.
|
53
|
+
def to_address
|
54
|
+
@buffer__GOGYOU__.to_address + @offset__GOGYOU__
|
55
55
|
end
|
56
56
|
|
57
|
+
alias to_ptr to_address
|
58
|
+
|
57
59
|
#
|
58
60
|
# call-seq:
|
59
61
|
# slide() -> new_accessor or nil
|
@@ -182,7 +184,8 @@ module Gogyou
|
|
182
184
|
define_method(:size__GOGYOU__, -> { fieldsize })
|
183
185
|
alias_method(:elementsize, :size__GOGYOU__)
|
184
186
|
alias_method(:size, :size__GOGYOU__)
|
185
|
-
|
187
|
+
const_set(:GOGYOU_FIELD_TYPES, types = [])
|
188
|
+
model.fields.each_with_index do |field, ifield|
|
186
189
|
name = field.name
|
187
190
|
name = name.intern
|
188
191
|
raise NameError, "already exist field name - #{name}" if namecheck[name]
|
@@ -190,24 +193,26 @@ module Gogyou
|
|
190
193
|
|
191
194
|
if field.vector
|
192
195
|
subarray = define_subarray(field)
|
193
|
-
|
196
|
+
types << subarray
|
194
197
|
else
|
195
198
|
subarray = nil
|
196
|
-
|
199
|
+
types << field.type
|
197
200
|
end
|
198
201
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
202
|
+
class_eval <<-EOS, __FILE__, __LINE__ + 1
|
203
|
+
def #{field.name}
|
204
|
+
v = GOGYOU_FIELD_TYPES[#{ifield}].aref(@buffer__GOGYOU__, @offset__GOGYOU__ + #{field.offset})
|
205
|
+
v.taint if !v.frozen? && (tainted? || @buffer__GOGYOU__.tainted?)
|
206
|
+
v.freeze if #{field.const?} || frozen? || @buffer__GOGYOU__.frozen?
|
207
|
+
v
|
208
|
+
end
|
209
|
+
|
210
|
+
def #{field.name}=(value)
|
211
|
+
raise TypeError, "immutable object (#<%s:0x%08X>)" % [self.class, __id__], caller(1) if frozen?
|
212
|
+
raise TypeError, "immutable field (#<%s:0x%08X>.%s)" % [self.class, __id__, #{field.name.inspect}], caller(1) if #{field.const?}
|
213
|
+
GOGYOU_FIELD_TYPES[#{ifield}].aset(@buffer__GOGYOU__, @offset__GOGYOU__ + #{field.offset}, value)
|
214
|
+
end
|
215
|
+
EOS
|
211
216
|
end
|
212
217
|
end
|
213
218
|
end
|
@@ -270,6 +275,8 @@ module Gogyou
|
|
270
275
|
end
|
271
276
|
|
272
277
|
class Array < BasicArray
|
278
|
+
include Enumerable
|
279
|
+
|
273
280
|
def self.elements
|
274
281
|
self::ELEMENTS
|
275
282
|
end
|
@@ -300,32 +307,34 @@ module Gogyou
|
|
300
307
|
bytesize = type.bytesize
|
301
308
|
|
302
309
|
if model.bytesize == 0
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
310
|
+
class_eval <<-EOS, __FILE__, __LINE__ + 1
|
311
|
+
def check_index(index)
|
312
|
+
index = index.to_i
|
313
|
+
unless index >= 0 && index < elementsize
|
314
|
+
raise IndexError, "out of element size (index \#{index} for 0 ... \#{elementsize})", caller
|
315
|
+
end
|
316
|
+
index
|
317
|
+
end
|
318
|
+
|
319
|
+
def <<(value)
|
320
|
+
raise TypeError, "immutable object (#<%s:0x%08X>)" % [self.class, __id__], caller if frozen?
|
321
|
+
voff = (@buffer__GOGYOU__.bytesize - @offset__GOGYOU__).align_floor(SUBTYPE.bytesize)
|
322
|
+
expandsize = @offset__GOGYOU__ + voff + SUBTYPE.bytesize
|
323
|
+
@buffer__GOGYOU__.resize(expandsize)
|
324
|
+
SUBTYPE.aset(@buffer__GOGYOU__, @offset__GOGYOU__ + voff, value)
|
325
|
+
self
|
326
|
+
end
|
327
|
+
|
328
|
+
def elementsize
|
329
|
+
(@buffer__GOGYOU__.bytesize - @offset__GOGYOU__).unit_floor(SUBTYPE.bytesize)
|
307
330
|
end
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
@buffer__GOGYOU__.resize(expandsize)
|
316
|
-
type.aset(@buffer__GOGYOU__, @offset__GOGYOU__ + voff, value)
|
317
|
-
self
|
318
|
-
})
|
319
|
-
|
320
|
-
define_method(:elementsize, -> {
|
321
|
-
(@buffer__GOGYOU__.bytesize - @offset__GOGYOU__).unit_floor(type.bytesize)
|
322
|
-
})
|
323
|
-
|
324
|
-
alias_method(:size, :elementsize)
|
325
|
-
|
326
|
-
define_method(:bytesize, -> {
|
327
|
-
(@buffer__GOGYOU__.bytesize - @offset__GOGYOU__).align_floor(type.bytesize)
|
328
|
-
})
|
331
|
+
|
332
|
+
alias size elementsize
|
333
|
+
|
334
|
+
def bytesize
|
335
|
+
(@buffer__GOGYOU__.bytesize - @offset__GOGYOU__).align_floor(SUBTYPE.bytesize)
|
336
|
+
end
|
337
|
+
EOS
|
329
338
|
else
|
330
339
|
eval <<-EOS
|
331
340
|
def check_index(index)
|
@@ -348,21 +357,23 @@ module Gogyou
|
|
348
357
|
EOS
|
349
358
|
end
|
350
359
|
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
360
|
+
class_eval <<-EOS, __FILE__, __LINE__ + 1
|
361
|
+
def to_s
|
362
|
+
@buffer__GOGYOU__.byteslice(@offset__GOGYOU__, bytesize)
|
363
|
+
end
|
364
|
+
|
365
|
+
def [](index)
|
366
|
+
v = SUBTYPE.aref(@buffer__GOGYOU__, @offset__GOGYOU__ + check_index(index) * #{bytesize})
|
367
|
+
v.infect_from(self, @buffer__GOGYOU__) unless v.frozen?
|
368
|
+
v.freeze if #{field.const?} || frozen? || @buffer__GOGYOU__.frozen?
|
369
|
+
v
|
370
|
+
end
|
371
|
+
|
372
|
+
def []=(index, value)
|
373
|
+
raise TypeError, "immutable object (#<%s:0x%08X>)" % [self.class, __id__, index], caller if #{field.const?} || frozen?
|
374
|
+
SUBTYPE.aset(@buffer__GOGYOU__, @offset__GOGYOU__ + check_index(index) * #{bytesize}, value)
|
375
|
+
end
|
376
|
+
EOS
|
366
377
|
end
|
367
378
|
klass
|
368
379
|
end
|
@@ -388,6 +399,18 @@ module Gogyou
|
|
388
399
|
self.class::BYTESIZE * @buffer__GOGYOU__.bytesize.unit_floor(self.class::SUBTYPE)
|
389
400
|
end
|
390
401
|
|
402
|
+
def each
|
403
|
+
return to_enum unless block_given?
|
404
|
+
elementsize.times { |i| yield self[i] }
|
405
|
+
self
|
406
|
+
end
|
407
|
+
|
408
|
+
def each_with_index
|
409
|
+
return to_enum(:each_with_index) unless block_given?
|
410
|
+
elementsize.times { |i| yield self[i], i }
|
411
|
+
self
|
412
|
+
end
|
413
|
+
|
391
414
|
def inspect
|
392
415
|
text = "["
|
393
416
|
elementsize.times.with_index do |n, i|
|
@@ -0,0 +1,856 @@
|
|
1
|
+
module Gogyou
|
2
|
+
module Extensions
|
3
|
+
#
|
4
|
+
# .bytesize・.byteslice・.setbinary・.getbyte・.setbyte メソッドを用いて
|
5
|
+
# 整数値・実数値を埋め込む・取り出すメソッドを定義します。
|
6
|
+
#
|
7
|
+
# gogyou は ruby の String や Fiddle::Pointer、FFI::AbstractPointer
|
8
|
+
# クラスにこのモジュールを include しています。
|
9
|
+
#
|
10
|
+
module ByteArray
|
11
|
+
def swapbyte(index, bytesize)
|
12
|
+
i = index.to_i
|
13
|
+
j = i + bytesize.to_i - 1
|
14
|
+
while i < j
|
15
|
+
w = getbyte(i)
|
16
|
+
setbyte(i, getbyte(j))
|
17
|
+
setbyte(j, w)
|
18
|
+
i += 1
|
19
|
+
j -= 1
|
20
|
+
end
|
21
|
+
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
def storebe(index, num, bytesize)
|
26
|
+
raise RangeError unless index >= 0 &&
|
27
|
+
index < bytesize &&
|
28
|
+
index + bytesize <= bytesize() &&
|
29
|
+
index + bytesize >= 0
|
30
|
+
while bytesize > 0
|
31
|
+
bytesize -= 1
|
32
|
+
setbyte(index, 0xff & (num >> (bytesize * BITS_PER_BYTE)))
|
33
|
+
index += 1
|
34
|
+
end
|
35
|
+
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def storele(index, num, bytesize)
|
40
|
+
raise RangeError unless index >= 0 &&
|
41
|
+
index < bytesize() &&
|
42
|
+
index + bytesize <= bytesize() &&
|
43
|
+
index + bytesize >= 0
|
44
|
+
while bytesize > 0
|
45
|
+
bytesize -= 1
|
46
|
+
setbyte(index, 0xff & num)
|
47
|
+
num >>= BITS_PER_BYTE
|
48
|
+
index += 1
|
49
|
+
end
|
50
|
+
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
def loadube(index, bytesize)
|
55
|
+
n = 0
|
56
|
+
while bytesize > 0
|
57
|
+
bytesize -= 1
|
58
|
+
n <<= BITS_PER_BYTE
|
59
|
+
n |= getbyte(index)
|
60
|
+
index += 1
|
61
|
+
end
|
62
|
+
n
|
63
|
+
end
|
64
|
+
|
65
|
+
def loadibe(index, bytesize)
|
66
|
+
loadube(index, bytesize).extendsign(bytesize * BITS_PER_BYTE)
|
67
|
+
end
|
68
|
+
|
69
|
+
def loadule(index, bytesize)
|
70
|
+
n = 0
|
71
|
+
c = 0
|
72
|
+
while bytesize > 0
|
73
|
+
bytesize -= 1
|
74
|
+
n |= getbyte(index) << (BITS_PER_BYTE * c)
|
75
|
+
index += 1
|
76
|
+
c += 1
|
77
|
+
end
|
78
|
+
n
|
79
|
+
end
|
80
|
+
|
81
|
+
def loadile(index, bytesize)
|
82
|
+
loadule(index, bytesize).extendsign(bytesize * BITS_PER_BYTE)
|
83
|
+
end
|
84
|
+
|
85
|
+
def store8(index, num)
|
86
|
+
setbyte(index.to_i, 0xff & num.to_i)
|
87
|
+
end
|
88
|
+
|
89
|
+
def loadu8(index)
|
90
|
+
getbyte(index)
|
91
|
+
end
|
92
|
+
|
93
|
+
def loadi8(index)
|
94
|
+
getbyte(index).extendsign_char
|
95
|
+
end
|
96
|
+
|
97
|
+
def store16(index, num)
|
98
|
+
setbinary(index, [num].pack("S"))
|
99
|
+
end
|
100
|
+
|
101
|
+
def loadi16(index)
|
102
|
+
byteslice(index, 2).unpack("s")[0]
|
103
|
+
end
|
104
|
+
|
105
|
+
def loadu16(index)
|
106
|
+
byteslice(index, 2).unpack("S")[0]
|
107
|
+
end
|
108
|
+
|
109
|
+
def store16swap(index, num)
|
110
|
+
setbinary(index, [num.swap16].pack("S"))
|
111
|
+
end
|
112
|
+
|
113
|
+
def loadi16swap(index)
|
114
|
+
byteslice(index, 2).unpack("s")[0].swap16s
|
115
|
+
end
|
116
|
+
|
117
|
+
def loadu16swap(index)
|
118
|
+
byteslice(index, 2).unpack("S")[0].swap16
|
119
|
+
end
|
120
|
+
|
121
|
+
def store16be(index, num)
|
122
|
+
index = index.to_i
|
123
|
+
num = 0xffff & num.to_i
|
124
|
+
setbyte(index , num >> 8)
|
125
|
+
setbyte(index + 1, num )
|
126
|
+
end
|
127
|
+
|
128
|
+
def loadu16be(index)
|
129
|
+
(getbyte(index) << 8) |
|
130
|
+
(getbyte(index + 1))
|
131
|
+
end
|
132
|
+
|
133
|
+
def loadi16be(index)
|
134
|
+
(getbyte(index).extendsign_char << 8) |
|
135
|
+
(getbyte(index + 1))
|
136
|
+
end
|
137
|
+
|
138
|
+
def store16le(index, num)
|
139
|
+
index = index.to_i
|
140
|
+
num = 0xffff & num.to_i
|
141
|
+
setbyte(index , num )
|
142
|
+
setbyte(index + 1, num >> 8)
|
143
|
+
end
|
144
|
+
|
145
|
+
def loadu16le(index)
|
146
|
+
(getbyte(index)) |
|
147
|
+
(getbyte(index + 1) << 8)
|
148
|
+
end
|
149
|
+
|
150
|
+
def loadi16le(index)
|
151
|
+
(getbyte(index)) |
|
152
|
+
(getbyte(index + 1).extendsign_char << 8)
|
153
|
+
end
|
154
|
+
|
155
|
+
def store24be(index, num)
|
156
|
+
index = index.to_i
|
157
|
+
num = 0xffffff & num.to_i
|
158
|
+
setbyte(index , num >> 16)
|
159
|
+
setbyte(index + 1, num >> 8)
|
160
|
+
setbyte(index + 2, num )
|
161
|
+
end
|
162
|
+
|
163
|
+
def loadu24be(index)
|
164
|
+
(getbyte(index) << 16) |
|
165
|
+
(getbyte(index + 1) << 8) |
|
166
|
+
(getbyte(index + 2))
|
167
|
+
end
|
168
|
+
|
169
|
+
def loadi24be(index)
|
170
|
+
(getbyte(index).extendsign_char << 16) |
|
171
|
+
(getbyte(index + 1) << 8) |
|
172
|
+
(getbyte(index + 2))
|
173
|
+
end
|
174
|
+
|
175
|
+
def store24le(index, num)
|
176
|
+
index = index.to_i
|
177
|
+
num = 0xffffff & num.to_i
|
178
|
+
setbyte(index , num )
|
179
|
+
setbyte(index + 1, num >> 8)
|
180
|
+
setbyte(index + 2, num >> 16)
|
181
|
+
end
|
182
|
+
|
183
|
+
def loadu24le(index)
|
184
|
+
(getbyte(index)) |
|
185
|
+
(getbyte(index + 1) << 8) |
|
186
|
+
(getbyte(index + 2) << 16)
|
187
|
+
end
|
188
|
+
|
189
|
+
def loadi24le(index)
|
190
|
+
(getbyte(index)) |
|
191
|
+
(getbyte(index + 1) << 8) |
|
192
|
+
(getbyte(index + 2).extendsign_char << 16)
|
193
|
+
end
|
194
|
+
|
195
|
+
def store32(index, num)
|
196
|
+
setbinary(index, [num].pack("L"))
|
197
|
+
end
|
198
|
+
|
199
|
+
def loadi32(index)
|
200
|
+
byteslice(index, 4).unpack("l")[0]
|
201
|
+
end
|
202
|
+
|
203
|
+
def loadu32(index)
|
204
|
+
byteslice(index, 4).unpack("L")[0]
|
205
|
+
end
|
206
|
+
|
207
|
+
def store32swap(index, num)
|
208
|
+
setbinary(index, [num.swap32].pack("L"))
|
209
|
+
end
|
210
|
+
|
211
|
+
def loadi32swap(index)
|
212
|
+
byteslice(index, 4).unpack("l")[0].swap32s
|
213
|
+
end
|
214
|
+
|
215
|
+
def loadu32swap(index)
|
216
|
+
byteslice(index, 4).unpack("L")[0].swap32
|
217
|
+
end
|
218
|
+
|
219
|
+
def store32be(index, num)
|
220
|
+
index = index.to_i
|
221
|
+
num = 0xffffffff & num.to_i
|
222
|
+
setbyte(index , num >> 24)
|
223
|
+
setbyte(index + 1, num >> 16)
|
224
|
+
setbyte(index + 2, num >> 8)
|
225
|
+
setbyte(index + 3, num & 0xff)
|
226
|
+
end
|
227
|
+
|
228
|
+
def loadu32be(index)
|
229
|
+
(getbyte(index) << 24) |
|
230
|
+
(getbyte(index + 1) << 16) |
|
231
|
+
(getbyte(index + 2) << 8) |
|
232
|
+
(getbyte(index + 3))
|
233
|
+
end
|
234
|
+
|
235
|
+
def loadi32be(index)
|
236
|
+
(getbyte(index).extendsign_char << 24) |
|
237
|
+
(getbyte(index + 1) << 16) |
|
238
|
+
(getbyte(index + 2) << 8) |
|
239
|
+
(getbyte(index + 3))
|
240
|
+
end
|
241
|
+
|
242
|
+
def store32le(index, num)
|
243
|
+
index = index.to_i
|
244
|
+
num = 0xffffffff & num.to_i
|
245
|
+
setbyte(index , num & 0xff)
|
246
|
+
setbyte(index + 1, num >> 8)
|
247
|
+
setbyte(index + 2, num >> 16)
|
248
|
+
setbyte(index + 3, num >> 24)
|
249
|
+
end
|
250
|
+
|
251
|
+
def loadu32le(index)
|
252
|
+
(getbyte(index)) |
|
253
|
+
(getbyte(index + 1) << 8) |
|
254
|
+
(getbyte(index + 2) << 16) |
|
255
|
+
(getbyte(index + 3) << 24)
|
256
|
+
end
|
257
|
+
|
258
|
+
def loadi32le(index)
|
259
|
+
(getbyte(index)) |
|
260
|
+
(getbyte(index + 1) << 8) |
|
261
|
+
(getbyte(index + 2) << 16) |
|
262
|
+
(getbyte(index + 3).extendsign_char << 24)
|
263
|
+
end
|
264
|
+
|
265
|
+
def store48be(index, num)
|
266
|
+
num = num.to_i
|
267
|
+
store24be(index , num >> 24)
|
268
|
+
store24be(index + 3, num )
|
269
|
+
end
|
270
|
+
|
271
|
+
def loadu48be(index)
|
272
|
+
(loadu24be(index) << 24) | loadu24be(index + 3)
|
273
|
+
end
|
274
|
+
|
275
|
+
def loadi48be(index)
|
276
|
+
(loadi24be(index) << 24) | loadu24be(index + 3)
|
277
|
+
end
|
278
|
+
|
279
|
+
def store48le(index, num)
|
280
|
+
num = num.to_i
|
281
|
+
store24le(index , num )
|
282
|
+
store24le(index + 3, num >> 24)
|
283
|
+
end
|
284
|
+
|
285
|
+
def loadu48le(index)
|
286
|
+
loadu24le(index) | (loadu24le(index + 3) << 24)
|
287
|
+
end
|
288
|
+
|
289
|
+
def loadi48le(index)
|
290
|
+
loadu24le(index) | (loadi24le(index + 3) << 24)
|
291
|
+
end
|
292
|
+
|
293
|
+
def store64(index, num)
|
294
|
+
setbinary(index, [num].pack("Q"))
|
295
|
+
end
|
296
|
+
|
297
|
+
def loadi64(index)
|
298
|
+
byteslice(index, 8).unpack("q")[0]
|
299
|
+
end
|
300
|
+
|
301
|
+
def loadu64(index)
|
302
|
+
byteslice(index, 8).unpack("Q")[0]
|
303
|
+
end
|
304
|
+
|
305
|
+
def store64swap(index, num)
|
306
|
+
setbinary(index, [num.swap64].pack("Q"))
|
307
|
+
end
|
308
|
+
|
309
|
+
def loadi64swap(index)
|
310
|
+
byteslice(index, 8).unpack("q")[0].swap64s
|
311
|
+
end
|
312
|
+
|
313
|
+
def loadu64swap(index)
|
314
|
+
byteslice(index, 8).unpack("Q")[0].swap64
|
315
|
+
end
|
316
|
+
|
317
|
+
def store64be(index, num)
|
318
|
+
num = num.to_i
|
319
|
+
store32be(index , num >> 32)
|
320
|
+
store32be(index + 4, num )
|
321
|
+
end
|
322
|
+
|
323
|
+
def loadu64be(index)
|
324
|
+
(loadu32be(index) << 32) | loadu32be(index + 4)
|
325
|
+
end
|
326
|
+
|
327
|
+
def loadi64be(index)
|
328
|
+
(loadi32be(index) << 32) | loadu32be(index + 4)
|
329
|
+
end
|
330
|
+
|
331
|
+
def store64le(index, num)
|
332
|
+
num = num.to_i
|
333
|
+
store32le(index , num )
|
334
|
+
store32le(index + 4, num >> 32)
|
335
|
+
end
|
336
|
+
|
337
|
+
def loadu64le(index)
|
338
|
+
loadu32le(index) | (loadu32le(index + 4) << 32)
|
339
|
+
end
|
340
|
+
|
341
|
+
def loadi64le(index)
|
342
|
+
loadu32le(index) | (loadi32le(index + 4) << 32)
|
343
|
+
end
|
344
|
+
|
345
|
+
def storef16(index, num)
|
346
|
+
store16(index, num.pack_binary16)
|
347
|
+
end
|
348
|
+
|
349
|
+
def loadf16(index)
|
350
|
+
loadu16(index).unpack_binary16
|
351
|
+
end
|
352
|
+
|
353
|
+
def storef16swap(index, num)
|
354
|
+
store16swap(index, num.pack_binary16)
|
355
|
+
end
|
356
|
+
|
357
|
+
def loadf16swap(index)
|
358
|
+
loadu16swap(index).unpack_binary16
|
359
|
+
end
|
360
|
+
|
361
|
+
def storef16be(index, num)
|
362
|
+
store16be(index, num.pack_binary16)
|
363
|
+
end
|
364
|
+
|
365
|
+
def loadf16be(index)
|
366
|
+
loadu16be(index).unpack_binary16
|
367
|
+
end
|
368
|
+
|
369
|
+
def storef16le(index, num)
|
370
|
+
store16le(index, num.pack_binary16)
|
371
|
+
end
|
372
|
+
|
373
|
+
def loadf16le(index)
|
374
|
+
loadu16le(index).unpack_binary16
|
375
|
+
end
|
376
|
+
|
377
|
+
def storef32(index, num)
|
378
|
+
store32(index, num.pack_binary32)
|
379
|
+
end
|
380
|
+
|
381
|
+
def loadf32(index)
|
382
|
+
loadu32(index).unpack_binary32
|
383
|
+
end
|
384
|
+
|
385
|
+
def storef32swap(index, num)
|
386
|
+
store32swap(index, num.pack_binary32)
|
387
|
+
end
|
388
|
+
|
389
|
+
def loadf32swap(index)
|
390
|
+
loadu32swap(index).unpack_binary32
|
391
|
+
end
|
392
|
+
|
393
|
+
def storef32be(index, num)
|
394
|
+
store32be(index, num.pack_binary32)
|
395
|
+
end
|
396
|
+
|
397
|
+
def loadf32be(index)
|
398
|
+
loadu32be(index).unpack_binary32
|
399
|
+
end
|
400
|
+
|
401
|
+
def storef32le(index, num)
|
402
|
+
store32le(index, num.pack_binary32)
|
403
|
+
end
|
404
|
+
|
405
|
+
def loadf32le(index)
|
406
|
+
loadu32le(index).unpack_binary32
|
407
|
+
end
|
408
|
+
|
409
|
+
def storef64(index, num)
|
410
|
+
store64(index, num.pack_binary64)
|
411
|
+
end
|
412
|
+
|
413
|
+
def loadf64(index)
|
414
|
+
loadu64(index).unpack_binary64
|
415
|
+
end
|
416
|
+
|
417
|
+
def storef64swap(index, num)
|
418
|
+
store64swap(index, num.pack_binary64)
|
419
|
+
end
|
420
|
+
|
421
|
+
def loadf64swap(index)
|
422
|
+
loadu64swap(index).unpack_binary64
|
423
|
+
end
|
424
|
+
|
425
|
+
def storef64be(index, num)
|
426
|
+
store64be(index, num.pack_binary64)
|
427
|
+
end
|
428
|
+
|
429
|
+
def loadf64be(index)
|
430
|
+
loadu64be(index).unpack_binary64
|
431
|
+
end
|
432
|
+
|
433
|
+
def storef64le(index, num)
|
434
|
+
store64le(index, num.pack_binary64)
|
435
|
+
end
|
436
|
+
|
437
|
+
def loadf64le(index)
|
438
|
+
loadu64le(index).unpack_binary64
|
439
|
+
end
|
440
|
+
|
441
|
+
def store16q8(index, num)
|
442
|
+
store16(index, num * 256)
|
443
|
+
end
|
444
|
+
|
445
|
+
def loadi16q8(index)
|
446
|
+
loadi16(index) / 256.0
|
447
|
+
end
|
448
|
+
|
449
|
+
def loadu16q8(index)
|
450
|
+
loadu16(index) / 256.0
|
451
|
+
end
|
452
|
+
|
453
|
+
def store16q8swap(index, num)
|
454
|
+
store16swap(index, num * 256)
|
455
|
+
end
|
456
|
+
|
457
|
+
def loadi16q8swap(index)
|
458
|
+
loadi16swap(index) / 256.0
|
459
|
+
end
|
460
|
+
|
461
|
+
def loadu16q8swap(index)
|
462
|
+
loadu16swap(index) / 256.0
|
463
|
+
end
|
464
|
+
|
465
|
+
def store16q8be(index, num)
|
466
|
+
store16be(index, num * 256)
|
467
|
+
end
|
468
|
+
|
469
|
+
def loadi16q8be(index)
|
470
|
+
loadi16be(index) / 256.0
|
471
|
+
end
|
472
|
+
|
473
|
+
def loadu16q8be(index)
|
474
|
+
loadu16be(index) / 256.0
|
475
|
+
end
|
476
|
+
|
477
|
+
def store16q8le(index, num)
|
478
|
+
store16le(index, num * 256)
|
479
|
+
end
|
480
|
+
|
481
|
+
def loadi16q8le(index)
|
482
|
+
loadi16le(index) / 256.0
|
483
|
+
end
|
484
|
+
|
485
|
+
def loadu16q8le(index)
|
486
|
+
loadu16le(index) / 256.0
|
487
|
+
end
|
488
|
+
|
489
|
+
def store32q6(index, num)
|
490
|
+
store32(index, num * 64)
|
491
|
+
end
|
492
|
+
|
493
|
+
def loadi32q6(index)
|
494
|
+
loadi32(index) / 64.0
|
495
|
+
end
|
496
|
+
|
497
|
+
def loadu32q6(index)
|
498
|
+
loadu32(index) / 64.0
|
499
|
+
end
|
500
|
+
|
501
|
+
def store32q6swap(index, num)
|
502
|
+
store32swap(index, num * 64)
|
503
|
+
end
|
504
|
+
|
505
|
+
def loadi32q6swap(index)
|
506
|
+
loadi32swap(index) / 64.0
|
507
|
+
end
|
508
|
+
|
509
|
+
def loadu32q6swap(index)
|
510
|
+
loadu32swap(index) / 64.0
|
511
|
+
end
|
512
|
+
|
513
|
+
def store32q6be(index, num)
|
514
|
+
store32be(index, num * 64)
|
515
|
+
end
|
516
|
+
|
517
|
+
def loadi32q6be(index)
|
518
|
+
loadi32be(index) / 64.0
|
519
|
+
end
|
520
|
+
|
521
|
+
def loadu32q6be(index)
|
522
|
+
loadu32be(index) / 64.0
|
523
|
+
end
|
524
|
+
|
525
|
+
def store32q6le(index, num)
|
526
|
+
store32le(index, num * 64)
|
527
|
+
end
|
528
|
+
|
529
|
+
def loadi32q6le(index)
|
530
|
+
loadi32le(index) / 64.0
|
531
|
+
end
|
532
|
+
|
533
|
+
def loadu32q6le(index)
|
534
|
+
loadu32le(index) / 64.0
|
535
|
+
end
|
536
|
+
|
537
|
+
def store32q8(index, num)
|
538
|
+
store32(index, num * 256)
|
539
|
+
end
|
540
|
+
|
541
|
+
def loadi32q8(index)
|
542
|
+
loadi32(index) / 256.0
|
543
|
+
end
|
544
|
+
|
545
|
+
def loadu32q8(index)
|
546
|
+
loadu32(index) / 256.0
|
547
|
+
end
|
548
|
+
|
549
|
+
def store32q8swap(index, num)
|
550
|
+
store32swap(index, num * 256)
|
551
|
+
end
|
552
|
+
|
553
|
+
def loadi32q8swap(index)
|
554
|
+
loadi32swap(index) / 256.0
|
555
|
+
end
|
556
|
+
|
557
|
+
def loadu32q8swap(index)
|
558
|
+
loadu32swap(index) / 256.0
|
559
|
+
end
|
560
|
+
|
561
|
+
def store32q8be(index, num)
|
562
|
+
store32be(index, num * 256)
|
563
|
+
end
|
564
|
+
|
565
|
+
def loadi32q8be(index)
|
566
|
+
loadi32be(index) / 256.0
|
567
|
+
end
|
568
|
+
|
569
|
+
def loadu32q8be(index)
|
570
|
+
loadu32be(index) / 256.0
|
571
|
+
end
|
572
|
+
|
573
|
+
def store32q8le(index, num)
|
574
|
+
store32le(index, num * 256)
|
575
|
+
end
|
576
|
+
|
577
|
+
def loadi32q8le(index)
|
578
|
+
loadi32le(index) / 256.0
|
579
|
+
end
|
580
|
+
|
581
|
+
def loadu32q8le(index)
|
582
|
+
loadu32le(index) / 256.0
|
583
|
+
end
|
584
|
+
|
585
|
+
def store32q12(index, num)
|
586
|
+
store32(index, num * 4096)
|
587
|
+
end
|
588
|
+
|
589
|
+
def loadi32q12(index)
|
590
|
+
loadi32(index) / 4096.0
|
591
|
+
end
|
592
|
+
|
593
|
+
def loadu32q12(index)
|
594
|
+
loadu32(index) / 4096.0
|
595
|
+
end
|
596
|
+
|
597
|
+
def store32q12swap(index, num)
|
598
|
+
store32swap(index, num * 4096)
|
599
|
+
end
|
600
|
+
|
601
|
+
def loadi32q12swap(index)
|
602
|
+
loadi32swap(index) / 4096.0
|
603
|
+
end
|
604
|
+
|
605
|
+
def loadu32q12swap(index)
|
606
|
+
loadu32swap(index) / 4096.0
|
607
|
+
end
|
608
|
+
|
609
|
+
def store32q12be(index, num)
|
610
|
+
store32be(index, num * 4096)
|
611
|
+
end
|
612
|
+
|
613
|
+
def loadi32q12be(index)
|
614
|
+
loadi32be(index) / 4096.0
|
615
|
+
end
|
616
|
+
|
617
|
+
def loadu32q12be(index)
|
618
|
+
loadu32be(index) / 4096.0
|
619
|
+
end
|
620
|
+
|
621
|
+
def store32q12le(index, num)
|
622
|
+
store32le(index, num * 4096)
|
623
|
+
end
|
624
|
+
|
625
|
+
def loadi32q12le(index)
|
626
|
+
loadi32le(index) / 4096.0
|
627
|
+
end
|
628
|
+
|
629
|
+
def loadu32q12le(index)
|
630
|
+
loadu32le(index) / 4096.0
|
631
|
+
end
|
632
|
+
|
633
|
+
def store32q16(index, num)
|
634
|
+
store32(index, num * 65536)
|
635
|
+
end
|
636
|
+
|
637
|
+
def loadi32q16(index)
|
638
|
+
loadi32(index) / 65536.0
|
639
|
+
end
|
640
|
+
|
641
|
+
def loadu32q16(index)
|
642
|
+
loadu32(index) / 65536.0
|
643
|
+
end
|
644
|
+
|
645
|
+
def store32q16swap(index, num)
|
646
|
+
store32swap(index, num * 65536)
|
647
|
+
end
|
648
|
+
|
649
|
+
def loadi32q16swap(index)
|
650
|
+
loadi32swap(index) / 65536.0
|
651
|
+
end
|
652
|
+
|
653
|
+
def loadu32q16swap(index)
|
654
|
+
loadu32swap(index) / 65536.0
|
655
|
+
end
|
656
|
+
|
657
|
+
def store32q16be(index, num)
|
658
|
+
store32be(index, num * 65536)
|
659
|
+
end
|
660
|
+
|
661
|
+
def loadi32q16be(index)
|
662
|
+
loadi32be(index) / 65536.0
|
663
|
+
end
|
664
|
+
|
665
|
+
def loadu32q16be(index)
|
666
|
+
loadu32be(index) / 65536.0
|
667
|
+
end
|
668
|
+
|
669
|
+
def store32q16le(index, num)
|
670
|
+
store32le(index, num * 65536)
|
671
|
+
end
|
672
|
+
|
673
|
+
def loadi32q16le(index)
|
674
|
+
loadi32le(index) / 65536.0
|
675
|
+
end
|
676
|
+
|
677
|
+
def loadu32q16le(index)
|
678
|
+
loadu32le(index) / 65536.0
|
679
|
+
end
|
680
|
+
|
681
|
+
def store32q24(index, num)
|
682
|
+
store32(index, num * 16777216)
|
683
|
+
end
|
684
|
+
|
685
|
+
def loadi32q24(index)
|
686
|
+
loadi32(index) / 16777216.0
|
687
|
+
end
|
688
|
+
|
689
|
+
def loadu32q24(index)
|
690
|
+
loadu32(index) / 16777216.0
|
691
|
+
end
|
692
|
+
|
693
|
+
def store32q24swap(index, num)
|
694
|
+
store32swap(index, num * 16777216)
|
695
|
+
end
|
696
|
+
|
697
|
+
def loadi32q24swap(index)
|
698
|
+
loadi32swap(index) / 16777216.0
|
699
|
+
end
|
700
|
+
|
701
|
+
def loadu32q24swap(index)
|
702
|
+
loadu32swap(index) / 16777216.0
|
703
|
+
end
|
704
|
+
|
705
|
+
def store32q24be(index, num)
|
706
|
+
store32be(index, num * 16777216)
|
707
|
+
end
|
708
|
+
|
709
|
+
def loadi32q24be(index)
|
710
|
+
loadi32be(index) / 16777216.0
|
711
|
+
end
|
712
|
+
|
713
|
+
def loadu32q24be(index)
|
714
|
+
loadu32be(index) / 16777216.0
|
715
|
+
end
|
716
|
+
|
717
|
+
def store32q24le(index, num)
|
718
|
+
store32le(index, num * 16777216)
|
719
|
+
end
|
720
|
+
|
721
|
+
def loadi32q24le(index)
|
722
|
+
loadi32le(index) / 16777216.0
|
723
|
+
end
|
724
|
+
|
725
|
+
def loadu32q24le(index)
|
726
|
+
loadu32le(index) / 16777216.0
|
727
|
+
end
|
728
|
+
|
729
|
+
|
730
|
+
def store_char(index, num)
|
731
|
+
setbinary(index, [num].pack("S!"))
|
732
|
+
end
|
733
|
+
|
734
|
+
def load_char(index)
|
735
|
+
byteslice(index, TypeSpec::SIZEOF_CHAR).unpack("c!")[0]
|
736
|
+
end
|
737
|
+
|
738
|
+
def load_uchar(index)
|
739
|
+
byteslice(index, TypeSpec::SIZEOF_CHAR).unpack("C!")[0]
|
740
|
+
end
|
741
|
+
|
742
|
+
def store_short(index, num)
|
743
|
+
setbinary(index, [num].pack("S!"))
|
744
|
+
end
|
745
|
+
|
746
|
+
def load_short(index)
|
747
|
+
byteslice(index, TypeSpec::SIZEOF_SHORT).unpack("s!")[0]
|
748
|
+
end
|
749
|
+
|
750
|
+
def load_ushort(index)
|
751
|
+
byteslice(index, TypeSpec::SIZEOF_SHORT).unpack("S!")[0]
|
752
|
+
end
|
753
|
+
|
754
|
+
def store_int(index, num)
|
755
|
+
setbinary(index, [num].pack("I!"))
|
756
|
+
end
|
757
|
+
|
758
|
+
def load_int(index)
|
759
|
+
byteslice(index, TypeSpec::SIZEOF_INT).unpack("i!")[0]
|
760
|
+
end
|
761
|
+
|
762
|
+
def load_uint(index)
|
763
|
+
byteslice(index, TypeSpec::SIZEOF_INT).unpack("I!")[0]
|
764
|
+
end
|
765
|
+
|
766
|
+
def store_long(index, num)
|
767
|
+
setbinary(index, [num].pack("L!"))
|
768
|
+
end
|
769
|
+
|
770
|
+
def load_long(index)
|
771
|
+
byteslice(index, TypeSpec::SIZEOF_LONG).unpack("l!")[0]
|
772
|
+
end
|
773
|
+
|
774
|
+
def load_ulong(index)
|
775
|
+
byteslice(index, TypeSpec::SIZEOF_LONG).unpack("L!")[0]
|
776
|
+
end
|
777
|
+
|
778
|
+
def store_longlong(index, num)
|
779
|
+
setbinary(index, [num].pack("Q"))
|
780
|
+
end
|
781
|
+
|
782
|
+
def load_longlong(index)
|
783
|
+
byteslice(index, TypeSpec::SIZEOF_LONGLONG).unpack("q")[0]
|
784
|
+
end
|
785
|
+
|
786
|
+
def load_ulonglong(index)
|
787
|
+
byteslice(index, TypeSpec::SIZEOF_LONGLONG).unpack("Q")[0]
|
788
|
+
end
|
789
|
+
|
790
|
+
def store_float(index, num)
|
791
|
+
setbinary(index, [num].pack("f"))
|
792
|
+
end
|
793
|
+
|
794
|
+
def load_float(index)
|
795
|
+
byteslice(index, TypeSpec::SIZEOF_FLOAT).unpack("f")[0]
|
796
|
+
end
|
797
|
+
|
798
|
+
def store_double(index, num)
|
799
|
+
setbinary(index, [num].pack("d"))
|
800
|
+
end
|
801
|
+
|
802
|
+
def load_double(index)
|
803
|
+
byteslice(index, TypeSpec::SIZEOF_DOUBLE).unpack("d")[0]
|
804
|
+
end
|
805
|
+
|
806
|
+
|
807
|
+
case "\0\1\2\3".unpack("I")[0]
|
808
|
+
when 0x00010203 # big endian (network byte order)
|
809
|
+
alias store storebe
|
810
|
+
alias loadi loadibe
|
811
|
+
alias loadu loadube
|
812
|
+
|
813
|
+
alias storeswap storele
|
814
|
+
alias loadiswap loadile
|
815
|
+
alias loaduswap loadule
|
816
|
+
when 0x03020100 # little endian (vax byte order)
|
817
|
+
alias store storele
|
818
|
+
alias loadi loadile
|
819
|
+
alias loadu loadule
|
820
|
+
|
821
|
+
alias storeswap storebe
|
822
|
+
alias loadiswap loadibe
|
823
|
+
alias loaduswap loadube
|
824
|
+
else
|
825
|
+
# any byte order...
|
826
|
+
end
|
827
|
+
|
828
|
+
case TypeSpec::SIZEOF_SIZE_T
|
829
|
+
when TypeSpec::SIZEOF_LONGLONG
|
830
|
+
alias store_sizet store_longlong
|
831
|
+
alias load_sizet load_ulonglong
|
832
|
+
alias load_ssizet load_longlong
|
833
|
+
when TypeSpec::SIZEOF_LONG
|
834
|
+
alias store_sizet store_long
|
835
|
+
alias load_sizet load_ulong
|
836
|
+
alias load_ssizet load_long
|
837
|
+
when TypeSpec::SIZEOF_INT
|
838
|
+
alias store_sizet store_int
|
839
|
+
alias load_sizet load_uint
|
840
|
+
alias load_ssizet load_int
|
841
|
+
else
|
842
|
+
def store_sizet(o, v)
|
843
|
+
raise NotImplementedError, "unsupported system (expected sizeof(void *) to 4 or 8, but #{TypeSpec::SIZEOF_SIZE_T})"
|
844
|
+
end
|
845
|
+
|
846
|
+
def load_ssizet(o)
|
847
|
+
raise NotImplementedError, "unsupported system (expected sizeof(void *) to 4 or 8, but #{TypeSpec::SIZEOF_SIZE_T})"
|
848
|
+
end
|
849
|
+
|
850
|
+
def load_sizet(o)
|
851
|
+
raise NotImplementedError, "unsupported system (expected sizeof(void *) to 4 or 8, but #{TypeSpec::SIZEOF_SIZE_T})"
|
852
|
+
end
|
853
|
+
end
|
854
|
+
end
|
855
|
+
end
|
856
|
+
end
|