mikunyan 3.9.4 → 3.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/README.md +35 -41
  4. data/Rakefile +9 -0
  5. data/exe/mikunyan-image +12 -8
  6. data/ext/decoders/native/astc.c +760 -0
  7. data/ext/decoders/native/astc.h +8 -0
  8. data/ext/decoders/native/dxtc.c +104 -0
  9. data/ext/decoders/native/dxtc.h +9 -0
  10. data/ext/decoders/native/etc.c +271 -0
  11. data/ext/decoders/native/etc.h +11 -0
  12. data/ext/decoders/native/extconf.rb +8 -0
  13. data/ext/decoders/native/main.c +167 -0
  14. data/ext/decoders/native/rgb.c +26 -0
  15. data/ext/decoders/native/rgb.h +8 -0
  16. data/lib/mikunyan/asset.rb +13 -7
  17. data/lib/mikunyan/decoders/image_decoder.rb +40 -201
  18. data/lib/mikunyan/typetrees/00ad972a9b8de1baeacb62e297cbb968.dat +0 -0
  19. data/lib/mikunyan/typetrees/01ccfe05c6fbc7ff03dcf8afa8213ff5.dat +0 -0
  20. data/lib/mikunyan/typetrees/086efb68ee41abe4e98e1ae93ae96290.dat +0 -0
  21. data/lib/mikunyan/typetrees/10355709bc95355f57466913ac850d0b.dat +0 -0
  22. data/lib/mikunyan/typetrees/1e87d82d4fd058509a3c7866db0e7356.dat +0 -0
  23. data/lib/mikunyan/typetrees/26165a24a953362edb6a7078f6536c4b.dat +0 -0
  24. data/lib/mikunyan/typetrees/266d53113fa30d2b858f2768f92eaa14.dat +0 -0
  25. data/lib/mikunyan/typetrees/2d2b1d63eb2a68ed94bbf7f50fc21d7b.dat +0 -0
  26. data/lib/mikunyan/typetrees/434b934f757d042e20f52d8c2ae20843.dat +0 -0
  27. data/lib/mikunyan/typetrees/486ba4e15dbd6aea8ac1a064305889c8.dat +0 -0
  28. data/lib/mikunyan/typetrees/49ff511929094ac12ffaa4ab38ed7bd1.dat +0 -0
  29. data/lib/mikunyan/typetrees/4dbfaa1def6adb569b550804b19b4305.dat +0 -0
  30. data/lib/mikunyan/typetrees/5bc42b93159267aabba724a6a7923603.dat +0 -0
  31. data/lib/mikunyan/typetrees/66405447c6973a81e978410c391172fe.dat +0 -0
  32. data/lib/mikunyan/typetrees/6932d6d1d46264c8680a181056f98be2.dat +0 -0
  33. data/lib/mikunyan/typetrees/6974f6c74321933ec4ba7437a55be2c3.dat +0 -0
  34. data/lib/mikunyan/typetrees/69b01db128625aa95f1f92fb890ff045.dat +0 -0
  35. data/lib/mikunyan/typetrees/6f10d8f832d5adde6982d4515b3f0bb3.dat +0 -0
  36. data/lib/mikunyan/typetrees/761ca81f78491542badc37f810ab3455.dat +0 -0
  37. data/lib/mikunyan/typetrees/76ce55d4dbaf38f5c674ea9f0a344951.dat +0 -0
  38. data/lib/mikunyan/typetrees/7e050781d08ca9d10bc74beb7e91c3b5.dat +0 -0
  39. data/lib/mikunyan/typetrees/8198e72b2e2a96b9cfa38636b5565e13.dat +0 -0
  40. data/lib/mikunyan/typetrees/84c6ac46ef89030991cbbb3fd21d2889.dat +0 -0
  41. data/lib/mikunyan/typetrees/852794becbcf95f66992da2b96a69704.dat +0 -0
  42. data/lib/mikunyan/typetrees/961be27d12d60b1b3421191d5256a876.dat +0 -0
  43. data/lib/mikunyan/typetrees/96a47566b4e135078f690a4a69935d58.dat +0 -0
  44. data/lib/mikunyan/typetrees/97da5f4688e45a57c8b42d4f42497297.dat +0 -0
  45. data/lib/mikunyan/typetrees/97ec0712102a3ea3f1cf8c0a4e47c070.dat +0 -0
  46. data/lib/mikunyan/typetrees/9eabac6ec66ffe818e008883728fcc1b.dat +0 -0
  47. data/lib/mikunyan/typetrees/a372646834bcaf26eab1d21b29e39553.dat +0 -0
  48. data/lib/mikunyan/typetrees/a4f194097b08bc4c5019c3a4ea6f5cbd.dat +0 -0
  49. data/lib/mikunyan/typetrees/af863b6969b9b82be9450f0574339f65.dat +0 -0
  50. data/lib/mikunyan/typetrees/b0adafbe24f8148ebf01794ee6679925.dat +0 -0
  51. data/lib/mikunyan/typetrees/b14bcb0865632d1b2d6e215a000e4c0f.dat +0 -0
  52. data/lib/mikunyan/typetrees/b35bf02952f2946208ff6b4deca3a6a9.dat +0 -0
  53. data/lib/mikunyan/typetrees/b6bbd0e88d1feb636d89bd766ea5934f.dat +0 -0
  54. data/lib/mikunyan/typetrees/b78821b6aeb5b79c8961728a9f068024.dat +0 -0
  55. data/lib/mikunyan/typetrees/bea915a8ab3d9b55e80c969a22e692d3.dat +0 -0
  56. data/lib/mikunyan/typetrees/c184743520186f546000de20f4d19736.dat +0 -0
  57. data/lib/mikunyan/typetrees/d50ed13362e98df8096b2f735131fce5.dat +0 -0
  58. data/lib/mikunyan/typetrees/d871346d990bbc294d02f4c366bf1b6d.dat +0 -0
  59. data/lib/mikunyan/typetrees/d8e8eeb43589ccd7019398e56f6c16b0.dat +0 -0
  60. data/lib/mikunyan/typetrees/daea1bb1bba6613afb2cb001ca8fa0d4.dat +0 -0
  61. data/lib/mikunyan/typetrees/db088f9c2f2224da9f488879467856e5.dat +0 -0
  62. data/lib/mikunyan/typetrees/e7c5c01b0369574e9346ce846e1e8e63.dat +0 -0
  63. data/lib/mikunyan/typetrees/f123b055a61dfa7dc679d78cdaecd383.dat +0 -0
  64. data/lib/mikunyan/typetrees/f92d618c5266ea3a8ca770b6eca728c8.dat +0 -0
  65. data/lib/mikunyan/typetrees/fad2d0a58e9174708176102b418facf1.dat +0 -0
  66. data/lib/mikunyan/typetrees/ff001a2e51937aa5add9eaf9cd3d8ae4.dat +0 -0
  67. data/lib/mikunyan/version.rb +1 -1
  68. data/mikunyan.gemspec +1 -0
  69. metadata +63 -4
  70. data/lib/mikunyan/decoders/astc_block_decoder.rb +0 -526
@@ -1,4 +1,4 @@
1
1
  module Mikunyan
2
2
  # version string
3
- VERSION = "3.9.4"
3
+ VERSION = "3.9.5"
4
4
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.bindir = "exe"
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
+ spec.extensions = ["ext/decoders/native/extconf.rb"]
23
24
 
24
25
  spec.add_dependency 'extlz4', '~> 0'
25
26
  spec.add_dependency 'bin_utils', '~> 0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mikunyan
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.4
4
+ version: 3.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ishotihadus
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-31 00:00:00.000000000 Z
11
+ date: 2018-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: extlz4
@@ -100,7 +100,8 @@ email:
100
100
  executables:
101
101
  - mikunyan-image
102
102
  - mikunyan-json
103
- extensions: []
103
+ extensions:
104
+ - ext/decoders/native/extconf.rb
104
105
  extra_rdoc_files: []
105
106
  files:
106
107
  - ".gitignore"
@@ -113,24 +114,35 @@ files:
113
114
  - bin/setup
114
115
  - exe/mikunyan-image
115
116
  - exe/mikunyan-json
117
+ - ext/decoders/native/astc.c
118
+ - ext/decoders/native/astc.h
119
+ - ext/decoders/native/dxtc.c
120
+ - ext/decoders/native/dxtc.h
121
+ - ext/decoders/native/etc.c
122
+ - ext/decoders/native/etc.h
123
+ - ext/decoders/native/extconf.rb
124
+ - ext/decoders/native/main.c
125
+ - ext/decoders/native/rgb.c
126
+ - ext/decoders/native/rgb.h
116
127
  - lib/mikunyan.rb
117
128
  - lib/mikunyan/asset.rb
118
129
  - lib/mikunyan/asset_bundle.rb
119
130
  - lib/mikunyan/binary_reader.rb
120
131
  - lib/mikunyan/constants.rb
121
132
  - lib/mikunyan/decoders.rb
122
- - lib/mikunyan/decoders/astc_block_decoder.rb
123
133
  - lib/mikunyan/decoders/image_decoder.rb
124
134
  - lib/mikunyan/object_value.rb
125
135
  - lib/mikunyan/type_tree.rb
126
136
  - lib/mikunyan/typetrees/0005ee889bd7f6b79a25da117f739c52.dat
127
137
  - lib/mikunyan/typetrees/005cae4626b69aa0d1bd6fd3677642d0.dat
128
138
  - lib/mikunyan/typetrees/0065ac6da4da61da4e46189f1b77b002.dat
139
+ - lib/mikunyan/typetrees/00ad972a9b8de1baeacb62e297cbb968.dat
129
140
  - lib/mikunyan/typetrees/00b2dd52d07280ff931ca2ce840c6c5f.dat
130
141
  - lib/mikunyan/typetrees/00f3fced245b297f9ac50a0d4903fb6a.dat
131
142
  - lib/mikunyan/typetrees/01053c13f5acc24d9236a5e6e7e1410d.dat
132
143
  - lib/mikunyan/typetrees/01266d578502b6b76488f3bd3d604eef.dat
133
144
  - lib/mikunyan/typetrees/016a05ed91534852640fa073275aca15.dat
145
+ - lib/mikunyan/typetrees/01ccfe05c6fbc7ff03dcf8afa8213ff5.dat
134
146
  - lib/mikunyan/typetrees/02121256d773b25c5090287b274c2b00.dat
135
147
  - lib/mikunyan/typetrees/02151504e19732024609e7cca6c0fc96.dat
136
148
  - lib/mikunyan/typetrees/026979ad7a2cb1623d33ebc2dcb307bc.dat
@@ -155,6 +167,7 @@ files:
155
167
  - lib/mikunyan/typetrees/0816a72ba3f00b1bb13b23f8799619af.dat
156
168
  - lib/mikunyan/typetrees/0827148b052dd69232c20460ddde3d1a.dat
157
169
  - lib/mikunyan/typetrees/0857307b3a8cb783c311d8ff42959462.dat
170
+ - lib/mikunyan/typetrees/086efb68ee41abe4e98e1ae93ae96290.dat
158
171
  - lib/mikunyan/typetrees/087e32a39c822978a1c5e410162b381b.dat
159
172
  - lib/mikunyan/typetrees/08a0f671ed575df2b956a9523f3389b4.dat
160
173
  - lib/mikunyan/typetrees/08b842bfb6779a99abd9772f354c4592.dat
@@ -174,6 +187,7 @@ files:
174
187
  - lib/mikunyan/typetrees/0eb12c7055a972aec53d53a646cc4fec.dat
175
188
  - lib/mikunyan/typetrees/0f7da8d76d164df704e661b2f926d0ba.dat
176
189
  - lib/mikunyan/typetrees/0fdbf6896f263df755a7392766cd7bd5.dat
190
+ - lib/mikunyan/typetrees/10355709bc95355f57466913ac850d0b.dat
177
191
  - lib/mikunyan/typetrees/1047dc8a46bd55bbc47ee36971fbc899.dat
178
192
  - lib/mikunyan/typetrees/1101c105388a97c11253c9138a48b054.dat
179
193
  - lib/mikunyan/typetrees/116f6e5f5e2f9936f14b3e7afdaeebe0.dat
@@ -221,6 +235,7 @@ files:
221
235
  - lib/mikunyan/typetrees/1e347d6a49dd26eca64146d8d1629c16.dat
222
236
  - lib/mikunyan/typetrees/1e831f2ccbb8f0cceabd75e4ae614edd.dat
223
237
  - lib/mikunyan/typetrees/1e8486720809f1f1134ad46a75855191.dat
238
+ - lib/mikunyan/typetrees/1e87d82d4fd058509a3c7866db0e7356.dat
224
239
  - lib/mikunyan/typetrees/1eaa927fe597a5c984688ede0d7e0c46.dat
225
240
  - lib/mikunyan/typetrees/1ebcb3bc9f2a38130d9e3274f3c00201.dat
226
241
  - lib/mikunyan/typetrees/1ef8dc1e91e0cd01bd07036e6665ea40.dat
@@ -255,6 +270,8 @@ files:
255
270
  - lib/mikunyan/typetrees/24e89a7207828509d5c5875a93b2106e.dat
256
271
  - lib/mikunyan/typetrees/252b1dbbc4b7cfed2594e04d6ff33e9a.dat
257
272
  - lib/mikunyan/typetrees/255352c3db1172a6a9c5c2605486d937.dat
273
+ - lib/mikunyan/typetrees/26165a24a953362edb6a7078f6536c4b.dat
274
+ - lib/mikunyan/typetrees/266d53113fa30d2b858f2768f92eaa14.dat
258
275
  - lib/mikunyan/typetrees/26b86854c33bca2efc9692ce14f5966d.dat
259
276
  - lib/mikunyan/typetrees/26edfe99eae8bb02d8148494ac056b19.dat
260
277
  - lib/mikunyan/typetrees/2706c8356160cd6aaa396532b3ce39ab.dat
@@ -283,6 +300,7 @@ files:
283
300
  - lib/mikunyan/typetrees/2bf1eebd069f0d939216d45cc299be85.dat
284
301
  - lib/mikunyan/typetrees/2c303ef7be71806aaffa0121527d7fea.dat
285
302
  - lib/mikunyan/typetrees/2d0f68bd23c44c2815f9d5376ace084f.dat
303
+ - lib/mikunyan/typetrees/2d2b1d63eb2a68ed94bbf7f50fc21d7b.dat
286
304
  - lib/mikunyan/typetrees/2d33f228d257f7b0b88c98914786292c.dat
287
305
  - lib/mikunyan/typetrees/2da9c96f9efc8b31a480d5b8858755f3.dat
288
306
  - lib/mikunyan/typetrees/2dbcc357c62060bea7491f02a0a3d0fa.dat
@@ -359,6 +377,7 @@ files:
359
377
  - lib/mikunyan/typetrees/41cdd7329b57ba13590d9321a595218f.dat
360
378
  - lib/mikunyan/typetrees/41fae1321bd7ad1650d7cecc8b7738f4.dat
361
379
  - lib/mikunyan/typetrees/42cb37e0be59eee623e414924928a40b.dat
380
+ - lib/mikunyan/typetrees/434b934f757d042e20f52d8c2ae20843.dat
362
381
  - lib/mikunyan/typetrees/43688f077be008681d7eb9c994a18319.dat
363
382
  - lib/mikunyan/typetrees/43796121850ca62303af099e74b78099.dat
364
383
  - lib/mikunyan/typetrees/439e66a89c7fdef6f0927c9256c0773a.dat
@@ -377,10 +396,12 @@ files:
377
396
  - lib/mikunyan/typetrees/47ec19649a1286158a8473b98a437ad9.dat
378
397
  - lib/mikunyan/typetrees/4837f860c05f8a94a4f956b92e3dad20.dat
379
398
  - lib/mikunyan/typetrees/4855c8964e40430d995b0b5a16b06c29.dat
399
+ - lib/mikunyan/typetrees/486ba4e15dbd6aea8ac1a064305889c8.dat
380
400
  - lib/mikunyan/typetrees/486fa2a06d3c4322486ff9d1ae9a91d8.dat
381
401
  - lib/mikunyan/typetrees/48d16bd72d4e00f18fcf7f164ca78fcf.dat
382
402
  - lib/mikunyan/typetrees/4978b2bc5bfb76f1d26d687ea1bd8be3.dat
383
403
  - lib/mikunyan/typetrees/49bb43122aea696618d75afae92c2b3d.dat
404
+ - lib/mikunyan/typetrees/49ff511929094ac12ffaa4ab38ed7bd1.dat
384
405
  - lib/mikunyan/typetrees/4b93aa1a138b912b0c421019169acf04.dat
385
406
  - lib/mikunyan/typetrees/4bb640239fe9179b3fe914ef2ad73248.dat
386
407
  - lib/mikunyan/typetrees/4bfc6b1eb274517782a296ebc8d1af84.dat
@@ -390,6 +411,7 @@ files:
390
411
  - lib/mikunyan/typetrees/4c9efaab9658908236c454765ba987c8.dat
391
412
  - lib/mikunyan/typetrees/4d47eb52c44b5042b1d33f9885218658.dat
392
413
  - lib/mikunyan/typetrees/4da3f794df175c929b97594573801119.dat
414
+ - lib/mikunyan/typetrees/4dbfaa1def6adb569b550804b19b4305.dat
393
415
  - lib/mikunyan/typetrees/4e2656508795cad0cb5c8aa02bd550b6.dat
394
416
  - lib/mikunyan/typetrees/4e3ad1f5059719dbf410367459b499a5.dat
395
417
  - lib/mikunyan/typetrees/4e588b6332554634ea7e07f6680f0582.dat
@@ -424,6 +446,7 @@ files:
424
446
  - lib/mikunyan/typetrees/5aa0b5d1e3115ca6e2087ab05a7bba32.dat
425
447
  - lib/mikunyan/typetrees/5b1b6bf0de1c285996cbfcf535f79a8b.dat
426
448
  - lib/mikunyan/typetrees/5bbb1d896df4d71b93d2eb023283c967.dat
449
+ - lib/mikunyan/typetrees/5bc42b93159267aabba724a6a7923603.dat
427
450
  - lib/mikunyan/typetrees/5bcd76d798e7b9f2f3ffd398fd2aa6d0.dat
428
451
  - lib/mikunyan/typetrees/5be518883c8348ae95891bc413f25d9a.dat
429
452
  - lib/mikunyan/typetrees/5c5443aa48dc982498dc45b407dd366c.dat
@@ -461,6 +484,7 @@ files:
461
484
  - lib/mikunyan/typetrees/64eff32a9399a62c0c1ff38ffc206094.dat
462
485
  - lib/mikunyan/typetrees/657663fcc23615b4f420398b9cf66800.dat
463
486
  - lib/mikunyan/typetrees/65d43587d7c352e4bd0630c5e2d2b298.dat
487
+ - lib/mikunyan/typetrees/66405447c6973a81e978410c391172fe.dat
464
488
  - lib/mikunyan/typetrees/66699f4e7c97d82ff8b9383b2509b87e.dat
465
489
  - lib/mikunyan/typetrees/668204d5ecec40adf49520ed6a9025d2.dat
466
490
  - lib/mikunyan/typetrees/66c04efe53dbe7127cfdf869a8f95b15.dat
@@ -476,7 +500,10 @@ files:
476
500
  - lib/mikunyan/typetrees/6883009ec58a82ea61000b9c42c5c162.dat
477
501
  - lib/mikunyan/typetrees/68d2447015cd020e38d89e52e297f90b.dat
478
502
  - lib/mikunyan/typetrees/68dffa1eee93c91703996387b600aa7e.dat
503
+ - lib/mikunyan/typetrees/6932d6d1d46264c8680a181056f98be2.dat
504
+ - lib/mikunyan/typetrees/6974f6c74321933ec4ba7437a55be2c3.dat
479
505
  - lib/mikunyan/typetrees/69930e70a6ce1751fde0232474bd6ee0.dat
506
+ - lib/mikunyan/typetrees/69b01db128625aa95f1f92fb890ff045.dat
480
507
  - lib/mikunyan/typetrees/69c8dbb0802cc4bc9be68d5c7309b764.dat
481
508
  - lib/mikunyan/typetrees/69d2caf8f9638b6169d920c89d9ef16f.dat
482
509
  - lib/mikunyan/typetrees/6a315ab47bbb18fc937ba08523937b61.dat
@@ -502,6 +529,7 @@ files:
502
529
  - lib/mikunyan/typetrees/6ed2fb56a9c16fd1781896a923bc5110.dat
503
530
  - lib/mikunyan/typetrees/6ef34d0e751e6b1699a5ea302b822e33.dat
504
531
  - lib/mikunyan/typetrees/6f0618d26354f0289c7090aaf688981a.dat
532
+ - lib/mikunyan/typetrees/6f10d8f832d5adde6982d4515b3f0bb3.dat
505
533
  - lib/mikunyan/typetrees/6f5cd06250f9dcc3ca6c3bca26c54a4a.dat
506
534
  - lib/mikunyan/typetrees/6fe7137b38c0f129e598c03aabcd1b7d.dat
507
535
  - lib/mikunyan/typetrees/706686d4d71b0e1bf7c80acdaa4ee6f5.dat
@@ -527,8 +555,10 @@ files:
527
555
  - lib/mikunyan/typetrees/75d2f1d383a6d305cf13e74d9fbcbe27.dat
528
556
  - lib/mikunyan/typetrees/75e5f675169cf0850fafafa08a65cb38.dat
529
557
  - lib/mikunyan/typetrees/7602eb8dc1aab6b53a21f0eec61dcf50.dat
558
+ - lib/mikunyan/typetrees/761ca81f78491542badc37f810ab3455.dat
530
559
  - lib/mikunyan/typetrees/762765b0cbe6e45e90e5327a46f736f3.dat
531
560
  - lib/mikunyan/typetrees/766ecf7bc48297e7896ab27f26a20718.dat
561
+ - lib/mikunyan/typetrees/76ce55d4dbaf38f5c674ea9f0a344951.dat
532
562
  - lib/mikunyan/typetrees/76f4b627feb164db63eb7309397cc41c.dat
533
563
  - lib/mikunyan/typetrees/774f723655447fbac1acb3d6e2efe779.dat
534
564
  - lib/mikunyan/typetrees/77e140a777f2dcacb51121e0a5bd1f53.dat
@@ -558,6 +588,7 @@ files:
558
588
  - lib/mikunyan/typetrees/7d2188e085d3917ebec9a1067d74de59.dat
559
589
  - lib/mikunyan/typetrees/7d7186ff509eeb1be635ead41f130cbb.dat
560
590
  - lib/mikunyan/typetrees/7db9444f76a2b8f439e4581d2274d36b.dat
591
+ - lib/mikunyan/typetrees/7e050781d08ca9d10bc74beb7e91c3b5.dat
561
592
  - lib/mikunyan/typetrees/7e328a225b72b97191b52d631ccf62d2.dat
562
593
  - lib/mikunyan/typetrees/7ec49b5572da843e0e7d21ab5459a2da.dat
563
594
  - lib/mikunyan/typetrees/7ef50d120c6291f8451b25ad8abf0965.dat
@@ -571,6 +602,7 @@ files:
571
602
  - lib/mikunyan/typetrees/80ba7945b19e87c90c6aa46fb4c7b9b2.dat
572
603
  - lib/mikunyan/typetrees/8146f1f01d4bf220c339260799ed1bb6.dat
573
604
  - lib/mikunyan/typetrees/818ddfe606de30c07daa36d729f982e2.dat
605
+ - lib/mikunyan/typetrees/8198e72b2e2a96b9cfa38636b5565e13.dat
574
606
  - lib/mikunyan/typetrees/81d6f63da53d28f32efd4d3f6b1d3da8.dat
575
607
  - lib/mikunyan/typetrees/81e28d3a4102fabc98ac701e6a192ad4.dat
576
608
  - lib/mikunyan/typetrees/827f095b42d421f9185c642342736534.dat
@@ -584,6 +616,8 @@ files:
584
616
  - lib/mikunyan/typetrees/8473edbc0acb04069b62cedcb384b5b3.dat
585
617
  - lib/mikunyan/typetrees/849b9d0ee2b45ed2b7ad871a6e9e7829.dat
586
618
  - lib/mikunyan/typetrees/849d2b6794bdc167b0ed4680bad500a8.dat
619
+ - lib/mikunyan/typetrees/84c6ac46ef89030991cbbb3fd21d2889.dat
620
+ - lib/mikunyan/typetrees/852794becbcf95f66992da2b96a69704.dat
587
621
  - lib/mikunyan/typetrees/863223fe4e4f151f9fac463e584de569.dat
588
622
  - lib/mikunyan/typetrees/86897fc97905918dc891437fa7a15696.dat
589
623
  - lib/mikunyan/typetrees/86d77ad7cf81dd25dd72cba6c8c6469f.dat
@@ -630,13 +664,17 @@ files:
630
664
  - lib/mikunyan/typetrees/94d6c861f2b382fd81a12d2a1b1e7ce2.dat
631
665
  - lib/mikunyan/typetrees/954706197f5ed745cd14444d281f1516.dat
632
666
  - lib/mikunyan/typetrees/959ce281abde8687d3ab1adce9e00f5a.dat
667
+ - lib/mikunyan/typetrees/961be27d12d60b1b3421191d5256a876.dat
633
668
  - lib/mikunyan/typetrees/964c223b82bb8bac12cd3e53186a3e13.dat
634
669
  - lib/mikunyan/typetrees/9657457af3bc45d81a0b5871a0d18e77.dat
635
670
  - lib/mikunyan/typetrees/96785e58aac89a09fce6ca2c9448311b.dat
671
+ - lib/mikunyan/typetrees/96a47566b4e135078f690a4a69935d58.dat
636
672
  - lib/mikunyan/typetrees/96bc046967bdbe77c417e21eb49ce1ae.dat
637
673
  - lib/mikunyan/typetrees/96c46d945b3cc21e2a5ca09659ae4ef2.dat
638
674
  - lib/mikunyan/typetrees/974cb1de01d7acb61e52fe38b84e0ee0.dat
675
+ - lib/mikunyan/typetrees/97da5f4688e45a57c8b42d4f42497297.dat
639
676
  - lib/mikunyan/typetrees/97dc11471130df660f6d50adbeb2d686.dat
677
+ - lib/mikunyan/typetrees/97ec0712102a3ea3f1cf8c0a4e47c070.dat
640
678
  - lib/mikunyan/typetrees/9805cf0348f163ad092ab00ca9d122d1.dat
641
679
  - lib/mikunyan/typetrees/983db003d56cd893ea50a9b80e743a79.dat
642
680
  - lib/mikunyan/typetrees/99359255da094b94c150311921ba4420.dat
@@ -656,6 +694,7 @@ files:
656
694
  - lib/mikunyan/typetrees/9d1630b1d7e3bc24abe46e5860a2a179.dat
657
695
  - lib/mikunyan/typetrees/9e0ab8d396f3249a3958dd930f81f61b.dat
658
696
  - lib/mikunyan/typetrees/9e26f96591d351c8dfe911b5dc239000.dat
697
+ - lib/mikunyan/typetrees/9eabac6ec66ffe818e008883728fcc1b.dat
659
698
  - lib/mikunyan/typetrees/9ec70d7af96c9625d1bfca15d188b85c.dat
660
699
  - lib/mikunyan/typetrees/9ee328006f16e91aebcb4f27698f145a.dat
661
700
  - lib/mikunyan/typetrees/9f1c6f94c1da7e8f10bb554b37c6790b.dat
@@ -677,6 +716,7 @@ files:
677
716
  - lib/mikunyan/typetrees/a2dc9dbb5b830efd10b60100b47d8d36.dat
678
717
  - lib/mikunyan/typetrees/a3125dde8c910a6d078682616f144a80.dat
679
718
  - lib/mikunyan/typetrees/a3523f5739a17bb6054dde6c088584ce.dat
719
+ - lib/mikunyan/typetrees/a372646834bcaf26eab1d21b29e39553.dat
680
720
  - lib/mikunyan/typetrees/a3c506becc8f7d25351b47778de7ebb5.dat
681
721
  - lib/mikunyan/typetrees/a3d63d57b4f43b62a77e83e05699a5f6.dat
682
722
  - lib/mikunyan/typetrees/a439ae65edce4289e3ff832904fea27d.dat
@@ -684,6 +724,7 @@ files:
684
724
  - lib/mikunyan/typetrees/a46a51168885aa63162102ca3f63007a.dat
685
725
  - lib/mikunyan/typetrees/a47e8a7b7a1ef3aba7372439af5d26a7.dat
686
726
  - lib/mikunyan/typetrees/a49b27a93f3de2ad5ef668735e5042b2.dat
727
+ - lib/mikunyan/typetrees/a4f194097b08bc4c5019c3a4ea6f5cbd.dat
687
728
  - lib/mikunyan/typetrees/a52792d409265e0e596cf29f070ecb5d.dat
688
729
  - lib/mikunyan/typetrees/a545a5020d58adc9f675e7c540cc8528.dat
689
730
  - lib/mikunyan/typetrees/a5610d8eea1dd355fe6d1abe467ef169.dat
@@ -713,10 +754,13 @@ files:
713
754
  - lib/mikunyan/typetrees/ae12c8f4663719b3d423361a8b8a62d2.dat
714
755
  - lib/mikunyan/typetrees/aeadce2965a198a87587c0beac675004.dat
715
756
  - lib/mikunyan/typetrees/aeeebbdbd802239fdfc3aaf98ffc5d01.dat
757
+ - lib/mikunyan/typetrees/af863b6969b9b82be9450f0574339f65.dat
716
758
  - lib/mikunyan/typetrees/af9a16c5c3d9f5104290fff6305334e2.dat
717
759
  - lib/mikunyan/typetrees/aff142075870161380a891d11baeb767.dat
718
760
  - lib/mikunyan/typetrees/b093ef1cb958a6b1cf5a00c31b6e05c4.dat
761
+ - lib/mikunyan/typetrees/b0adafbe24f8148ebf01794ee6679925.dat
719
762
  - lib/mikunyan/typetrees/b0f22973848e1cf655dfdf8064bfa400.dat
763
+ - lib/mikunyan/typetrees/b14bcb0865632d1b2d6e215a000e4c0f.dat
720
764
  - lib/mikunyan/typetrees/b1fe84b5bfdc47e2b1b930db296afb2f.dat
721
765
  - lib/mikunyan/typetrees/b20231c215c4c1b82b98bb49418c5cbe.dat
722
766
  - lib/mikunyan/typetrees/b204c22c22b1a08f780435c2cb4e6e36.dat
@@ -729,6 +773,7 @@ files:
729
773
  - lib/mikunyan/typetrees/b31c04cde0ffadc258d46846966594b1.dat
730
774
  - lib/mikunyan/typetrees/b3290db9f9d2e2862a1367d32838130e.dat
731
775
  - lib/mikunyan/typetrees/b354679381971a70db4d0035cc730543.dat
776
+ - lib/mikunyan/typetrees/b35bf02952f2946208ff6b4deca3a6a9.dat
732
777
  - lib/mikunyan/typetrees/b36337bd6d2e99167473b8a383361c21.dat
733
778
  - lib/mikunyan/typetrees/b38ca8dbedd791b7ca3ca07095a9f312.dat
734
779
  - lib/mikunyan/typetrees/b38d9554723d82e3bc95c076ca902704.dat
@@ -738,8 +783,10 @@ files:
738
783
  - lib/mikunyan/typetrees/b51e06b75a0e28a9f2f242726a3814d4.dat
739
784
  - lib/mikunyan/typetrees/b53f2d12e7a6d302f50ad4162070fe13.dat
740
785
  - lib/mikunyan/typetrees/b684fb202e70b6d6c9fa64988e29576e.dat
786
+ - lib/mikunyan/typetrees/b6bbd0e88d1feb636d89bd766ea5934f.dat
741
787
  - lib/mikunyan/typetrees/b6cc407b2d3c753bf79661a477113977.dat
742
788
  - lib/mikunyan/typetrees/b7056b24cf06fc6058b412a2c2dad2bb.dat
789
+ - lib/mikunyan/typetrees/b78821b6aeb5b79c8961728a9f068024.dat
743
790
  - lib/mikunyan/typetrees/b79aed1f22f656993386add127833156.dat
744
791
  - lib/mikunyan/typetrees/b7b8ff0c7ec96a3bd77eabf9525d4f06.dat
745
792
  - lib/mikunyan/typetrees/b7d7910ac57c74d889686f738faa2129.dat
@@ -771,11 +818,13 @@ files:
771
818
  - lib/mikunyan/typetrees/be521590c2a7e119c31979e36c98789e.dat
772
819
  - lib/mikunyan/typetrees/be9c29138eea51e485e58ae7d0ee5eda.dat
773
820
  - lib/mikunyan/typetrees/bea7fa6dbf25a492093fec0b0b12c49f.dat
821
+ - lib/mikunyan/typetrees/bea915a8ab3d9b55e80c969a22e692d3.dat
774
822
  - lib/mikunyan/typetrees/bf70bb56d86ace6047252688d663d8c4.dat
775
823
  - lib/mikunyan/typetrees/bf9dd695d7f2b4c1f07279f58362d4a5.dat
776
824
  - lib/mikunyan/typetrees/bfc41466cf63095c9a89e4defeea56f5.dat
777
825
  - lib/mikunyan/typetrees/c097c2178bc05715274a8513f32f5e2d.dat
778
826
  - lib/mikunyan/typetrees/c135fdff1ecf351ff2968c0c575a93fc.dat
827
+ - lib/mikunyan/typetrees/c184743520186f546000de20f4d19736.dat
779
828
  - lib/mikunyan/typetrees/c1bd7854033214a22ac0e141089fbb2d.dat
780
829
  - lib/mikunyan/typetrees/c1e394cb8e3b83562307194fb6d429af.dat
781
830
  - lib/mikunyan/typetrees/c2c15e3018e440dfbc88ab67b75f4c1d.dat
@@ -839,6 +888,7 @@ files:
839
888
  - lib/mikunyan/typetrees/d463e5d17a1b3f4e2e2f1eb758afc38e.dat
840
889
  - lib/mikunyan/typetrees/d49ddfcb81983289b99cecbffd99d8d2.dat
841
890
  - lib/mikunyan/typetrees/d4e580aaf357b26f4871f454ab582ad2.dat
891
+ - lib/mikunyan/typetrees/d50ed13362e98df8096b2f735131fce5.dat
842
892
  - lib/mikunyan/typetrees/d5b7bfdef1a7f9dcf49d5de2c66fb8fd.dat
843
893
  - lib/mikunyan/typetrees/d5d86f79c1252a3e0a705f20245b62b8.dat
844
894
  - lib/mikunyan/typetrees/d5e4d09396f117b44668f6c8641951fc.dat
@@ -856,7 +906,9 @@ files:
856
906
  - lib/mikunyan/typetrees/d8129cfedf80a401fc1b3ce0483b6193.dat
857
907
  - lib/mikunyan/typetrees/d819fe24897f62ed37bcd142f64cec80.dat
858
908
  - lib/mikunyan/typetrees/d82c324c1e384bdc4d7aabbdbf8dd810.dat
909
+ - lib/mikunyan/typetrees/d871346d990bbc294d02f4c366bf1b6d.dat
859
910
  - lib/mikunyan/typetrees/d898fab65c5d063bc9112924123b5a04.dat
911
+ - lib/mikunyan/typetrees/d8e8eeb43589ccd7019398e56f6c16b0.dat
860
912
  - lib/mikunyan/typetrees/d8f1b25bf145804bd41da2d64684d605.dat
861
913
  - lib/mikunyan/typetrees/d9333d68827fe2bdc8fa96fe1ce7999e.dat
862
914
  - lib/mikunyan/typetrees/d9b4fdc987ccf6d8f51cad51e0c670c6.dat
@@ -866,7 +918,9 @@ files:
866
918
  - lib/mikunyan/typetrees/da594265aaa32ec1513c20e38a22fa2e.dat
867
919
  - lib/mikunyan/typetrees/da773af1b759eb7b7e78287900688f5d.dat
868
920
  - lib/mikunyan/typetrees/dad240b3d990c591b278699ec10e2713.dat
921
+ - lib/mikunyan/typetrees/daea1bb1bba6613afb2cb001ca8fa0d4.dat
869
922
  - lib/mikunyan/typetrees/dafc7f89ba2f5601cd2526021334cfcd.dat
923
+ - lib/mikunyan/typetrees/db088f9c2f2224da9f488879467856e5.dat
870
924
  - lib/mikunyan/typetrees/db262b9303bf96c55e2659bd9160e777.dat
871
925
  - lib/mikunyan/typetrees/db26e3ff617afe3cca8a02d00552384e.dat
872
926
  - lib/mikunyan/typetrees/dbc0e1ec44a805978e86400d908d4d5a.dat
@@ -914,6 +968,7 @@ files:
914
968
  - lib/mikunyan/typetrees/e6ccb0d2545a8b68470d8d4d75d1f393.dat
915
969
  - lib/mikunyan/typetrees/e70da99ccfbec08ec2d115a9f0ef2fd5.dat
916
970
  - lib/mikunyan/typetrees/e7920ac1d49d79dc3f687686799e0ecb.dat
971
+ - lib/mikunyan/typetrees/e7c5c01b0369574e9346ce846e1e8e63.dat
917
972
  - lib/mikunyan/typetrees/e81731c627c30de466ff682b23d7c632.dat
918
973
  - lib/mikunyan/typetrees/e82f8100e40450d13763382e74934faa.dat
919
974
  - lib/mikunyan/typetrees/e8745221bf0bd118c59f77acbe2de613.dat
@@ -952,6 +1007,7 @@ files:
952
1007
  - lib/mikunyan/typetrees/f0dca30b01b82a4ab96277658e0d881b.dat
953
1008
  - lib/mikunyan/typetrees/f0e0e320fc2816897ac3195551d8e4c5.dat
954
1009
  - lib/mikunyan/typetrees/f0e3106a5e7d38edfe031abc0c11ce2a.dat
1010
+ - lib/mikunyan/typetrees/f123b055a61dfa7dc679d78cdaecd383.dat
955
1011
  - lib/mikunyan/typetrees/f18647acbd67659ea3f45a97872f757b.dat
956
1012
  - lib/mikunyan/typetrees/f1d3f171c0a6aa755d45ffe681516b65.dat
957
1013
  - lib/mikunyan/typetrees/f2357d4424504d3797409ff6565e8e68.dat
@@ -980,12 +1036,14 @@ files:
980
1036
  - lib/mikunyan/typetrees/f811a923135bc4ee86dd31237b2ab06a.dat
981
1037
  - lib/mikunyan/typetrees/f8377d7fe2ca5564e137d9f82a5b7fe5.dat
982
1038
  - lib/mikunyan/typetrees/f83f9a801dfbac3b28bcee57ff29182f.dat
1039
+ - lib/mikunyan/typetrees/f92d618c5266ea3a8ca770b6eca728c8.dat
983
1040
  - lib/mikunyan/typetrees/f983b0102ccb04ded5fd745943e862be.dat
984
1041
  - lib/mikunyan/typetrees/f9a5bbb8c5391b4f94fc32542ab1f981.dat
985
1042
  - lib/mikunyan/typetrees/faa71a41455d0e928529ff5b0b036af3.dat
986
1043
  - lib/mikunyan/typetrees/fab5d0fd4c471ada3931c6ec7cf983ec.dat
987
1044
  - lib/mikunyan/typetrees/fab9ae76e42df0fda7b88a0b103ac202.dat
988
1045
  - lib/mikunyan/typetrees/face58ace35dbc4d23883cc9f9625a4f.dat
1046
+ - lib/mikunyan/typetrees/fad2d0a58e9174708176102b418facf1.dat
989
1047
  - lib/mikunyan/typetrees/faf23bf08eb2a9759598748b2ed55c7a.dat
990
1048
  - lib/mikunyan/typetrees/fb0635f60817266fc2448281f0e1bf8e.dat
991
1049
  - lib/mikunyan/typetrees/fb734904d47701a0f2042181d6018c2f.dat
@@ -1008,6 +1066,7 @@ files:
1008
1066
  - lib/mikunyan/typetrees/feb462635cb14d7fc886781f76647359.dat
1009
1067
  - lib/mikunyan/typetrees/febce05d662e846d44276cb3ead554a9.dat
1010
1068
  - lib/mikunyan/typetrees/fefc3f27b196eb018086c22cba376f75.dat
1069
+ - lib/mikunyan/typetrees/ff001a2e51937aa5add9eaf9cd3d8ae4.dat
1011
1070
  - lib/mikunyan/typetrees/ff382d6c2780a3e68481688cce904104.dat
1012
1071
  - lib/mikunyan/typetrees/ff3a8cf3da343f8722464c416e3479ee.dat
1013
1072
  - lib/mikunyan/typetrees/ff8fa01e9243c910f7d7301b7586a1b1.dat
@@ -1,526 +0,0 @@
1
- require 'bin_utils'
2
- require 'fiddle'
3
-
4
- module Mikunyan
5
- module DecodeHelper
6
- # Class for decode ASTC block
7
- # @attr_reader [String] data decoded data
8
- class AstcBlockDecoder
9
- attr_reader :data
10
-
11
- # Decode block
12
- # @param [String] bin binary
13
- # @param [Integer] bw block width
14
- # @param [Integer] bh block height
15
- def initialize(bin, bw, bh)
16
- if bin[0].ord == 0xfc && bin[1].ord % 2 == 1
17
- @data = (bin[9] + bin[11] + bin[13] + bin[15]) * bw * bh
18
- else
19
- @d2 = BinUtils.get_int64_le(bin)
20
- @d1 = BinUtils.get_int64_le(bin, 8)
21
- @bw = bw
22
- @bh = bh
23
-
24
- decode_block_params
25
- decode_endpoints
26
- decode_weights
27
- select_partition
28
- applicate_color
29
- end
30
- end
31
-
32
- private
33
-
34
- WeightPrecTableA = [nil, nil, 0, 3, 0, 5, 3, 0, nil, nil, 5, 3, 0, 5, 3, 0]
35
- WeightPrecTableB = [nil, nil, 1, 0, 2, 0, 1, 3, nil, nil, 1, 2, 4, 2, 3, 5]
36
-
37
- CemTableA = [0, 0, 3, 0, 5, 3, 0, 5, 3, 0, 5, 3, 0, 5, 3, 0, 5, 3, 0]
38
- CemTableB = [1, 2, 1, 3, 1, 2, 4, 2, 3, 5, 3, 4, 6, 4, 5, 7, 5, 6, 8]
39
-
40
- TritsTable = [
41
- [0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 1, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 1, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 0, 1, 2, 2],
42
- [0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 0, 0, 0, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1],
43
- [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2],
44
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2],
45
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
46
- ]
47
-
48
- QuintsTable = [
49
- [0, 1, 2, 3, 4, 0, 4, 4, 0, 1, 2, 3, 4, 1, 4, 4, 0, 1, 2, 3, 4, 2, 4, 4, 0, 1, 2, 3, 4, 3, 4, 4, 0, 1, 2, 3, 4, 0, 4, 0, 0, 1, 2, 3, 4, 1, 4, 1, 0, 1, 2, 3, 4, 2, 4, 2, 0, 1, 2, 3, 4, 3, 4, 3, 0, 1, 2, 3, 4, 0, 2, 3, 0, 1, 2, 3, 4, 1, 2, 3, 0, 1, 2, 3, 4, 2, 2, 3, 0, 1, 2, 3, 4, 3, 2, 3, 0, 1, 2, 3, 4, 0, 0, 1, 0, 1, 2, 3, 4, 1, 0, 1, 0, 1, 2, 3, 4, 2, 0, 1, 0, 1, 2, 3, 4, 3, 0, 1],
50
- [0, 0, 0, 0, 0, 4, 4, 4, 1, 1, 1, 1, 1, 4, 4, 4, 2, 2, 2, 2, 2, 4, 4, 4, 3, 3, 3, 3, 3, 4, 4, 4, 0, 0, 0, 0, 0, 4, 0, 4, 1, 1, 1, 1, 1, 4, 1, 4, 2, 2, 2, 2, 2, 4, 2, 4, 3, 3, 3, 3, 3, 4, 3, 4, 0, 0, 0, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 4, 1, 1, 2, 2, 2, 2, 2, 4, 2, 2, 3, 3, 3, 3, 3, 4, 3, 3, 0, 0, 0, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 4, 1, 1, 2, 2, 2, 2, 2, 4, 2, 2, 3, 3, 3, 3, 3, 4, 3, 3],
51
- [0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 3, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4]
52
- ]
53
-
54
- def [](i, j = 1)
55
- if j < 1
56
- 0
57
- elsif j == 1
58
- i < 64 ? @d2[i] : @d1[i - 64]
59
- else
60
- if i + j <= 64
61
- @d2 >> i & (1 << j) - 1
62
- elsif i >= 64
63
- @d1 >> (i - 64) & (1 << j) - 1
64
- else
65
- @d2 >> i | (@d1 & (1 << i + j - 64) - 1) << 64 - i
66
- end
67
- end
68
- end
69
-
70
- def decode_block_params
71
- # Block Mode
72
- @weight_range = @d2 >> 4 & 1 | @d2 >> 6 & 8
73
- @dual_plane = @d2 & 0x400 == 0x400
74
- if @d2 & 0x3 != 0
75
- @weight_range |= @d2 << 1 & 6
76
- case @d2 & 0xc
77
- when 0
78
- @width = (@d2 >> 7 & 3) + 4
79
- @height = (@d2 >> 5 & 3) + 2
80
- when 0x4
81
- @width = (@d2 >> 7 & 3) + 8
82
- @height = (@d2 >> 5 & 3) + 2
83
- when 0x8
84
- @width = (@d2 >> 5 & 3) + 2
85
- @height = (@d2 >> 7 & 3) + 8
86
- else # 0xc
87
- if @d2 & 0x100 == 0
88
- @width = (@d2 >> 5 & 3) + 2
89
- @height = @d2[7] + 6
90
- else
91
- @width = @d2[7] + 2
92
- @height = (@d2 >> 5 & 3) + 2
93
- end
94
- end
95
- else
96
- @weight_range |= @d2 >> 1 & 6
97
- case @d2 & 0x180
98
- when 0
99
- @width = 12
100
- @height = (@d2 >> 5 & 3) + 2
101
- when 0x80
102
- @width = (@d2 >> 5 & 3) + 2
103
- @height = 12
104
- when 0x180
105
- @width = (@d2 & 0x20 == 0) ? 6 : 10
106
- @height = 16 - @width
107
- else # 0x100
108
- @width = (@d2 >> 5 & 3) + 6
109
- @height = (@d2 >> 9 & 3) + 6
110
- @dual_plane = false
111
- @weight_range &= 7
112
- end
113
- end
114
-
115
- # Count Partitions
116
- @part_num = (@d2 >> 11 & 3) + 1
117
-
118
- # Count Weight Bits
119
- @weight_num = @width * @height
120
- @weight_num *= 2 if @dual_plane
121
- case WeightPrecTableA[@weight_range]
122
- when 3
123
- @weight_bit = @weight_num * WeightPrecTableB[@weight_range] + (@weight_num * 8 + 4) / 5
124
- when 5
125
- @weight_bit = @weight_num * WeightPrecTableB[@weight_range] + (@weight_num * 7 + 2) / 3
126
- else # 0
127
- @weight_bit = @weight_num * WeightPrecTableB[@weight_range]
128
- end
129
-
130
- # CEM
131
- if @part_num == 1
132
- @cem = [@d2 >> 13 & 0xf]
133
- config_bit = 17
134
- else
135
- cembase = @d2 >> 23 & 3
136
- if cembase == 0
137
- @cem = Array.new(@part_num, @d2 >> 25 & 0xf)
138
- config_bit = 29
139
- else
140
- @cem = (0...@part_num).map{|i| ((@d2 >> (25 + i) & 1) + cembase - 1) << 2}
141
-
142
- case @part_num
143
- when 2
144
- @cem[0] |= @d2 >> 27 & 3
145
- @cem[1] |= self[126 - @weight_bit, 2]
146
- when 3
147
- @cem[0] |= @d2[28]
148
- @cem[0] |= self[123 - @weight_bit] << 1
149
- @cem[1] |= self[124 - @weight_bit, 2]
150
- @cem[2] |= self[126 - @weight_bit, 2]
151
- else # 4
152
- 4.times do |i|
153
- @cem[i] |= self[120 + 2 * i - @weight_bit, 2]
154
- end
155
- end
156
-
157
- config_bit = 25 + @part_num * 3
158
- end
159
- end
160
-
161
- # Count Color Endpoint Bits
162
- config_bit += 2 if @dual_plane
163
- remain_bit = 128 - config_bit - @weight_bit
164
- @cem_num = @cem.map{|i| (i >> 1 & 6) + 2}.inject(:+)
165
-
166
- CemTableA.count.times do |n|
167
- i = CemTableA.count - n - 1
168
- case CemTableA[i]
169
- when 3
170
- @cem_bit = @cem_num * CemTableB[i] + (@cem_num * 8 + 4) / 5
171
- when 5
172
- @cem_bit = @cem_num * CemTableB[i] + (@cem_num * 7 + 2) / 3
173
- else # 0
174
- @cem_bit = @cem_num * CemTableB[i]
175
- end
176
-
177
- if @cem_bit <= remain_bit
178
- @cem_range = i
179
- break
180
- end
181
- end
182
-
183
- if @dual_plane
184
- if @part_num == 1 || cembase == 0
185
- @plane_selector = self[126 - @weight_bit, 2]
186
- else
187
- @plane_selector = self[130 - @weight_bit - @part_num * 3, 2]
188
- end
189
- end
190
- end
191
-
192
- def decode_endpoints
193
- values = decode_intseq_raw(self[@part_num == 1 ? 17 : 29, @cem_bit], CemTableA[@cem_range], CemTableB[@cem_range], @cem_num).map do |e|
194
- unquantize_endpoint(CemTableA[@cem_range], CemTableB[@cem_range], e[0], e[1])
195
- end
196
-
197
- @endpoint = @cem.map do |cem|
198
- v = values.slice!(0, (cem >> 1 & 6) + 2)
199
- case cem
200
- when 0
201
- [v[0], v[0], v[0], 255, v[1], v[1], v[1], 255]
202
- when 1
203
- l0 = (v[0] >> 2) | (v[1] & 0xc0)
204
- l1 = (l0 + (v[1] & 0x3f)).clamp(0, 255)
205
- [l0, l0, l0, 255, l1, l1, l1, 255]
206
- when 4
207
- [v[0], v[0], v[0], v[2], v[1], v[1], v[1], v[3]]
208
- when 5
209
- v[1], v[0] = bit_transfer_signed(v[1], v[0])
210
- v[3], v[2] = bit_transfer_signed(v[3], v[2])
211
- [v[0], v[0], v[0], v[2], v[0] + v[1], v[0] + v[1], v[0] + v[1], v[2] + v[3]].map{|i| i.clamp(0, 255)}
212
- when 6
213
- [v[0] * v[3] >> 8, v[1] * v[3] >> 8, v[2] * v[3] >> 8, 255, v[0], v[1], v[2], 255]
214
- when 8
215
- if v[0] + v[2] + v[4] <= v[1] + v[3] + v[5]
216
- [v[0], v[2], v[4], 255, v[1], v[3], v[5], 255]
217
- else
218
- blue_contract(v[1], v[3], v[5], 255, v[0], v[2], v[4], 255)
219
- end
220
- when 9
221
- v[1], v[0] = bit_transfer_signed(v[1], v[0])
222
- v[3], v[2] = bit_transfer_signed(v[3], v[2])
223
- v[5], v[4] = bit_transfer_signed(v[5], v[4])
224
- if v[1] + v[3] + v[5] >= 0
225
- [v[0], v[2], v[4], 255, v[0] + v[1], v[2] + v[3], v[4] + v[5], 255].map{|i| i.clamp(0, 255)}
226
- else
227
- blue_contract(v[0] + v[1], v[2] + v[3], v[4] + v[5], 255, v[0], v[2], v[4], 255).map{|i| i.clamp(0, 255)}
228
- end
229
- when 10
230
- [v[0] * v[3] >> 8, v[1] * v[3] >> 8, v[2] * v[3] >> 8, v[4], v[0], v[1], v[2], v[5]]
231
- when 12
232
- if v[0] + v[2] + v[4] <= v[1] + v[3] + v[5]
233
- [v[0], v[2], v[4], v[6], v[1], v[3], v[5], v[7]]
234
- else
235
- blue_contract(v[1], v[3], v[5], v[7], v[0], v[2], v[4], v[6])
236
- end
237
- when 13
238
- v[1], v[0] = bit_transfer_signed(v[1], v[0])
239
- v[3], v[2] = bit_transfer_signed(v[3], v[2])
240
- v[5], v[4] = bit_transfer_signed(v[5], v[4])
241
- v[7], v[6] = bit_transfer_signed(v[7], v[6])
242
- if v[1] + v[3] + v[5] >= 0
243
- [v[0], v[2], v[4], v[6], v[0] + v[1], v[2] + v[3], v[4] + v[5], v[6] + v[7]].map{|i| i.clamp(0, 255)}
244
- else
245
- blue_contract(v[0] + v[1], v[2] + v[3], v[4] + v[5], v[6] + v[7], v[0], v[2], v[4], v[6]).map{|i| i.clamp(0, 255)}
246
- end
247
- else
248
- throw NotImplementedError.new("HDR image is not supported. (CEM: #{cem})")
249
- end
250
- end
251
- end
252
-
253
- def bit_transfer_signed(a, b)
254
- b = (b >> 1) | (a & 0x80)
255
- a = (a >> 1) & 0x3f
256
- [a[5] == 1 ? a - 0x40 : a, b]
257
- end
258
-
259
- def blue_contract(r1, g1, b1, a1, r2, g2, b2, a2)
260
- [(r1 + b1) >> 1, (g1 + b1) >> 1, b1, a1, (r2 + b2) >> 1, (g2 + b2) >> 1, b2, a2]
261
- end
262
-
263
- def decode_weights
264
- data = (0...(@weight_bit + 7) / 8).map{|i| (((self[120 - i * 8, 8]) * 0x80200802) & 0x0884422110) * 0x0101010101 >> 32 & 0xff}
265
- .map.with_index{|e, i| e << i * 8}.inject(:|) & (1 << @weight_bit) - 1
266
-
267
- weight_point = decode_intseq_raw(data, WeightPrecTableA[@weight_range], WeightPrecTableB[@weight_range], @weight_num).map do |e|
268
- unquantize_weight(WeightPrecTableA[@weight_range], WeightPrecTableB[@weight_range], e[0], e[1])
269
- end
270
-
271
- ds = (1024 + @bw / 2) / (@bw - 1)
272
- dt = (1024 + @bh / 2) / (@bh - 1)
273
-
274
- if @dual_plane
275
- @weight0 = Fiddle::Pointer.malloc(@bw * @bh)
276
- @weight1 = Fiddle::Pointer.malloc(@bw * @bh)
277
-
278
- for t in 0...@bh
279
- for s in 0...@bw
280
- gs = (ds * s * (@width - 1) + 32) >> 6
281
- gt = (dt * t * (@height - 1) + 32) >> 6
282
- fs = gs & 0xf
283
- ft = gt & 0xf
284
- v = (gs >> 4) + (gt >> 4) * @width
285
- w11 = (fs * ft + 8) >> 4
286
- w10 = ft - w11
287
- w01 = fs - w11
288
- w00 = 16 - fs - ft + w11
289
-
290
- p00 = weight_point[v * 2] || 0
291
- p01 = weight_point[(v + 1) * 2] || 0
292
- p10 = weight_point[(v + @width) * 2] || 0
293
- p11 = weight_point[(v + @width + 1) * 2] || 0
294
- @weight0[s + t * @bw] = (p00 * w00 + p01 * w01 + p10 * w10 + p11 * w11 + 8) >> 4
295
-
296
- p00 = weight_point[v * 2 + 1] || 0
297
- p01 = weight_point[(v + 1) * 2 + 1] || 0
298
- p10 = weight_point[(v + @width) * 2 + 1] || 0
299
- p11 = weight_point[(v + @width + 1) * 2 + 1] || 0
300
- @weight1[s + t * @bw] = (p00 * w00 + p01 * w01 + p10 * w10 + p11 * w11 + 8) >> 4
301
- end
302
- end
303
- else
304
- @weight = Fiddle::Pointer.malloc(@bw * @bh)
305
-
306
- for t in 0...@bh
307
- for s in 0...@bw
308
- gs = (ds * s * (@width - 1) + 32) >> 6
309
- gt = (dt * t * (@height - 1) + 32) >> 6
310
- fs = gs & 0xf
311
- ft = gt & 0xf
312
- v = (gs >> 4) + (gt >> 4) * @width
313
- w11 = (fs * ft + 8) >> 4
314
-
315
- p00 = weight_point[v] || 0
316
- p01 = weight_point[v + 1] || 0
317
- p10 = weight_point[v + @width] || 0
318
- p11 = weight_point[v + @width + 1] || 0
319
- @weight[s + t * @bw] = (p00 * (16 - fs - ft + w11) + p01 * (fs - w11) + p10 * (ft - w11) + p11 * w11 + 8) >> 4
320
- end
321
- end
322
- end
323
- end
324
-
325
- def select_partition
326
- if @part_num > 1
327
- small_block = @bw * @bh < 31
328
-
329
- seed = (@d2 >> 13 & 0x3ff) | ((@part_num - 1) << 10)
330
-
331
- rnum = seed
332
- rnum ^= (rnum >> 15)
333
- rnum = (rnum - (rnum << 17)) & 0xffffffff
334
- rnum = (rnum + (rnum << 7)) & 0xffffffff
335
- rnum = (rnum + (rnum << 4)) & 0xffffffff
336
- rnum ^= rnum >> 5
337
- rnum = (rnum + (rnum << 16)) & 0xffffffff
338
- rnum ^= rnum >> 7
339
- rnum ^= rnum >> 3
340
- rnum = (rnum ^ (rnum << 6)) & 0xffffffff
341
- rnum = rnum ^ (rnum >> 17)
342
-
343
- seeds = [0, 4, 8, 12, 16, 20, 24, 28].map{|i| (rnum >> i) & 0xf}.map!{|e| e * e}
344
- sh = [seed & 2 == 2 ? 4 : 5, @part_num == 3 ? 6 : 5]
345
- sh.reverse! if seed & 1 == 0
346
- seeds.map!.with_index{|e, i| e >> sh[i % 2]}
347
-
348
- @partition = (0...@bw * @bh).map do |i|
349
- x = i % @bw
350
- y = i / @bw
351
- if small_block
352
- x <<= 1
353
- y <<= 1
354
- end
355
-
356
- a = (seeds[0] * x + seeds[1] * y + (rnum >> 14)) & 0x3f
357
- b = (seeds[2] * x + seeds[3] * y + (rnum >> 10)) & 0x3f
358
- c = @part_num < 3 ? 0 : (seeds[4] * x + seeds[5] * y + (rnum >> 6)) & 0x3f
359
- d = @part_num < 4 ? 0 : (seeds[6] * x + seeds[7] * y + (rnum >> 2)) & 0x3f
360
-
361
- 3 - [d, c, b, a].each_with_index.max[1]
362
- end
363
- end
364
- end
365
-
366
- def applicate_color
367
- mem = Fiddle::Pointer.malloc(@bw * @bh * 4)
368
-
369
- if @dual_plane
370
- plane_arr = [0, 1, 2, 3]
371
- plane_arr.delete_at(@plane_selector)
372
-
373
- if @partition
374
- (@bw * @bh).times do |i|
375
- part = @partition[i]
376
- plane_arr.each{|c| mem[i * 4 + c] = select_color(@endpoint[part][c], @endpoint[part][4 + c], @weight0[i])}
377
- mem[i * 4 + @plane_selector] = select_color(@endpoint[part][@plane_selector], @endpoint[part][4 + @plane_selector], @weight1[i])
378
- end
379
- else
380
- (@bw * @bh).times do |i|
381
- plane_arr.each{|c| mem[i * 4 + c] = select_color(@endpoint[0][c], @endpoint[0][4 + c], @weight0[i])}
382
- mem[i * 4 + @plane_selector] = select_color(@endpoint[0][@plane_selector], @endpoint[0][4 + @plane_selector], @weight1[i])
383
- end
384
- end
385
- elsif @partition
386
- (@bw * @bh).times do |i|
387
- part = @partition[i]
388
- 4.times{|c| mem[i * 4 + c] = select_color(@endpoint[part][c], @endpoint[part][4 + c], @weight[i])}
389
- end
390
- else
391
- (@bw * @bh).times do |i|
392
- 4.times{|c| mem[i * 4 + c] = select_color(@endpoint[0][c], @endpoint[0][4 + c], @weight[i])}
393
- end
394
- end
395
-
396
- @data = mem.to_str
397
- end
398
-
399
- def select_color(v0, v1, weight)
400
- v0 |= v0 << 8
401
- v1 |= v1 << 8
402
- v = (v0 * (64 - weight) + v1 * weight + 32) >> 6
403
- (v * 255 + 32768) / 65536
404
- end
405
-
406
- def decode_intseq_raw(data, a, b, count)
407
- mask = (1 << b) - 1
408
- case a
409
- when 3
410
- rc = (count + 4) / 5
411
- ret = Array.new(rc * 5)
412
- m = [0, 2 + b, 4 + b * 2, 5 + b * 3, 7 + b * 4]
413
- rc.times do |i|
414
- t = (data >> b & 3) | (data >> b * 2 & 0xc) | (data >> b * 3 & 0x10) | (data >> b * 4 & 0x60) | (data >> b * 5 & 0x80)
415
- 5.times do |j|
416
- ret[i * 5 + j] = [data >> m[j] & mask, TritsTable[j][t]]
417
- end
418
- data >>= b * 5 + 8
419
- end
420
- ret[0, count]
421
- when 5
422
- rc = (count + 2) / 3
423
- ret = Array.new(rc * 3)
424
- m = [0, 3 + b, 5 + b * 2]
425
- rc.times do |i|
426
- q = (data >> b & 7) | (data >> b * 2 & 0x18) | (data >> b * 3 & 0x60)
427
- 3.times do |j|
428
- ret[i * 3 + j] = [data >> m[j] & mask, QuintsTable[j][q]]
429
- end
430
- data >>= b * 3 + 7
431
- end
432
- ret[0, count]
433
- else # 0
434
- (0...count).map do |i|
435
- [data >> b * i & mask, 0]
436
- end
437
- end
438
- end
439
-
440
- def unquantize_endpoint(a, b, bit, val_d)
441
- if a == 0
442
- case b
443
- when 1
444
- bit * 0xff
445
- when 2
446
- bit * 0x55
447
- when 3
448
- bit << 5 | bit << 2 | bit >> 1
449
- when 4
450
- bit << 4 | bit
451
- when 5
452
- bit << 3 | bit >> 2
453
- when 6
454
- bit << 2 | bit >> 4
455
- when 7
456
- bit << 1 | bit >> 6
457
- else # 8
458
- bit
459
- end
460
- else
461
- val_a = (bit & 1) * 0x1ff
462
- tmp_b = bit >> 1
463
- case b
464
- when 1
465
- val_b = 0
466
- val_c = a == 3 ? 204 : 113
467
- when 2
468
- val_b = a == 3 ? (0b100010110) * tmp_b : (0b100001100) * tmp_b
469
- val_c = a == 3 ? 93 : 54
470
- when 3
471
- val_b = a == 3 ? tmp_b << 7 | tmp_b << 2 | tmp_b : tmp_b << 7 | tmp_b << 1 | tmp_b >> 1
472
- val_c = a == 3 ? 44 : 26
473
- when 4
474
- val_b = tmp_b << 6 | tmp_b >> (a == 3 ? 0 : 1)
475
- val_c = a == 3 ? 22 : 13
476
- when 5
477
- val_b = tmp_b << 5 | tmp_b >> (a == 3 ? 2 : 3)
478
- val_c = a == 3 ? 11 : 6
479
- else # 6
480
- val_b = tmp_b << 4 | tmp_b >> 4
481
- val_c = 5
482
- end
483
- t = val_d * val_c + val_b
484
- t ^= val_a
485
- (val_a & 0x80) | (t >> 2)
486
- end
487
- end
488
-
489
- def unquantize_weight(a, b, bit, val_d)
490
- if a == 0
491
- case b
492
- when 1
493
- t = bit == 1 ? 63 : 0
494
- when 2
495
- t = bit << 4 | bit << 2 | bit
496
- when 3
497
- t = bit << 3 | bit
498
- when 4
499
- t = bit << 2 | bit >> 2
500
- else # 5
501
- t = bit << 1 | bit >> 4
502
- end
503
- elsif b == 0
504
- t = (a == 3 ? [0, 32, 63] : [0, 16, 32, 47, 63])[val_d]
505
- else
506
- val_a = (bit & 1) * 0x7f
507
- case b
508
- when 1
509
- val_b = 0
510
- val_c = a == 3 ? 50 : 28
511
- when 2
512
- val_b = (a == 3 ? 0b1000101 : 0b1000010) * bit[1]
513
- val_c = a == 3 ? 23 : 13
514
- else # 3
515
- val_b = (bit << 4 | bit >> 1) & 0b1100011
516
- val_c = 11
517
- end
518
- t = val_d * val_c + val_b
519
- t ^= val_a
520
- t = (val_a & 0x20) | (t >> 2)
521
- end
522
- t > 32 ? t + 1 : t
523
- end
524
- end
525
- end
526
- end