liblzma 0.2 → 0.3

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.
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