liblzma 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.txt CHANGED
@@ -1,43 +1,42 @@
1
- # encoding:utf-8
2
1
 
3
2
  = liblzma for Ruby
4
3
 
5
4
  - AUTHOR : dearblue
6
5
  - MAIL : dearblue@users.sourceforge.jp
7
6
  - LICENSE : 2-clause BSD License (二条項BSDライセンス)
8
- - PROJECTPAGE : http://sourceforge.jp/projects/rutsubo/
7
+ - PROJECT PAGE : http://sourceforge.jp/projects/rutsubo/
9
8
 
10
9
  This document is written in Japanese.
11
10
 
12
11
 
13
12
  == はじめに
14
13
 
15
- xzユーティリティに含まれるliblzmaのRubyバインディングです。
14
+ xz ユーティリティに含まれる liblzma Ruby バインディングです。
16
15
 
17
- gemパッケージになっており、『gem install liblzma-0.2.gem』でビルド、インストールが完了します。
16
+ gemパッケージになっており、『gem install liblzma-0.3.gem』でビルド、インストールが完了します。
18
17
 
19
- MinGW32およびFreeBSD 9.0R i386で動作確認を行っています。
18
+ MinGW32 および FreeBSD 9.0R i386 で動作確認を行っています。
20
19
 
21
- MinGW32向けにはバイナリパッケージも用意してあります (もしかしたらruby-mswin32でも動作するかもしれません)。
20
+ MinGW32 向けにはバイナリパッケージも用意してあります (もしかしたら ruby-mswin32 でも動作するかもしれません)。
22
21
 
23
- FreeBSD 9.0R i386 上では標準コンパイラであるGCCのほかにllvm clangでもビルド可能なことを確認してあります。
22
+ FreeBSD 9.0R i386 上では標準コンパイラである GCC のほかに llvm clang でもビルド可能なことを確認してあります。
24
23
 
25
24
 
26
25
  == 利用できる主な機能
27
26
 
28
- ※カッコ内は、本来のliblzmaが提供する関数を示す
27
+ ※カッコ内は、本来の liblzma が提供する関数を示す
29
28
 
30
- * LZMA::Stream::Encoder/Decoder (lzma_stream_encoder / lzma_stream_decoder)
31
- * LZMA::Stream::RawEncoder/RawDecoder (lzma_raw_encoder / lzma_raw_decoder)
32
- * LZMA::Utils.crc32/crc64 (lzma_crc32 / lzma_crc64)
33
- * LZMA::Filter::LZMA1/LZMA2/Delta
29
+ - LZMA::Stream::Encoder / Decoder (lzma_stream_encoder / lzma_stream_decoder)
30
+ - LZMA::Stream::RawEncoder / RawDecoder (lzma_raw_encoder / lzma_raw_decoder)
31
+ - LZMA::Filter::LZMA1 / LZMA2 / Delta
32
+ - LZMA::Utils.crc32 / crc64 (lzma_crc32 / lzma_crc64)
34
33
 
35
34
 
36
35
  == 実際に利用するには
37
36
 
38
- まともな文書化が出来ていないため、gemパッケージ内の『samples』ディレクトリに含まれる各サンプルを頼りにして下さい。
37
+ まともな文書化が出来ていないため、gem パッケージ内の『samples』ディレクトリに含まれる各サンプルを頼りにして下さい。
39
38
 
40
39
 
41
40
  == ライセンスについて
42
41
 
43
- liblzma for Ruby は、二条項BSDライセンスの下で利用できます。
42
+ liblzma for Ruby は、二条項 BSD ライセンスの下で利用できます。
@@ -1,7 +1,23 @@
1
+ #!ruby
2
+
3
+ require "optparse"
4
+
5
+ opt = OptionParser.new
6
+
7
+ staticlink = nil
8
+ opt.on("-s", "link liblzma.a as static library") { staticlink = true }
9
+
10
+ opt.parse!
11
+
12
+
1
13
  require "mkmf"
2
14
 
3
15
  have_header "lzma.h" or raise "need lzma.h"
4
16
  have_library "lzma" or raise "need liblzma.a"
17
+ if staticlink
18
+ # 静的ライブラリリンクを優先する
19
+ $libs = ["-Wl,-dn,-llzma", "-Wl,-llzma", $libs].join(" ")
20
+ end
5
21
  create_makefile "liblzma"
6
22
 
7
23
  # Makefile から、『-L.』を取り除く
@@ -1,8 +1,10 @@
1
+ /* encoding:utf-8 */
2
+
1
3
  /*
2
4
  * liblzma.c -
3
- * Author:: dearblue <dearblue@sourceforge.jp>
4
- * Copyright:: Copyright (c) 2010 dearblue
5
- * License:: Distributed under the 2-clause BSD License
5
+ * - Author: dearblue <dearblue@sourceforge.jp>
6
+ * - Copyright: Copyright (c) 2010 dearblue
7
+ * - License: Distributed under the 2-clause BSD License
6
8
  */
7
9
 
8
10
  #include <ruby.h>
@@ -14,7 +16,7 @@ static VALUE mLZMA;
14
16
 
15
17
 
16
18
  static VALUE symDICTSIZE;
17
- static VALUE symPRESETDICT;
19
+ static VALUE symDICT;
18
20
  static VALUE symLC;
19
21
  static VALUE symLP;
20
22
  static VALUE symPB;
@@ -25,12 +27,25 @@ static VALUE symDEPTH;
25
27
  static VALUE symCHECK;
26
28
 
27
29
 
30
+ // rdoc に対して定義されているものと錯覚させるマクロ
31
+ #define RDOC(...)
32
+
33
+
28
34
  static inline int
29
35
  lzma_isfailed(lzma_ret status)
30
36
  {
31
37
  return status != 0;
32
38
  }
33
39
 
40
+ #define LZMA_TEST(STATUS) \
41
+ { \
42
+ lzma_ret _status = (STATUS); \
43
+ if (lzma_isfailed(_status)) { \
44
+ VALUE exc = lookup_exception(_status); \
45
+ rb_exc_raise(rb_exc_new3(exc, rb_class_name(exc))); \
46
+ } \
47
+ } \
48
+
34
49
 
35
50
  // SECTION: LZMA::Constants
36
51
 
@@ -178,44 +193,189 @@ setup_lzma_preset(size_t preset)
178
193
  lzma_options_lzma *lzma = xcalloc(sizeof(lzma_options_lzma), 1);
179
194
  if (lzma_lzma_preset(lzma, preset)) {
180
195
  rb_raise(rb_eArgError,
181
- "wrong preset level (%d for 0..9) or wrong flag bit(s) (%08x)",
196
+ "wrong preset level (%d for 0..9) or wrong flag bit(s) (0x%08x)",
182
197
  preset & LZMA_PRESET_LEVEL_MASK,
183
198
  preset & ~LZMA_PRESET_LEVEL_MASK & ~LZMA_PRESET_EXTREME);
184
199
  }
185
200
  return (void *)(lzma);
186
201
  }
187
202
 
188
- static const char PRIVATE_DICTPRESET[] = "dict_preset";
189
203
 
190
- static inline void
191
- lzma_set_dict_0(lzma_options_lzma *filter, VALUE dict, VALUE self)
192
- {
193
- if (NIL_P(dict)) {
194
- filter->preset_dict = NULL;
195
- filter->preset_dict_size = 0;
196
- } else {
197
- if (TYPE(dict) != T_STRING) {
198
- rb_raise(rb_eTypeError, "%s", "dict is not a String or nil");
199
- }
200
- dict = rb_str_new_frozen(dict);
201
- filter->preset_dict = (uint8_t *)(RSTRING_PTR(dict));
202
- filter->preset_dict_size = RSTRING_LEN(dict);
203
- }
204
- rb_iv_set(self, PRIVATE_DICTPRESET, dict);
205
- }
204
+ /*
205
+ * Document-method: LZMA::Filter::BasicLZMA#dict
206
+ *
207
+ * call-seq:
208
+ * LZMA::Filter::BasicLZMA#dict -> string or nil
209
+ *
210
+ * 定義済み辞書を取得します。
211
+ *
212
+ * [RETURN] 定義済み辞書が定義されている場合は文字列が返ります。定義されていなければ +nil+ が返ります。
213
+ *
214
+ * エンコード情報は無視されます (常に Encoding::BINARY として扱われます)。呼び出し側で統一しておくべきです。
215
+ *
216
+ * 返される文字列は定義辞書の複成体です。変更しても定義情報には反映されません。+#dict=+ と併せて利用して下さい。
217
+ */
206
218
 
207
- static VALUE
208
- lzma_set_dict(VALUE self, VALUE dict)
209
- {
210
- lzma_set_dict_0((lzma_options_lzma *)getfilter(self)->options, dict, self);
211
- return self;
212
- }
219
+ /*
220
+ * Document-method: LZMA::Filter::BasicLZMA#dict=
221
+ *
222
+ * call-seq:
223
+ * LZMA::Filter::BasicLZMA#dict=(dict)
224
+ *
225
+ * 定義済み辞書を定義します。
226
+ *
227
+ * [dict] 定義済み辞書として文字列を与えます。定義を無効にする (定義済み辞書を利用しない) には、+nil+ を与えます。
228
+ *
229
+ * エンコード情報は無視されます (常に Encoding::BINARY として扱われます)。呼び出し側で統一しておくべきです。
230
+ *
231
+ * 与えた文字列は内部で複写され、元の文字列とは独立します。文字列の変更を反映したい場合はその都度 +#dict=+ を呼ぶ必要があります。
232
+ *
233
+ * [RETURN] 自身 (self) を返します。
234
+ */
213
235
 
214
- static VALUE
215
- lzma_get_dict(VALUE self)
216
- {
217
- return rb_str_new_shared(rb_iv_get(self, PRIVATE_DICTPRESET));
218
- }
236
+ /*
237
+ * Document-method: LZMA::Filter::BasicLZMA#dictsize
238
+ *
239
+ * call-seq:
240
+ * LZMA::Filter::BasicLZMA#dictsize -> integer
241
+ *
242
+ * 辞書の大きさをバイト値として取得します。
243
+ */
244
+
245
+ /*
246
+ * Document-method: LZMA::Filter::BasicLZMA#dictsize=
247
+ *
248
+ * call-seq:
249
+ * LZMA::Filter::BasicLZMA#dictsize=(size) -> self
250
+ *
251
+ * 辞書の大きさをバイト値として設定します。
252
+ */
253
+
254
+ /*
255
+ * Document-method: LZMA::Filter::BasicLZMA#lc
256
+ *
257
+ * call-seq:
258
+ * LZMA::Filter::BasicLZMA#lc -> integer
259
+ *
260
+ * lc 値を取得します。
261
+ */
262
+
263
+ /*
264
+ * Document-method: LZMA::Filter::BasicLZMA#lc=
265
+ *
266
+ * call-seq:
267
+ * LZMA::Filter::BasicLZMA#lc=(value) -> self
268
+ *
269
+ * lc 値を設定します。
270
+ */
271
+
272
+ /*
273
+ * Document-method: LZMA::Filter::BasicLZMA#lp
274
+ *
275
+ * call-seq:
276
+ * LZMA::Filter::BasicLZMA#lp -> integer
277
+ *
278
+ * lp 値を取得します。
279
+ */
280
+
281
+ /*
282
+ * Document-method: LZMA::Filter::BasicLZMA#lp=
283
+ *
284
+ * call-seq:
285
+ * LZMA::Filter::BasicLZMA#lp=(value) -> self
286
+ *
287
+ * lp 値を設定します。
288
+ */
289
+
290
+ /*
291
+ * Document-method: LZMA::Filter::BasicLZMA#pb
292
+ *
293
+ * call-seq:
294
+ * LZMA::Filter::BasicLZMA#pb -> integer
295
+ *
296
+ * pb 値を取得します。
297
+ */
298
+
299
+ /*
300
+ * Document-method: LZMA::Filter::BasicLZMA#pb=
301
+ *
302
+ * call-seq:
303
+ * LZMA::Filter::BasicLZMA#pb=(value) -> self
304
+ *
305
+ * pb 値を設定します。
306
+ */
307
+
308
+ /*
309
+ * Document-method: LZMA::Filter::BasicLZMA#mode
310
+ *
311
+ * call-seq:
312
+ * LZMA::Filter::BasicLZMA#mode -> integer
313
+ *
314
+ * mode 値を取得します。
315
+ */
316
+
317
+ /*
318
+ * Document-method: LZMA::Filter::BasicLZMA#mode=
319
+ *
320
+ * call-seq:
321
+ * LZMA::Filter::BasicLZMA#mode=(value) -> self
322
+ *
323
+ * mode 値を設定します。
324
+ */
325
+
326
+ /*
327
+ * Document-method: LZMA::Filter::BasicLZMA#nice
328
+ *
329
+ * call-seq:
330
+ * LZMA::Filter::BasicLZMA#nice -> integer
331
+ *
332
+ * nice 値を取得します。
333
+ */
334
+
335
+ /*
336
+ * Document-method: LZMA::Filter::BasicLZMA#nice=
337
+ *
338
+ * call-seq:
339
+ * LZMA::Filter::BasicLZMA#nice=(value) -> self
340
+ *
341
+ * nice 値を設定します。
342
+ */
343
+
344
+ /*
345
+ * Document-method: LZMA::Filter::BasicLZMA#mf
346
+ *
347
+ * call-seq:
348
+ * LZMA::Filter::BasicLZMA#mf -> integer
349
+ *
350
+ * mf 値を取得します。
351
+ */
352
+
353
+ /*
354
+ * Document-method: LZMA::Filter::BasicLZMA#mf=
355
+ *
356
+ * call-seq:
357
+ * LZMA::Filter::BasicLZMA#mf=(value) -> self
358
+ *
359
+ * mf 値を設定します。
360
+ */
361
+
362
+ /*
363
+ * Document-method: LZMA::Filter::BasicLZMA#depth
364
+ *
365
+ * call-seq:
366
+ * LZMA::Filter::BasicLZMA#depth -> integer
367
+ *
368
+ * depth 値を取得します。
369
+ */
370
+
371
+ /*
372
+ * Document-method: LZMA::Filter::BasicLZMA#depth=
373
+ *
374
+ * call-seq:
375
+ * LZMA::Filter::BasicLZMA#depth=(value) -> self
376
+ *
377
+ * depth 値を設定します。
378
+ */
219
379
 
220
380
 
221
381
  #define DEFINE_ACCESSOR_ENTITY(NAME, MEMBER, DEFAULT) \
@@ -242,17 +402,68 @@ lzma_get_dict(VALUE self)
242
402
  return UINT2NUM(((lzma_options_lzma *)getfilter(self)->options)->MEMBER); \
243
403
  } \
244
404
 
245
- DEFINE_ACCESSOR_ENTITY(dictsize, dict_size, LZMA_DICT_SIZE_DEFAULT) // lzma_set_dictsize_0, lzma_set_dictsize, lzma_set_lc
246
- DEFINE_ACCESSOR_ENTITY(lc, lc, LZMA_LC_DEFAULT)
247
- DEFINE_ACCESSOR_ENTITY(lp, lp, LZMA_LP_DEFAULT)
248
- DEFINE_ACCESSOR_ENTITY(pb, pb, LZMA_PB_DEFAULT)
249
- DEFINE_ACCESSOR_ENTITY(mode, mode, LZMA_MODE_NORMAL)
250
- DEFINE_ACCESSOR_ENTITY(nice, nice_len, 64)
251
- DEFINE_ACCESSOR_ENTITY(mf, mf, LZMA_MF_BT4)
252
- DEFINE_ACCESSOR_ENTITY(depth, depth, 0)
405
+ static ID IDdictpreset;
406
+
407
+ static inline void
408
+ lzma_set_dict_nil(lzma_options_lzma *filter)
409
+ {
410
+ filter->preset_dict = NULL;
411
+ filter->preset_dict_size = 0;
412
+ }
413
+
414
+ static inline void
415
+ lzma_set_dict_string(lzma_options_lzma *filter, VALUE dict)
416
+ {
417
+ dict = rb_str_new_frozen(dict);
418
+ filter->preset_dict = (uint8_t *)(RSTRING_PTR(dict));
419
+ filter->preset_dict_size = RSTRING_LEN(dict);
420
+ }
421
+
422
+ static inline void
423
+ lzma_set_dict_0(lzma_options_lzma *filter, VALUE dict, VALUE self)
424
+ {
425
+ if (NIL_P(dict)) {
426
+ lzma_set_dict_nil(filter);
427
+ } else if (TYPE(dict) == T_STRING) {
428
+ if (RSTRING_LEN(dict) > 0) {
429
+ lzma_set_dict_string(filter, dict);
430
+ } else {
431
+ lzma_set_dict_nil(filter);
432
+ }
433
+ } else {
434
+ rb_raise(rb_eTypeError, "%s", "dict is not a String or nil");
435
+ }
436
+
437
+ rb_ivar_set(self, IDdictpreset, dict);
438
+ }
439
+
440
+ static VALUE
441
+ lzma_set_dict(VALUE self, VALUE dict)
442
+ {
443
+ lzma_set_dict_0((lzma_options_lzma *)getfilter(self)->options, dict, self);
444
+ return self;
445
+ }
446
+
447
+ static VALUE
448
+ lzma_get_dict(VALUE self)
449
+ {
450
+ VALUE dict = rb_attr_get(self, IDdictpreset);
451
+ if (!NIL_P(dict)) { dict = rb_str_new_shared(dict); }
452
+ return dict;
453
+ }
454
+
455
+ DEFINE_ACCESSOR_ENTITY(dictsize, dict_size, LZMA_DICT_SIZE_DEFAULT); // lzma_set_dictsize_0, lzma_set_dictsize, lzma_set_lc
456
+ DEFINE_ACCESSOR_ENTITY(lc, lc, LZMA_LC_DEFAULT);
457
+ DEFINE_ACCESSOR_ENTITY(lp, lp, LZMA_LP_DEFAULT);
458
+ DEFINE_ACCESSOR_ENTITY(pb, pb, LZMA_PB_DEFAULT);
459
+ DEFINE_ACCESSOR_ENTITY(mode, mode, LZMA_MODE_NORMAL);
460
+ DEFINE_ACCESSOR_ENTITY(nice, nice_len, 64);
461
+ DEFINE_ACCESSOR_ENTITY(mf, mf, LZMA_MF_BT4);
462
+ DEFINE_ACCESSOR_ENTITY(depth, depth, 0);
253
463
 
254
464
  #undef DEFINE_ACCESSOR_ENTITY
255
465
 
466
+
256
467
  static void *
257
468
  setup_lzma(VALUE obj, uint32_t preset,
258
469
  VALUE dictsize, VALUE dictpreset, VALUE lc, VALUE lp, VALUE pb,
@@ -260,7 +471,7 @@ setup_lzma(VALUE obj, uint32_t preset,
260
471
  {
261
472
  lzma_options_lzma lzma = { 0 };
262
473
  if (lzma_lzma_preset(&lzma, preset) != 0) {
263
- rb_raise(eBadPreset, "bad preset (%08x)", preset);
474
+ rb_raise(eBadPreset, "bad preset (0x%08x)", preset);
264
475
  }
265
476
 
266
477
  if (RTEST(dictpreset)) { lzma_set_dict_0(&lzma, dictpreset, obj); }
@@ -306,12 +517,12 @@ getpreset(VALUE preset)
306
517
 
307
518
  /*
308
519
  * call-seq:
309
- * LZMA::Filter.lzma1(....)
520
+ * LZMA::Filter.lzma1(...)
310
521
  *
311
- * LZMA::Filter::LZMA1.newを呼ぶための補助機構である
522
+ * LZMA::Filter::LZMA1.newを呼ぶための補助機構です。
312
523
  *
313
- * LZMA::Filter::LZMA1クラスの .new や #initialize を書き換えた場合はそれに従う
314
- * (あくまで .new を呼ぶだけである)
524
+ * LZMA::Filter::LZMA1クラスの .new や #initialize を書き換えた場合はそれに従います
525
+ * (あくまで .new を呼ぶだけです)
315
526
  */
316
527
  static VALUE
317
528
  lzma1_new(int argc, VALUE argv[], VALUE self)
@@ -323,10 +534,10 @@ lzma1_new(int argc, VALUE argv[], VALUE self)
323
534
  * call-seq:
324
535
  * LZMA::Filter.lzma2(...)
325
536
  *
326
- * LZMA::Filter::LZMA2.new を呼ぶための補助機構である
537
+ * LZMA::Filter::LZMA2.new を呼ぶための補助機構です。
327
538
  *
328
- * LZMA::Filter::LZMA2クラスの .new や #initialize を書き換えた場合はそれに従う
329
- * (あくまで .new を呼ぶだけである)
539
+ * LZMA::Filter::LZMA2クラスの .new や #initialize を書き換えた場合はそれに従います
540
+ * (あくまで .new を呼ぶだけです)
330
541
  */
331
542
  static VALUE
332
543
  lzma2_new(int argc, VALUE argv[], VALUE self)
@@ -336,12 +547,12 @@ lzma2_new(int argc, VALUE argv[], VALUE self)
336
547
 
337
548
  /*
338
549
  * call-seq:
339
- * LZMA::Filter.delta(....)
550
+ * LZMA::Filter.delta(...)
340
551
  *
341
- * LZMA::Filter::Delta.newを呼ぶための補助機構である
552
+ * LZMA::Filter::Delta.new を呼ぶための補助機構です。
342
553
  *
343
- * LZMA::Filter::Deltaクラスの .new や #initialize を書き換えた場合はそれに従う
344
- * (あくまで .new を呼ぶだけである)
554
+ * LZMA::Filter::Deltaクラスの .new や #initialize を書き換えた場合はそれに従います
555
+ * (あくまで .new を呼ぶだけです)
345
556
  */
346
557
  static VALUE
347
558
  delta_new(int argc, VALUE argv[], VALUE self)
@@ -350,7 +561,6 @@ delta_new(int argc, VALUE argv[], VALUE self)
350
561
  }
351
562
 
352
563
 
353
-
354
564
  static inline VALUE
355
565
  filter_alloc(VALUE klass, lzma_vli id)
356
566
  {
@@ -383,13 +593,14 @@ delta_alloc(VALUE klass)
383
593
  * call-seq:
384
594
  * LZMA::Filter::Delta.new(dist = LZMA::DELTA_DIST_MIN)
385
595
  *
386
- * 差分フィルタ設定オブジェクトを返す。
596
+ * 差分フィルタ設定オブジェクトを返します。
387
597
  *
388
- * distは1要素あたりのバイト長で、1以上を指定する。
598
+ * distは1要素あたりのバイト長で、1以上255以下を指定できます。
389
599
  *
390
- * 使用する場合多くの場合1で十分だろうし、音楽CDの音声データであれば2を指定するのがいいだろう。
600
+ * NOTE::
601
+ * 使用する場合多くの場合1で十分と思われますが、音楽CDの音声データであれば1サンプル2バイトであるため2が有効でしょう。
391
602
  *
392
- * しかし元のデータによっては圧縮効率を低下させることがあるため、常に適用することはしないほうがいい。
603
+ * しかし元のデータによっては圧縮効率を低下させることがあるため、実際に適用するべきかはデータの特性によって検証するのが好ましいです。
393
604
  */
394
605
  static VALUE
395
606
  delta_init(int argc, VALUE argv[], VALUE self)
@@ -408,27 +619,24 @@ delta_init(int argc, VALUE argv[], VALUE self)
408
619
 
409
620
  /*
410
621
  * call-seq:
411
- * LZMA::Filter::BasicLZMA.new(preset = LZMA::PRESET_DEFAULT, opts = { .... } ) -> filter
622
+ * LZMA::Filter::BasicLZMA.new(preset = LZMA::PRESET_DEFAULT, ... ) -> filter
412
623
  *
413
- * フィルタ設定オブジェクトを返す。
624
+ * LZMA フィルタ設定オブジェクトを初期化します。
414
625
  *
415
- * この段階で各値の確認を行うことはせず、*encoderに渡すときに初めて確認される
626
+ * この段階で各値の確認を行うことはせず、*encoderに渡すときに初めて確認されます。
416
627
  *
417
- * 引数::
418
- * 引数は、presetは整数で、続くoptsはハッシュであり、細かい調整を行う場合に指定する。
419
- *
420
- * どちらも任意に省略可能であり、presetを省略してoptsを指定することも可能である。
421
- *
422
- * preset:: プリセット値 (≒圧縮レベル) を0-9の範囲で指定する。既定値はLZMA::PRESET_DEFAULTである。
423
- * dictsize:: 既定値はLZMA::DICT_SIZE_DEFAULT
424
- * presetdict:: 既定値はnil
425
- * lc:: 既定値はLZMA::LC_DEFAULT
426
- * lp:: 既定値はLZMA::LP_DEFAULT
427
- * pb:: 既定値はLZMA::PB_DEFAULT
428
- * mode:: 既定値はLZMA::MODE_NORMAL
429
- * nice:: 既定値はLZMA::NICE_DEFAULT
430
- * mf:: 既定値はLZMA::MF_BT4
431
- * depth:: 既定値はLZMA::DEPTH_DEFAULT
628
+ * [preset] プリセット値 (≒圧縮レベル) を 0-9 の範囲で指定し、任意で LZMA::PRESET_EXTREME を論理和で組み合わせることが出来ます。既定値はLZMA::PRESET_DEFAULTとなります。
629
+ * [dictsize] 辞書の大きさをバイト値で指定します。既定値は preset によって変化します。
630
+ * [dict] 定義済み辞書を指定します。既定値は nil です。
631
+ * [lc] 既定値は preset によって変化します。
632
+ * [lp] 既定値は preset によって変化します。
633
+ * [pb] 既定値は preset によって変化します。
634
+ * [mode] 既定値は preset によって変化します。
635
+ * [nice] 既定値は preset によって変化します。
636
+ * [mf] 既定値は preset によって変化します。
637
+ * [depth] 既定値は preset によって変化します。
638
+ * [RETURN] フィルタオブジェクト
639
+ * [EXCEPTIONS] (NO DOCUMENT)
432
640
  */
433
641
  static VALUE
434
642
  lzma_init(int argc, VALUE argv[], VALUE self)
@@ -442,7 +650,7 @@ lzma_init(int argc, VALUE argv[], VALUE self)
442
650
  } else {
443
651
  filter->options = setup_lzma(self, getpreset(preset),
444
652
  rb_hash_lookup(opts, symDICTSIZE),
445
- rb_hash_lookup(opts, symPRESETDICT),
653
+ rb_hash_lookup(opts, symDICT),
446
654
  rb_hash_lookup(opts, symLC),
447
655
  rb_hash_lookup(opts, symLP),
448
656
  rb_hash_lookup(opts, symPB),
@@ -455,13 +663,33 @@ lzma_init(int argc, VALUE argv[], VALUE self)
455
663
  }
456
664
 
457
665
  /*
458
- * Document-method: LZMA::Filter::BasicLZMA#dictsize
666
+ * Document-class: LZMA::Filter
667
+ *
668
+ * LZMA::Filter クラスは、各圧縮器や伸張器の生成時に用いるフィルタ情報を取り扱います。
669
+ *
670
+ * liblzma で定義されているフィルタはそれぞれ LZMA::Filter::LZMA1 /
671
+ * LZMA::Filter::LZMA2 / LZMA::Filter::Delta として定義されています。
672
+ *
673
+ * これらのクラスについてはそれぞれの文書を見てください。
674
+ */
675
+
676
+ /*
677
+ * Document-class: LZMA::Filter::BasicLZMA
678
+ *
679
+ * LZMA::Filter::LZMA1 と LZMA::Filter::LZMA2 の基本となるクラスです。
680
+ *
681
+ * allocator を持たないため、このクラス自身はインスタンスを作成することが出来ません。
682
+ */
683
+
684
+ /*
685
+ * Document-method: LZMA::Filter::BasicLZMA#dictsize -> integer
459
686
  *
460
687
  * call-seq:
461
688
  * LZMA::Filter::BasicLZMA#dictsize -> 辞書サイズ (バイト長)
462
689
  *
463
690
  * 様々なフィルタ値の設定・取り出しを行う
464
691
  */
692
+
465
693
  static void
466
694
  setup_filter(void)
467
695
  {
@@ -484,21 +712,25 @@ setup_filter(void)
484
712
  rb_define_alloc_func(cDelta, delta_alloc);
485
713
  rb_define_method(cDelta, "initialize", delta_init, -1);
486
714
 
487
- #define DEF_ACCESSOR(CLASS, NAME) \
488
- rb_define_method(CLASS, #NAME, lzma_get_ ## NAME, 0); \
489
- rb_define_method(CLASS, #NAME "=", lzma_set_ ## NAME, 1); \
490
-
491
- DEF_ACCESSOR(cBasicLZMA, dictsize);
492
- DEF_ACCESSOR(cBasicLZMA, dict);
493
- DEF_ACCESSOR(cBasicLZMA, lc);
494
- DEF_ACCESSOR(cBasicLZMA, lp);
495
- DEF_ACCESSOR(cBasicLZMA, pb);
496
- DEF_ACCESSOR(cBasicLZMA, mode);
497
- DEF_ACCESSOR(cBasicLZMA, nice);
498
- DEF_ACCESSOR(cBasicLZMA, mf);
499
- DEF_ACCESSOR(cBasicLZMA, depth);
500
-
501
- #undef DEF_ACCESSOR
715
+
716
+ rb_define_method(cBasicLZMA, "dictsize", lzma_get_dictsize, 0);
717
+ rb_define_method(cBasicLZMA, "dictsize=", lzma_set_dictsize, 1);
718
+ rb_define_method(cBasicLZMA, "dict", lzma_get_dict, 0);
719
+ rb_define_method(cBasicLZMA, "dict=", lzma_set_dict, 1);
720
+ rb_define_method(cBasicLZMA, "lc", lzma_get_lc, 0);
721
+ rb_define_method(cBasicLZMA, "lc=", lzma_set_lc, 1);
722
+ rb_define_method(cBasicLZMA, "lp", lzma_get_lp, 0);
723
+ rb_define_method(cBasicLZMA, "lp=", lzma_set_lp, 1);
724
+ rb_define_method(cBasicLZMA, "pb", lzma_get_pb, 0);
725
+ rb_define_method(cBasicLZMA, "pb=", lzma_set_pb, 1);
726
+ rb_define_method(cBasicLZMA, "mode", lzma_get_mode, 0);
727
+ rb_define_method(cBasicLZMA, "mode=", lzma_set_mode, 1);
728
+ rb_define_method(cBasicLZMA, "nice", lzma_get_nice, 0);
729
+ rb_define_method(cBasicLZMA, "nice=", lzma_set_nice, 1);
730
+ rb_define_method(cBasicLZMA, "mf", lzma_get_mf, 0);
731
+ rb_define_method(cBasicLZMA, "mf=", lzma_set_mf, 1);
732
+ rb_define_method(cBasicLZMA, "depth", lzma_get_depth, 0);
733
+ rb_define_method(cBasicLZMA, "depth=", lzma_set_depth, 1);
502
734
  }
503
735
 
504
736
 
@@ -512,15 +744,6 @@ static VALUE cRawEncoder;
512
744
  static VALUE cRawDecoder;
513
745
 
514
746
 
515
- #define LZMA_TEST(STATUS) \
516
- { \
517
- lzma_ret _status = (STATUS); \
518
- if (lzma_isfailed(_status)) { \
519
- VALUE exc = lookup_exception(_status); \
520
- rb_exc_raise(rb_exc_new3(exc, rb_class_name(exc))); \
521
- } \
522
- } \
523
-
524
747
  static inline void
525
748
  filter_copy(lzma_filter *dest, VALUE filter)
526
749
  {
@@ -596,13 +819,6 @@ stream_update_2(struct stream_update_args *args)
596
819
  return rb_thread_blocking_region((VALUE (*)(void *))stream_update_1, args, RUBY_UBF_IO, NULL);
597
820
  }
598
821
 
599
- static inline VALUE
600
- stream_update_3(VALUE src)
601
- {
602
- rb_str_unlocktmp(src);
603
- return Qnil;
604
- }
605
-
606
822
  static inline VALUE
607
823
  stream_update_0(lzma_stream *stream, lzma_action action, VALUE src)
608
824
  {
@@ -613,7 +829,7 @@ stream_update_0(lzma_stream *stream, lzma_action action, VALUE src)
613
829
  stream, action,
614
830
  (const uint8_t *)RSTRING_PTR(src), RSTRING_LEN(src),
615
831
  };
616
- return rb_ensure(stream_update_2, (VALUE)&args, stream_update_3, src);
832
+ return rb_ensure(stream_update_2, (VALUE)&args, rb_str_unlocktmp, src);
617
833
  } else {
618
834
  struct stream_update_args args = {
619
835
  stream, action, NULL, 0,
@@ -706,7 +922,17 @@ filter_setup(lzma_filter filter[LZMA_FILTERS_MAX + 1], VALUE filters0[], VALUE *
706
922
  }
707
923
 
708
924
 
709
- // LZMA::Stream.encoder(filter1, filter2, ...., filterN, check: CRC64)
925
+ /*
926
+ * call-seq:
927
+ * LZMA::Stream::Encoder.new(filter1 [ , filter2 [ , filter3 [ , filter4 ] ] ], check: CHECK_CRC64) -> encoder
928
+ *
929
+ * 圧縮器を生成します。圧縮されたデータストリームは xz ファイルフォーマットです。
930
+ *
931
+ * [filter1, filter2, filter3, filter4] LZMA::Filter インスタンス。最低一つを必要とします。
932
+ * [check] チェックメソッド。CHECK_NONE CHECK_CRC32 CHECK_CRC64 CHECK_SHA256 のいずれかの定数を与えます。
933
+ * [RETURN] 生成された圧縮器
934
+ * [EXCEPTIONS] (NO DOCUMENTS)
935
+ */
710
936
  static VALUE
711
937
  encoder_init(int argc, VALUE argv[], VALUE self)
712
938
  {
@@ -731,7 +957,7 @@ encoder_init(int argc, VALUE argv[], VALUE self)
731
957
 
732
958
  /*
733
959
  * call-seq:
734
- * LZMA::Stream::AutoDecoder.initialize(memlimit = nil, flags = nil)
960
+ * LZMA::Stream::AutoDecoder.new(memlimit = nil, flags = nil)
735
961
  */
736
962
  static VALUE
737
963
  autodecoder_init(int argc, VALUE argv[], VALUE self)
@@ -752,7 +978,7 @@ autodecoder_init(int argc, VALUE argv[], VALUE self)
752
978
 
753
979
  /*
754
980
  * call-seq:
755
- * LZMA::Stream::Decoder.initialize(memlimit = nil, flags = nil)
981
+ * LZMA::Stream::Decoder.new(memlimit = nil, flags = nil)
756
982
  */
757
983
  static VALUE
758
984
  decoder_init(int argc, VALUE argv[], VALUE self)
@@ -773,9 +999,9 @@ decoder_init(int argc, VALUE argv[], VALUE self)
773
999
 
774
1000
  /*
775
1001
  * call-seq:
776
- * LZMA::Stream::RawEncoder.initialize(filter1 [ , filter2 [ , .... ] ]) -> encoder
1002
+ * LZMA::Stream::RawEncoder.new(filter1 [ , filter2 [ , .... ] ]) -> encoder
777
1003
  *
778
- * 生の (xzヘッダなどの付かない) LZMA1/2ストリームを構成する圧縮器機を生成する。
1004
+ * 生の (xzヘッダなどの付かない) LZMA1/2ストリームを構成する圧縮器を生成する。
779
1005
  *
780
1006
  * filterは1つ以上4つまでを与える。
781
1007
  */
@@ -797,7 +1023,7 @@ rawencoder_init(int argc, VALUE argv[], VALUE self)
797
1023
 
798
1024
  /*
799
1025
  * call-seq:
800
- * LZMA::Stream::RawDecoder.initialize(filter1 [ , filter2 [ , .... ] ])
1026
+ * LZMA::Stream::RawDecoder.new(filter1 [ , filter2 [ , .... ] ])
801
1027
  */
802
1028
  static VALUE
803
1029
  rawdecoder_init(int argc, VALUE argv[], VALUE self)
@@ -896,60 +1122,62 @@ setup_index(void)
896
1122
 
897
1123
  // SECTION: LZMA::Utils
898
1124
 
899
- struct utils_crc32_args
1125
+ struct crc_args
900
1126
  {
901
1127
  const uint8_t *ptr;
902
1128
  size_t len;
903
- uint32_t crc;
1129
+ VALUE crc;
1130
+ VALUE (*crc_update)(struct crc_args *args);
904
1131
  };
905
1132
 
906
1133
  static VALUE
907
- utils_crc32_update(struct utils_crc32_args *args)
1134
+ crc_calc_try(struct crc_args *args)
908
1135
  {
909
- return UINT2NUM(lzma_crc32(args->ptr, args->len, args->crc));
1136
+ return rb_thread_blocking_region((VALUE (*)(void *))(args->crc_update), args, RUBY_UBF_IO, NULL);
910
1137
  }
911
1138
 
912
- /*
913
- * call-seq:
914
- * LZMA::Utils.crc32(string, crc = 0)
915
- *
916
- * liblzmaに含まれるlzma_crc32を呼び出します。
917
- */
918
- static VALUE
919
- utils_crc32(int argc, VALUE argv[], VALUE self)
1139
+ static inline VALUE
1140
+ crc_calc(VALUE (*crc_update)(struct crc_args *args), int argc, VALUE argv[])
920
1141
  {
921
1142
  VALUE src, crc;
922
1143
  rb_scan_args(argc, argv, "11", &src, &crc);
923
-
924
1144
  StringValue(src);
925
1145
  rb_str_locktmp(src);
926
1146
 
927
- struct utils_crc32_args args = {
1147
+ struct crc_args args = {
928
1148
  (const uint8_t *)RSTRING_PTR(src),
929
1149
  RSTRING_LEN(src),
930
- NIL_P(crc) ? 0 : NUM2UINT(crc),
1150
+ NIL_P(crc) ? INT2FIX(0) : crc,
1151
+ crc_update,
931
1152
  };
932
1153
 
933
- crc = rb_thread_blocking_region((VALUE (*)(void *))utils_crc32_update, &args, RUBY_UBF_IO, NULL);
934
-
935
- rb_str_unlocktmp(src);
936
-
937
- return crc;
1154
+ return rb_ensure(crc_calc_try, (VALUE)&args, rb_str_unlocktmp, src);
938
1155
  }
939
1156
 
940
1157
 
1158
+ static VALUE
1159
+ crc32_update(struct crc_args *args)
1160
+ {
1161
+ return UINT2NUM(lzma_crc32(args->ptr, args->len, NUM2UINT(args->crc)));
1162
+ }
941
1163
 
942
- struct utils_crc64_args
1164
+ /*
1165
+ * call-seq:
1166
+ * LZMA::Utils.crc32(string, crc = 0)
1167
+ *
1168
+ * liblzmaに含まれるlzma_crc32を呼び出します。
1169
+ */
1170
+ static VALUE
1171
+ utils_crc32(int argc, VALUE argv[], VALUE self)
943
1172
  {
944
- const uint8_t *ptr;
945
- size_t len;
946
- uint64_t crc;
947
- };
1173
+ return crc_calc(crc32_update, argc, argv);
1174
+ }
1175
+
948
1176
 
949
1177
  static VALUE
950
- utils_crc64_update(struct utils_crc64_args *args)
1178
+ crc64_update(struct crc_args *args)
951
1179
  {
952
- return ULL2NUM(lzma_crc64(args->ptr, args->len, args->crc));
1180
+ return ULL2NUM(lzma_crc64(args->ptr, args->len, NUM2ULL(args->crc)));
953
1181
  }
954
1182
 
955
1183
  /*
@@ -961,23 +1189,7 @@ utils_crc64_update(struct utils_crc64_args *args)
961
1189
  static VALUE
962
1190
  utils_crc64(int argc, VALUE argv[], VALUE self)
963
1191
  {
964
- VALUE src, crc;
965
- rb_scan_args(argc, argv, "11", &src, &crc);
966
-
967
- StringValue(src);
968
- rb_str_locktmp(src);
969
-
970
- struct utils_crc64_args args = {
971
- (const uint8_t *)RSTRING_PTR(src),
972
- RSTRING_LEN(src),
973
- NIL_P(crc) ? 0 : NUM2ULL(crc),
974
- };
975
-
976
- crc = rb_thread_blocking_region((VALUE (*)(void *))utils_crc64_update, &args, RUBY_UBF_IO, NULL);
977
-
978
- rb_str_unlocktmp(src);
979
-
980
- return crc;
1192
+ return crc_calc(crc64_update, argc, argv);
981
1193
  }
982
1194
 
983
1195
 
@@ -987,26 +1199,21 @@ static void
987
1199
  setup_utils(void)
988
1200
  {
989
1201
  mUtils = rb_define_module_under(mLZMA, "Utils");
990
- rb_include_module(mLZMA, mUtils);
991
- rb_extend_object(mLZMA, mUtils);
992
1202
 
993
- // rb_define_module_functionを使わない理由は、rb_define_module_functionで定義すると
994
- // インスタンスメソッドがprivateで定義されるため、その対策。
995
-
996
- rb_extend_object(mUtils, mUtils);
1203
+ rb_extend_object(mLZMA, mUtils);
1204
+ rb_extend_object(mUtils, mUtils); // 自分に対してもモジュールメソッドを利用できるようにする
997
1205
 
998
1206
  rb_define_method(mUtils, "crc32", RUBY_METHOD_FUNC(utils_crc32), -1);
999
1207
  rb_define_method(mUtils, "crc64", RUBY_METHOD_FUNC(utils_crc64), -1);
1000
1208
  }
1001
1209
 
1002
-
1003
- // SECTION: LZMA
1210
+ // SECTION: LibLZMA
1004
1211
 
1005
1212
  void
1006
1213
  Init_liblzma(void)
1007
1214
  {
1008
- symDICTSIZE = ID2SYM(rb_intern("dict_size"));
1009
- symPRESETDICT = ID2SYM(rb_intern("preset_dict"));
1215
+ symDICTSIZE = ID2SYM(rb_intern("dictsize"));
1216
+ symDICT = ID2SYM(rb_intern("dict"));
1010
1217
  symLC = ID2SYM(rb_intern("lc"));
1011
1218
  symLP = ID2SYM(rb_intern("lp"));
1012
1219
  symPB = ID2SYM(rb_intern("pb"));
@@ -1016,12 +1223,15 @@ Init_liblzma(void)
1016
1223
  symDEPTH = ID2SYM(rb_intern("depth"));
1017
1224
  symCHECK = ID2SYM(rb_intern("check"));
1018
1225
 
1019
- mLZMA = rb_define_module("LZMA");
1226
+ IDdictpreset = rb_intern_const("liblzma.dict_preset");
1227
+
1228
+
1229
+ mLZMA = rb_define_module("LibLZMA");
1020
1230
 
1021
1231
  setup_utils();
1022
1232
  setup_constants();
1023
1233
  setup_exceptions();
1024
1234
  setup_filter();
1025
1235
  setup_stream();
1026
- setup_index();
1236
+ // setup_index();
1027
1237
  }
@@ -1,131 +1,222 @@
1
1
  #vim: set fileencoding:utf-8
2
2
 
3
- require_relative "liblzma.so"
3
+ ver = RbConfig::CONFIG["ruby_version"]
4
+ lib = File.join(File.dirname(__FILE__), ver, "liblzma.so")
5
+ if File.file?(lib)
6
+ require_relative File.join(ver, "liblzma.so")
7
+ else
8
+ require_relative "liblzma.so"
9
+ end
4
10
 
5
- module LZMA
6
- module_function
7
- def encode(data, *args)
8
- s = Stream.encoder(Filter.lzma2(*args))
9
- s.update(data, LZMA::FINISH)
10
- end
11
11
 
12
- module_function
13
- def decode(data, *args)
14
- s = Stream.auto_decoder(*args)
15
- s.update(data, LZMA::FINISH)
12
+ #--
13
+ # This comment is avoid the problem that is recognized binary by rdoc
14
+ # #
15
+ # #
16
+ # #
17
+ # #
18
+ # #
19
+ # #
20
+ # #
21
+ # #
22
+ # #
23
+ # #
24
+ # #
25
+ # #
26
+ #++
27
+
28
+ module LibLZMA
29
+ LZMA = self
30
+
31
+ # call-seq:
32
+ # LibLZMA.encode(data, ...) -> encoded_xz_data
33
+ #
34
+ # データを圧縮します。圧縮されたデータ列は、xz ファイルフォーマットとなるため、コマンドラインの xz などで伸張させることが可能です。
35
+ #
36
+ # [data] 圧縮元となるデータを String インスタンスで渡します。liblzma はエンコーディング情報を無視し、そのままのバイト列をバイナリデータと見立て処理を行います。
37
+ #
38
+ # [options] LZMA::Filter::LZMA2.new に渡される可変引数です。詳細は LZMA::Filter::LZMA2.new を見てください。
39
+ #
40
+ # [RETURN] xz データストリームとしての String インスタンスです。
41
+ #
42
+ # [EXCEPTIONS] (NO DOCUMENT)
43
+ module_function
44
+ def encode(data, *args)
45
+ s = Stream.encoder(Filter.lzma2(*args))
46
+ s.update(data, LZMA::FINISH)
47
+ ensure
48
+ s.finish rescue nil if s
49
+ end
50
+
51
+ # call-seq:
52
+ # LZMA.decode(encoded_data, ...) -> string
53
+ #
54
+ # 圧縮されたデータを伸張します。
55
+ #
56
+ # [encoded_data] 圧縮されたデータを与えます。圧縮されたデータの形式は、xz と lzma です。これらはあらかじめ区別する必要なく与えることが出来ます。
57
+ #
58
+ # [options] LZMA::Filter::LZMA2.new に渡される可変引数です。詳細は LZMA::Filter::LZMA2.new を見てください。
59
+ #
60
+ # [RETURN] xz データストリームとしての String インスタンスです。
61
+ #
62
+ # [EXCEPTIONS] (NO DOCUMENT)
63
+ module_function
64
+ def decode(data, *args)
65
+ s = Stream.auto_decoder(*args)
66
+ s.update(data, LZMA::FINISH)
67
+ ensure
68
+ s.finish rescue nil if s
69
+ end
70
+
71
+ # call-seq:
72
+ # LZMA.raw_encode(data, ...) -> encoded_data
73
+ #
74
+ # データを圧縮します。圧縮されたデータ列は生の lzma1/lzma2 のデータ列であるため、伸張する際に適切なフィルタを与える必要があります。
75
+ #
76
+ # xz ファイルフォーマットヘッダや整合値を持たないため、これらが不要な場合は有用かもしれません。
77
+ #
78
+ # [data] 圧縮元となるデータを String インスタンスで渡します。liblzma はエンコーディング情報を無視し、そのままのバイト列をバイナリデータと見立てて処理を行います。
79
+ #
80
+ # [options] LZMA::Filter のインスタンスを与えます。
81
+ #
82
+ # [RETURN] 生の lzma1/lzma2 のデータ列となる String インスタンスです。
83
+ #
84
+ # [EXCEPTIONS] (NO DOCUMENT)
85
+ module_function
86
+ def raw_encode(data, *args)
87
+ s = Stream.raw_encoder(*args)
88
+ s.update(data, LZMA::FINISH)
89
+ ensure
90
+ s.finish rescue nil if s
91
+ end
92
+
93
+ # call-seq:
94
+ # LZMA.raw_decode(encoded_data, ...) -> decoded_data
95
+ #
96
+ # 圧縮されたデータを伸張します。圧縮した際に用いたフィルタをそのままの順番・数で与える必要があります。
97
+ #
98
+ # [data] 圧縮された生の lzma1/lzma2 の String インスタンスを渡します。liblzma はエンコーディング情報を無視し、そのままのバイト列をバイナリデータと見立てて処理を行います。
99
+ #
100
+ # [options] LZMA::Filter のインスタンスを与えます。
101
+ #
102
+ # [RETURN] 伸張されたデータ列となる String インスタンスです。
103
+ #
104
+ # [EXCEPTIONS] (NO DOCUMENT)
105
+ module_function
106
+ def raw_decode(data, *args)
107
+ s = Stream.raw_decoder(*args)
108
+ s.update(data, LZMA::FINISH)
109
+ ensure
110
+ s.finish rescue nil if s
111
+ end
112
+
113
+ class Stream
114
+ def self.encoder(*args)
115
+ Encoder.new(*args)
16
116
  end
17
117
 
18
- module_function
19
- def raw_encode(data, *args)
20
- s = Stream.raw_encoder(*args)
21
- s.update(data, LZMA::FINISH)
118
+ def self.decoder(*args)
119
+ Decoder.new(*args)
22
120
  end
23
121
 
24
- module_function
25
- def raw_decode(data, *args)
26
- s = Stream.raw_decoder(*args)
27
- s.update(data, LZMA::FINISH)
122
+ def self.auto_decoder(*args)
123
+ AutoDecoder.new(*args)
28
124
  end
29
125
 
30
- class Stream
31
- def self.encoder(*args)
32
- Encoder.new(*args)
33
- end
34
-
35
- def self.decoder(*args)
36
- Decoder.new(*args)
37
- end
38
-
39
- def self.auto_decoder(*args)
40
- AutoDecoder.new(*args)
41
- end
42
-
43
- def self.raw_encoder(*args)
44
- RawEncoder.new(*args)
45
- end
126
+ def self.raw_encoder(*args)
127
+ RawEncoder.new(*args)
128
+ end
46
129
 
47
- def self.raw_decoder(*args)
48
- RawDecoder.new(*args)
49
- end
130
+ def self.raw_decoder(*args)
131
+ RawDecoder.new(*args)
50
132
  end
133
+ end
51
134
 
52
- module Utils
53
- class CRC32 < Struct.new(:state, :init)
54
- def initialize(state = 0)
55
- state = state.to_i
56
- super(state, state)
57
- end
135
+ module Utils
136
+ # CRC32 Digest のように生成できるようになります。
137
+ class CRC32 < Struct.new(:state, :init)
138
+ def initialize(state = 0)
139
+ state = state.to_i
140
+ super(state, state)
141
+ end
58
142
 
59
- def update(data)
60
- self.state = Utils.crc32(data, state)
61
- self
62
- end
143
+ # call-seq:
144
+ # LZMA::Utils::CRC32#update(data) -> self
145
+ def update(data)
146
+ self.state = Utils.crc32(data, state)
147
+ self
148
+ end
63
149
 
64
- alias << update
150
+ alias << update
65
151
 
66
- def finish
67
- self
68
- end
152
+ def finish
153
+ self
154
+ end
69
155
 
70
- def reset
71
- self.state = init
72
- self
73
- end
156
+ def reset
157
+ self.state = init
158
+ self
159
+ end
74
160
 
75
- def digest
76
- [state].pack("N")
77
- end
161
+ def digest
162
+ [state].pack("N")
163
+ end
78
164
 
79
- def hexdigest
80
- "%08x" % state
81
- end
165
+ def hexdigest
166
+ "%08x" % state
167
+ end
82
168
 
83
- alias to_s hexdigest
169
+ alias to_s hexdigest
84
170
 
85
- def to_str
86
- "CRC32 <#{hexdigest}>"
87
- end
171
+ def to_str
172
+ "CRC32 <#{hexdigest}>"
173
+ end
88
174
 
89
- alias inspect to_str
90
- end
175
+ alias inspect to_str
176
+ end
91
177
 
92
- class CRC64 < Struct.new(:state, :init)
93
- def initialize(state = 0)
94
- state = state.to_i
95
- super(state, state)
96
- end
178
+ # CRC64 Digest のように生成できるようになります。
179
+ class CRC64 < Struct.new(:state, :init)
180
+ def initialize(state = 0)
181
+ state = state.to_i
182
+ super(state, state)
183
+ end
97
184
 
98
- def update(data)
99
- self.state = Utils.crc64(data, state)
100
- self
101
- end
185
+ # call-seq:
186
+ # LZMA::Utils::CRC64#update(data) -> self
187
+ def update(data)
188
+ self.state = Utils.crc64(data, state)
189
+ self
190
+ end
102
191
 
103
- alias << update
192
+ alias << update
104
193
 
105
- def finish
106
- self
107
- end
194
+ def finish
195
+ self
196
+ end
108
197
 
109
- def reset
110
- self.state = init
111
- self
112
- end
198
+ def reset
199
+ self.state = init
200
+ self
201
+ end
113
202
 
114
- def digest
115
- [state].pack("N")
116
- end
203
+ def digest
204
+ [state].pack("Q>")
205
+ end
117
206
 
118
- def hexdigest
119
- "%016x" % state
120
- end
207
+ def hexdigest
208
+ "%016x" % state
209
+ end
121
210
 
122
- alias to_s hexdigest
211
+ alias to_s hexdigest
123
212
 
124
- def to_str
125
- "CRC64 <#{hexdigest}>"
126
- end
213
+ def to_str
214
+ "CRC64 <#{hexdigest}>"
215
+ end
127
216
 
128
- alias inspect to_str
129
- end
217
+ alias inspect to_str
130
218
  end
219
+ end
131
220
  end
221
+
222
+ LZMA = LibLZMA unless Object.const_defined?(:LZMA)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #vim: set fileencoding:utf-8
3
3
 
4
- # このrubyスクリプトはliblzmaの利用手引きを兼ねたサンプルスクリプトです。
4
+ # このrubyスクリプトはliblzma for Rubyの利用手引きを兼ねたサンプルスクリプトです。
5
5
 
6
6
 
7
7
  # rubyでliblzmaの機能を利用するのに必要なのは、次の一文のみです
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #vim: set fileencoding:utf-8
3
3
 
4
- # このrubyスクリプトはruby-lzmaの利用手引きを兼ねたサンプルスクリプトです。
4
+ # この ruby スクリプトは liblzma for Ruby の利用手引きを兼ねたサンプルスクリプトです。
5
5
 
6
6
 
7
7
  # 01-* ではデータの全てを用意してから処理を行う方法を提示しますた。
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liblzma
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-31 00:00:00.000000000 Z
12
+ date: 2013-02-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description:
15
15
  email: dearblue@users.sourceforge.jp
@@ -28,7 +28,12 @@ homepage:
28
28
  licenses:
29
29
  - 2-clause BSD License
30
30
  post_install_message:
31
- rdoc_options: []
31
+ rdoc_options:
32
+ - -eUTF-8
33
+ - -mREADME.txt
34
+ - README.txt
35
+ - ext/liblzma.c
36
+ - lib/liblzma.rb
32
37
  require_paths:
33
38
  - lib
34
39
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -45,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
50
  version: '0'
46
51
  requirements: []
47
52
  rubyforge_project:
48
- rubygems_version: 1.8.16
53
+ rubygems_version: 1.8.25
49
54
  signing_key:
50
55
  specification_version: 3
51
56
  summary: ruby bindings for liblzma that is included in the xz utilities