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.
@@ -0,0 +1,65 @@
1
+ #!ruby
2
+
3
+ require "test-unit"
4
+ require "gogyou"
5
+
6
+ class TestLoadStore < Test::Unit::TestCase
7
+ @@str = [0, 0, 0, 0, 0, 0, 0, 0, 160, 164, 221, 186, 248, 213, 191, 215, 137, 242, 225, 169, 153, 224, 148, 134].pack("C*")
8
+
9
+ def test_load
10
+ 16.times do |i|
11
+ assert_equal @@str.unpack("@#{i}C")[0], @@str.loadu8(i)
12
+ assert_equal @@str.unpack("@#{i}S")[0], @@str.loadu16(i)
13
+ assert_equal @@str.unpack("@#{i}L")[0], @@str.loadu32(i)
14
+ assert_equal @@str.unpack("@#{i}Q")[0], @@str.loadu64(i)
15
+ assert_equal @@str.unpack("@#{i}c")[0], @@str.loadi8(i)
16
+ assert_equal @@str.unpack("@#{i}s")[0], @@str.loadi16(i)
17
+ assert_equal @@str.unpack("@#{i}l")[0], @@str.loadi32(i)
18
+ assert_equal @@str.unpack("@#{i}q")[0], @@str.loadi64(i)
19
+ assert_equal @@str.unpack("@#{i}s!")[0], @@str.load_short(i)
20
+ assert_equal @@str.unpack("@#{i}i!")[0], @@str.load_int(i)
21
+ assert_equal @@str.unpack("@#{i}l!")[0], @@str.load_long(i)
22
+ assert_equal @@str.unpack("@#{i}q")[0], @@str.load_longlong(i)
23
+ assert_equal @@str.unpack("@#{i}S!")[0], @@str.load_ushort(i)
24
+ assert_equal @@str.unpack("@#{i}I!")[0], @@str.load_uint(i)
25
+ assert_equal @@str.unpack("@#{i}L!")[0], @@str.load_ulong(i)
26
+ assert_equal @@str.unpack("@#{i}Q")[0], @@str.load_ulonglong(i)
27
+ assert_equal @@str.unpack("@#{i}f")[0], @@str.loadf32(i)
28
+ assert_equal @@str.unpack("@#{i}d")[0], @@str.loadf64(i)
29
+ assert_equal @@str.unpack("@#{i}n")[0].unpack_binary16, @@str.loadf16be(i)
30
+ assert_equal @@str.unpack("@#{i}N")[0].unpack_binary32, @@str.loadf32be(i)
31
+ assert_equal @@str.unpack("@#{i}Q>")[0].unpack_binary64, @@str.loadf64be(i)
32
+ assert_equal @@str.unpack("@#{i}v")[0].unpack_binary16, @@str.loadf16le(i)
33
+ assert_equal @@str.unpack("@#{i}V")[0].unpack_binary32, @@str.loadf32le(i)
34
+ assert_equal @@str.unpack("@#{i}Q<")[0].unpack_binary64, @@str.loadf64le(i)
35
+ end
36
+ end
37
+ end
38
+
39
+ class TestSwap < Test::Unit::TestCase
40
+ def test_swap
41
+ assert_equal 0x0011, 0x1100.swap16
42
+ assert_equal 0x001122, 0x221100.swap24
43
+ assert_equal 0x00112233, 0x33221100.swap32
44
+ assert_equal 0x001122334455, 0x554433221100.swap48
45
+ assert_equal 0x0011223344556677, 0x7766554433221100.swap64
46
+
47
+ assert_equal 0xffee, 0xeeff.swap16
48
+ assert_equal 0xffeedd, 0xddeeff.swap24
49
+ assert_equal 0xffeeddcc, 0xccddeeff.swap32
50
+ assert_equal 0xffeeddccbbaa, 0xaabbccddeeff.swap48
51
+ assert_equal 0xffeeddccbbaa9988, 0x8899aabbccddeeff.swap64
52
+
53
+ assert_equal 0x0011, 0x1100.swap16s
54
+ assert_equal 0x001122, 0x221100.swap24s
55
+ assert_equal 0x00112233, 0x33221100.swap32s
56
+ assert_equal 0x001122334455, 0x554433221100.swap48s
57
+ assert_equal 0x0011223344556677, 0x7766554433221100.swap64s
58
+
59
+ assert_equal ~0x0011, 0xeeff.swap16s
60
+ assert_equal ~0x001122, 0xddeeff.swap24s
61
+ assert_equal ~0x00112233, 0xccddeeff.swap32s
62
+ assert_equal ~0x001122334455, 0xaabbccddeeff.swap48s
63
+ assert_equal ~0x0011223344556677, 0x8899aabbccddeeff.swap64s
64
+ end
65
+ end
@@ -0,0 +1,65 @@
1
+ #!ruby
2
+
3
+ require "test-unit"
4
+ require "gogyou"
5
+
6
+ class TestBinaryPacker < Test::Unit::TestCase
7
+ def test_pack_binary16
8
+ assert_equal 0x0000, 0.0.pack_binary16
9
+ assert_equal 0x8000, -0.0.pack_binary16
10
+ assert_equal 0x3800, 0.5.pack_binary16
11
+ assert_equal 0x3c00, 1.0.pack_binary16
12
+ assert_equal 0x4000, 2.0.pack_binary16
13
+ assert_equal 0x7c00, (+Float::INFINITY).pack_binary16
14
+ assert_equal 0xfc00, (-Float::INFINITY).pack_binary16
15
+ assert_equal 0x7e00, Float::NAN.pack_binary16
16
+ assert_equal 0x7c00, 65536.pack_binary16 # infinity
17
+ end
18
+
19
+ def test_unpack_binary16
20
+ assert_equal +Float::INFINITY, 0x7c00.unpack_binary16
21
+ assert_equal -Float::INFINITY, 0xfc00.unpack_binary16
22
+ assert_equal "NaN", 0x7e00.unpack_binary16.to_s
23
+ assert_equal "NaN", 0xfe00.unpack_binary16.to_s
24
+ assert_equal "-0.0", 0x8000.unpack_binary16.to_s
25
+ assert_equal 0.0, 0x0000.unpack_binary16
26
+ assert_equal 0.5, 0x3800.unpack_binary16
27
+ assert_equal 1.0, 0x3c00.unpack_binary16
28
+ assert_equal 2.0, 0x4000.unpack_binary16
29
+ assert_equal 0x07ff / 0x0400.to_f, 0x3fff.unpack_binary16
30
+ end
31
+
32
+ def test_unpack_binary32
33
+ assert_equal +Float::INFINITY, 0x7f800000.unpack_binary32
34
+ assert_equal -Float::INFINITY, 0xff800000.unpack_binary32
35
+ assert_equal "NaN", 0x7fc00000.unpack_binary32.to_s
36
+ assert_equal "NaN", 0xffc00000.unpack_binary32.to_s
37
+ assert_equal "-0.0", 0x80000000.unpack_binary32.to_s
38
+ assert_equal 0.0, 0x00000000.unpack_binary32
39
+ assert_equal 0.5, 0x3f000000.unpack_binary32
40
+ assert_equal 1.0, 0x3f800000.unpack_binary32
41
+ assert_equal 2.0, 0x40000000.unpack_binary32
42
+ assert_equal 0x00ffffff / 0x00800000.to_f, 0x3fffffff.unpack_binary32
43
+ end
44
+
45
+ def test_unpack_binary64
46
+ assert_equal +Float::INFINITY, 0x7ff0000000000000.unpack_binary64
47
+ assert_equal -Float::INFINITY, 0xfff0000000000000.unpack_binary64
48
+ assert_equal "NaN", 0x7ff8000000000000.unpack_binary64.to_s
49
+ assert_equal "NaN", 0xfff8000000000000.unpack_binary64.to_s
50
+ assert_equal "-0.0", 0x8000000000000000.unpack_binary64.to_s
51
+ assert_equal 0.0, 0x0000000000000000.unpack_binary64
52
+ assert_equal 0.5, 0x3fe0000000000000.unpack_binary64
53
+ assert_equal 1.0, 0x3ff0000000000000.unpack_binary64
54
+ assert_equal 2.0, 0x4000000000000000.unpack_binary64
55
+ end
56
+
57
+ def test_pack_and_unpack_32
58
+ 200.times do
59
+ n = [rand].pack("g").unpack("g")[0]
60
+ assert_equal n, [n].pack("g").unpack("N")[0].unpack_binary32
61
+ n = [1 / n].pack("g").unpack("g")[0]
62
+ assert_equal n, [n].pack("g").unpack("N")[0].unpack_binary32
63
+ end
64
+ end
65
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gogyou
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - dearblue
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-17 00:00:00.000000000 Z
11
+ date: 2015-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -48,7 +48,7 @@ description: |
48
48
  * Available const field.
49
49
  * Available packed field.
50
50
  * Available user definition types.
51
- email: dearblue@users.sourceforge.jp
51
+ email: dearblue@users.osdn.me
52
52
  executables: []
53
53
  extensions: []
54
54
  extra_rdoc_files:
@@ -57,7 +57,10 @@ extra_rdoc_files:
57
57
  - README.md
58
58
  - lib/gogyou.rb
59
59
  - lib/gogyou/accessor.rb
60
- - lib/gogyou/mixin.rb
60
+ - lib/gogyou/bytearray.rb
61
+ - lib/gogyou/extensions.rb
62
+ - lib/gogyou/ffi.rb
63
+ - lib/gogyou/fiddle.rb
61
64
  - lib/gogyou/model.rb
62
65
  - lib/gogyou/primitives.rb
63
66
  - lib/gogyou/typespec.rb
@@ -70,19 +73,28 @@ files:
70
73
  - gemstub.rb
71
74
  - lib/gogyou.rb
72
75
  - lib/gogyou/accessor.rb
73
- - lib/gogyou/mixin.rb
76
+ - lib/gogyou/bytearray.rb
77
+ - lib/gogyou/extensions.rb
78
+ - lib/gogyou/ffi.rb
79
+ - lib/gogyou/fiddle.rb
74
80
  - lib/gogyou/model.rb
75
81
  - lib/gogyou/primitives.rb
76
82
  - lib/gogyou/typespec.rb
77
83
  - lib/gogyou/version.rb
78
84
  - mkprims.rb
79
85
  - spec/gogyou_spec.rb
80
- homepage: http://sourceforge.jp/projects/rutsubo/
86
+ - test/test_loadstore.rb
87
+ - test/test_packbin.rb
88
+ homepage: https://osdn.jp/projects/rutsubo/
81
89
  licenses:
82
90
  - 2-clause BSD License
83
91
  metadata: {}
84
92
  post_install_message:
85
- rdoc_options: []
93
+ rdoc_options:
94
+ - "--charset"
95
+ - UTF-8
96
+ - "-m"
97
+ - README.md
86
98
  require_paths:
87
99
  - lib
88
100
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -97,8 +109,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
109
  version: '0'
98
110
  requirements: []
99
111
  rubyforge_project:
100
- rubygems_version: 2.4.6
112
+ rubygems_version: 2.4.8
101
113
  signing_key:
102
114
  specification_version: 4
103
115
  summary: binary data operation library with the C liked struct and union
104
116
  test_files: []
117
+ has_rdoc:
@@ -1,640 +0,0 @@
1
- #vim set fileencoding:utf-8
2
-
3
- require_relative "typespec"
4
-
5
- module Gogyou
6
- module Extensions
7
- module Object
8
- module Mixin
9
- def infect_from(*obj)
10
- obj.each { |o| taint if o.tainted? }
11
- self
12
- end
13
- end
14
- end
15
-
16
- class ::Object
17
- extend Gogyou::Extensions::Object
18
- include Gogyou::Extensions::Object::Mixin
19
- end
20
-
21
- UNIT_B = 1 << 0
22
- UNIT_KiB = 1 << 10
23
- UNIT_MiB = 1 << 20
24
- UNIT_GiB = 1 << 30
25
- UNIT_TiB = 1 << 40
26
- UNIT_PiB = 1 << 50
27
- UNIT_EiB = 1 << 60
28
- UNIT_ZiB = 1 << 70
29
- UNIT_YiB = 1 << 80
30
-
31
- module Numeric
32
- module Mixin
33
- def B
34
- UNIT_B * self
35
- end
36
-
37
- def KiB
38
- UNIT_KiB * self
39
- end
40
-
41
- def MiB
42
- UNIT_MiB * self
43
- end
44
-
45
- def GiB
46
- UNIT_GiB * self
47
- end
48
-
49
- def TiB
50
- UNIT_TiB * self
51
- end
52
-
53
- def PiB
54
- UNIT_PiB * self
55
- end
56
-
57
- def EiB
58
- UNIT_EiB * self
59
- end
60
-
61
- def ZiB
62
- UNIT_ZiB * self
63
- end
64
-
65
- def YiB
66
- UNIT_YiB * self
67
- end
68
-
69
- def unit_floor(unit)
70
- (self / unit).to_i
71
- end
72
-
73
- def unit_ceil(unit)
74
- ((self + (unit - 1)) / unit).to_i
75
- end
76
-
77
- def align_floor(unit)
78
- ((self / unit).to_i * unit).to_i
79
- end
80
-
81
- def align_ceil(unit)
82
- (((self + (unit - 1)) / unit).to_i * unit).to_i
83
- end
84
- end
85
- end
86
-
87
- class ::Numeric
88
- extend Gogyou::Extensions::Numeric
89
- include Gogyou::Extensions::Numeric::Mixin
90
- end
91
-
92
- module Integer
93
- module_function
94
- def bitmask(shift, bits)
95
- ~(~0 << bits) << shift
96
- end
97
-
98
- public_class_method :bitmask
99
-
100
- module Mixin
101
- def getbit(shift, bits)
102
- (self >> shift) & Integer.bitmask(0, bits)
103
- end
104
-
105
- def getbits(shift, bits)
106
- getbit(shift, bits).extendsign(bits)
107
- end
108
-
109
- def getbitset(*bitsize)
110
- shift = 0
111
- list = []
112
- bitsize.each do |bits|
113
- if bits > 0
114
- list << getbit(shift, bits)
115
- shift += bits
116
- else
117
- list << 0
118
- end
119
- end
120
- list
121
- end
122
-
123
- def setbit(shift, bits, num)
124
- mask = Integer.bitmask(shift, bits)
125
- (self & ~mask) | ((num << shift) & mask)
126
- end
127
-
128
- def extendsign(bits)
129
- n = self & Integer.bitmask(0, bits)
130
- if (n >> (bits - 1)) == 0
131
- n
132
- else
133
- n | (~0 << bits)
134
- end
135
- end
136
-
137
- def swapbyte(bytesize)
138
- num = 0
139
- bytesize.times do |i|
140
- num <<= 8
141
- num |= (self >> (i * 8)) & 0xff
142
- end
143
- num
144
- end
145
-
146
- def swap16
147
- ((self >> 8) & 0xff) | ((self & 0xff) << 8)
148
- end
149
-
150
- def swap24
151
- ((self >> 16) & 0xff) |
152
- (self & 0xff00) |
153
- ((self & 0xff) << 16)
154
- end
155
-
156
- def swap32
157
- ((self >> 24) & 0xff) |
158
- ((self >> 8) & 0xff00) |
159
- ((self & 0xff00) << 8) |
160
- ((self & 0xff) << 24)
161
- end
162
-
163
- def swap48
164
- ((self >> 40) & 0xff) |
165
- ((self >> 24) & 0xff00) |
166
- ((self >> 8) & 0xff0000) |
167
- ((self & 0xff0000) << 8) |
168
- ((self & 0xff00) << 24) |
169
- ((self & 0xff) << 40)
170
- end
171
-
172
- def swap64
173
- ((self >> 56) & 0xff) |
174
- ((self >> 40) & 0xff00) |
175
- ((self >> 24) & 0xff0000) |
176
- ((self >> 8) & 0xff000000) |
177
- ((self & 0xff000000) << 8) |
178
- ((self & 0xff0000) << 24) |
179
- ((self & 0xff00) << 40) |
180
- ((self & 0xff) << 56)
181
- end
182
- end
183
- end
184
-
185
- class ::Integer
186
- extend Gogyou::Extensions::Integer
187
- include Gogyou::Extensions::Integer::Mixin
188
- end
189
-
190
- module String
191
- BITS_PER_BYTE = 8
192
-
193
- module_function
194
- def alloc(bytesize)
195
- ?\0.force_encoding(Encoding::BINARY) * bytesize
196
- end
197
-
198
- public :alloc
199
-
200
- ZERO_BUFFER = alloc(64.KiB).freeze
201
-
202
- module Mixin
203
- def to_ptr
204
- [self].pack("p").load_sizet(0)
205
- end
206
-
207
- def binary_operation
208
- enc = encoding
209
- force_encoding(Encoding::BINARY) rescue (enc = nil; raise)
210
- yield
211
- ensure
212
- force_encoding(enc) rescue nil if enc
213
- end
214
-
215
- def resize(newsize)
216
- binary_operation do
217
- left = newsize - bytesize
218
- case
219
- when left > 0
220
- while left >= ZERO_BUFFER.bytesize
221
- concat(ZERO_BUFFER)
222
- left -= ZERO_BUFFER.bytesize
223
- end
224
- concat(ZERO_BUFFER[ZERO_BUFFER.bytesize - left, left]) # make shared string
225
- when left < 0
226
- left = - left
227
- self[bytesize - left, left] = ""
228
- end
229
- end
230
-
231
- self
232
- end
233
-
234
- def setbinary(index, str, offset = 0, bytesize = str.bytesize)
235
- offset = offset.to_i
236
- bytesize = bytesize.to_i
237
- size1 = str.bytesize - offset
238
- bytesize = size1 if bytesize > size1
239
- if bytesize > 0
240
- binary_operation do
241
- self[index.to_i, bytesize] = str.byteslice(offset, bytesize)
242
- end
243
- end
244
-
245
- self
246
- end
247
-
248
- def swapbyte(index, bytesize)
249
- i = index.to_i
250
- j = i + bytesize.to_i - 1
251
- while i < j
252
- w = getbyte(i)
253
- setbyte(i, getbyte(j))
254
- setbyte(j, w)
255
- i += 1
256
- j -= 1
257
- end
258
-
259
- self
260
- end
261
-
262
- def storebe(index, num, bytesize)
263
- raise RangeError unless index >= 0 &&
264
- index < bytesize &&
265
- index + bytesize <= bytesize &&
266
- index + bytesize >= 0
267
- while bytesize > 0
268
- bytesize -= 1
269
- setbyte(index, 0xff & (num >> (bytesize * BITS_PER_BYTE)))
270
- index += 1
271
- end
272
-
273
- self
274
- end
275
-
276
- def storele(index, num, bytesize)
277
- raise RangeError unless index >= 0 &&
278
- index < bytesize &&
279
- index + bytesize <= bytesize &&
280
- index + bytesize >= 0
281
- while bytesize > 0
282
- bytesize -= 1
283
- setbyte(index, 0xff & num)
284
- num >>= BITS_PER_BYTE
285
- index += 1
286
- end
287
-
288
- self
289
- end
290
-
291
- def loadube(index, bytesize)
292
- n = 0
293
- while bytesize > 0
294
- bytesize -= 1
295
- n <<= BITS_PER_BYTE
296
- n |= getbyte(index)
297
- index += 1
298
- end
299
- n
300
- end
301
-
302
- def loadibe(index, bytesize)
303
- loadube(index, bytesize).extendsign(bytesize * BITS_PER_BYTE)
304
- end
305
-
306
- def loadule(index, bytesize)
307
- n = 0
308
- c = 0
309
- while bytesize > 0
310
- bytesize -= 1
311
- n |= getbyte(index) << (BITS_PER_BYTE * c)
312
- index += 1
313
- c += 1
314
- end
315
- n
316
- end
317
-
318
- def loadile(index, bytesize)
319
- loadule(index, bytesize).extendsign(bytesize * BITS_PER_BYTE)
320
- end
321
-
322
- def loadu8(index)
323
- getbyte(index)
324
- end
325
-
326
- def loadi8(index)
327
- getbyte(index).extendsign(8)
328
- end
329
-
330
- def loadu16be(index)
331
- (getbyte(index) << 8) | getbyte(index + 1)
332
- end
333
-
334
- def loadi16be(index)
335
- loadu16be(index).extendsign(16)
336
- end
337
-
338
- def loadu16le(index)
339
- getbyte(index) | (getbyte(index + 1) << 8)
340
- end
341
-
342
- def loadi16le(index)
343
- loadu16le(index).extendsign(16)
344
- end
345
-
346
- def loadu24be(index)
347
- (getbyte(index) << 16) | (getbyte(index + 1) << 8) | getbyte(index + 2)
348
- end
349
-
350
- def loadi24be(index)
351
- loadu24be(index).extendsign(24)
352
- end
353
-
354
- def loadu24le(index)
355
- getbyte(index) | (getbyte(index + 1) << 8) | (getbyte(index + 2) << 16)
356
- end
357
-
358
- def loadi24le(index)
359
- loadu24le(index).extendsign(24)
360
- end
361
-
362
- def loadu32be(index)
363
- (getbyte(index) << 24) | (getbyte(index + 1) << 16) | (getbyte(index + 2) << 8) | getbyte(index + 3)
364
- end
365
-
366
- def loadi32be(index)
367
- loadu32be(index).extendsign(32)
368
- end
369
-
370
- def loadu32le(index)
371
- getbyte(index) | (getbyte(index + 1) << 8) | (getbyte(index + 2) << 16) | (getbyte(index + 3) << 24)
372
- end
373
-
374
- def loadi32le(index)
375
- loadu32le(index).extendsign(32)
376
- end
377
-
378
- def loadu48be(index)
379
- (loadu24be(index) << 24) | loadu24be(index + 3)
380
- end
381
-
382
- def loadi48be(index)
383
- loadu48be(index).extendsign(48)
384
- end
385
-
386
- def loadu48le(index)
387
- loadu24le(index) | (loadu24le(index + 3) << 24)
388
- end
389
-
390
- def loadi48le(index)
391
- loadu48le(index).extendsign(48)
392
- end
393
-
394
- def loadu64be(index)
395
- (loadu32be(index) << 32) | loadu32be(index + 4)
396
- end
397
-
398
- def loadi64be(index)
399
- loadu64be(index).extendsign(64)
400
- end
401
-
402
- def loadu64le(index)
403
- loadu32le(index) | (loadu32le(index + 4) << 32)
404
- end
405
-
406
- def loadi64le(index)
407
- loadu64le(index).extendsign(64)
408
- end
409
-
410
- def loadf32be(index)
411
- unpack("@#{index.to_i}g")[0]
412
- end
413
-
414
- def loadf32le(index)
415
- unpack("@#{index.to_i}e")[0]
416
- end
417
-
418
- def loadf64be(index)
419
- unpack("@#{index.to_i}G")[0]
420
- end
421
-
422
- def loadf64le(index)
423
- unpack("@#{index.to_i}E")[0]
424
- end
425
-
426
- def store8(index, num)
427
- setbyte(index.to_i, num.to_i & 0xff)
428
- end
429
-
430
- def store16be(index, num)
431
- store8(index, num >> 8)
432
- store8(index + 1, num)
433
- end
434
-
435
- def store16le(index, num)
436
- store8(index, num)
437
- store8(index + 1, num >> 8)
438
- end
439
-
440
- def store24be(index, num)
441
- store8(index, num >> 16)
442
- store8(index + 1, num >> 8)
443
- store8(index + 2, num)
444
- end
445
-
446
- def store24le(index, num)
447
- store8(index, num)
448
- store8(index + 1, num >> 8)
449
- store8(index + 2, num >> 16)
450
- end
451
-
452
- def store32be(index, num)
453
- store8(index, num >> 24)
454
- store8(index + 1, num >> 16)
455
- store8(index + 2, num >> 8)
456
- store8(index + 3, num)
457
- end
458
-
459
- def store32le(index, num)
460
- store8(index, num)
461
- store8(index + 1, num >> 8)
462
- store8(index + 2, num >> 16)
463
- store8(index + 3, num >> 24)
464
- end
465
-
466
- def store48be(index, num)
467
- store24be(index, num >> 24)
468
- store24be(index + 3, num)
469
- end
470
-
471
- def store48le(index, num)
472
- store24le(index, num)
473
- store24le(index + 3, num >> 24)
474
- end
475
-
476
- def store64be(index, num)
477
- store32be(index, num >> 32)
478
- store32be(index + 4, num)
479
- end
480
-
481
- def store64le(index, num)
482
- store32le(index, num)
483
- store32le(index + 4, num >> 32)
484
- end
485
-
486
- def storef32be(index, num)
487
- setbinary(index, [num].pack("g"))
488
- end
489
-
490
- def storef32le(index, num)
491
- setbinary(index, [num].pack("e"))
492
- end
493
-
494
- def storef64be(index, num)
495
- setbinary(index, [num].pack("G"))
496
- end
497
-
498
- def storef64le(index, num)
499
- setbinary(index, [num].pack("E"))
500
- end
501
-
502
- #---
503
- ## native byte order operations
504
- #+++
505
-
506
- def loadf32(index)
507
- unpack("@#{index.to_i}f")[0]
508
- end
509
-
510
- def loadf64(index)
511
- unpack("@#{index.to_i}d")[0]
512
- end
513
-
514
- def storef32(index, num)
515
- setbinary(index, [num].pack("f"))
516
- end
517
-
518
- def storef64(index, num)
519
- setbinary(index, [num].pack("d"))
520
- end
521
-
522
- case "\0\1\2\3".unpack("I")[0]
523
- when 0x00010203 # big endian (network byte order)
524
- alias store storebe
525
- alias store16 store16be
526
- alias store24 store24be
527
- alias store32 store32be
528
- alias store48 store48be
529
- alias store64 store64be
530
- alias loadi loadibe
531
- alias loadi16 loadi16be
532
- alias loadi24 loadi24be
533
- alias loadi32 loadi32be
534
- alias loadi48 loadi48be
535
- alias loadi64 loadi64be
536
- alias loadu loadube
537
- alias loadu16 loadu16be
538
- alias loadu24 loadu24be
539
- alias loadu32 loadu32be
540
- alias loadu48 loadu48be
541
- alias loadu64 loadu64be
542
-
543
- alias storeswap storele
544
- alias store16swap store16le
545
- alias store24swap store24le
546
- alias store32swap store32le
547
- alias store48swap store48le
548
- alias store64swap store64le
549
- alias loadiswap loadile
550
- alias loadi16swap loadi16le
551
- alias loadi24swap loadi24le
552
- alias loadi32swap loadi32le
553
- alias loadi48swap loadi48le
554
- alias loadi64swap loadi64le
555
- alias loaduswap loadule
556
- alias loadu16swap loadu16le
557
- alias loadu24swap loadu24le
558
- alias loadu32swap loadu32le
559
- alias loadu48swap loadu48le
560
- alias loadu64swap loadu64le
561
- alias loadf32swap loadf32le
562
- alias loadf64swap loadf64le
563
- when 0x03020100 # little endian (vax byte order)
564
- alias store storele
565
- alias store16 store16le
566
- alias store24 store24le
567
- alias store32 store32le
568
- alias store48 store48le
569
- alias store64 store64le
570
- alias loadi loadile
571
- alias loadi16 loadi16le
572
- alias loadi24 loadi24le
573
- alias loadi32 loadi32le
574
- alias loadi48 loadi48le
575
- alias loadi64 loadi64le
576
- alias loadu loadule
577
- alias loadu16 loadu16le
578
- alias loadu24 loadu24le
579
- alias loadu32 loadu32le
580
- alias loadu48 loadu48le
581
- alias loadu64 loadu64le
582
-
583
- alias storeswap storebe
584
- alias store16swap store16be
585
- alias store24swap store24be
586
- alias store32swap store32be
587
- alias store48swap store48be
588
- alias store64swap store64be
589
- alias loadiswap loadibe
590
- alias loadi16swap loadi16be
591
- alias loadi24swap loadi24be
592
- alias loadi32swap loadi32be
593
- alias loadi48swap loadi48be
594
- alias loadi64swap loadi64be
595
- alias loaduswap loadube
596
- alias loadu16swap loadu16be
597
- alias loadu24swap loadu24be
598
- alias loadu32swap loadu32be
599
- alias loadu48swap loadu48be
600
- alias loadu64swap loadu64be
601
- alias loadf32swap loadf32be
602
- alias loadf64swap loadf64be
603
- else
604
- raise NotImplementedError
605
- end
606
-
607
- case TypeSpec::SIZEOF_SIZE_T
608
- when 4
609
- alias store_sizet store32
610
- alias load_sizet loadu32
611
- alias load_ssizet loadi32
612
- when 8
613
- alias store_sizet store64
614
- alias load_sizet loadu64
615
- alias load_ssizet loadi64
616
- else
617
- raise NotImplementedError
618
- end
619
-
620
- case TypeSpec::SIZEOF_LONG
621
- when 4
622
- alias store_long store32
623
- alias load_long loadi32
624
- alias load_ulong loadu32
625
- when 8
626
- alias store_long store64
627
- alias load_long loadi64
628
- alias load_ulong loadu64
629
- else
630
- raise NotImplementedError
631
- end
632
- end
633
- end
634
-
635
- class ::String
636
- extend Gogyou::Extensions::String
637
- include Gogyou::Extensions::String::Mixin
638
- end
639
- end
640
- end