ruby-lzws 1.1.7 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45c0c7f35addf83d5ba03c70c375c22ffa77033b0e324cda2a30548bfb91a579
4
- data.tar.gz: 99d7cb5a5465ce8f6d82e1d727e63eac94be05db3546f3fd6c445769dd1c7cb7
3
+ metadata.gz: 62d885a3a75f291ea4b808da4ef4e47a68574e74dae8fe39aad61d228a62643c
4
+ data.tar.gz: 90e5fc29ea554392dcf93bb391a38361707c14306099b6654765e399d111ea9d
5
5
  SHA512:
6
- metadata.gz: 2a8ccf1146d380093e028f40453f2747e6f67e64e308eac8ee4bb5a0bd8abd6d572d42b4a537813c3edcdb46170292740d52b61e8384b47cac2a92895ec1f0d3
7
- data.tar.gz: 2b6deed0dfb579fc16637fab9bb82fe3889e100644b80219aa5dc4a59ab00681f17b59a64b5d1930bcf92551f03f04cff9dc714231ec38dcc3856eaf5aa43b5a
6
+ metadata.gz: 66c07c08d7094be0e9f2d802c01796529e0c14bcde067752aa629d7e3337218e0d6a08e7cfe08725659097fb0e3be90e7565a872a3c79dc96813afa6b235e4ab
7
+ data.tar.gz: a1d74a3408881c23f816818931685ec084bd2a0e9c114be212f8a059e37af8da882e9235f3780524e5e67557b3c9945f33b3ecab8535768e4737e972fc724d87
data/README.md CHANGED
@@ -8,7 +8,7 @@ See [lzws library](https://github.com/andrew-aladev/lzws).
8
8
 
9
9
  ## Installation
10
10
 
11
- Please install lzws library first, use latest 1.3.0+ version.
11
+ Please install lzws library first, use latest 1.4.0+ version.
12
12
 
13
13
  ```sh
14
14
  gem install ruby-lzws
@@ -13,10 +13,10 @@ end
13
13
 
14
14
  require_header "lzws/buffer.h"
15
15
  require_header "lzws/common.h", %w[lzws_result_t]
16
- require_header "lzws/compressor/common.h"
16
+ require_header "lzws/compressor/common.h", %w[lzws_compressor_options_t]
17
17
  require_header "lzws/compressor/main.h"
18
18
  require_header "lzws/compressor/state.h", %w[lzws_compressor_state_t]
19
- require_header "lzws/decompressor/common.h"
19
+ require_header "lzws/decompressor/common.h", %w[lzws_decompressor_options_t]
20
20
  require_header "lzws/decompressor/main.h"
21
21
  require_header "lzws/decompressor/state.h", %w[lzws_decompressor_state_t]
22
22
  require_header "lzws/file.h"
@@ -16,6 +16,7 @@ VALUE lzws_ext_resize_string_buffer(VALUE args)
16
16
  {
17
17
  VALUE buffer = rb_ary_entry(args, 0);
18
18
  VALUE length = rb_ary_entry(args, 1);
19
+
19
20
  return rb_str_resize(buffer, NUM2SIZET(length));
20
21
  }
21
22
 
@@ -23,8 +24,21 @@ void lzws_ext_buffer_exports(VALUE root_module)
23
24
  {
24
25
  VALUE module = rb_define_module_under(root_module, "Buffer");
25
26
 
26
- rb_define_const(module, "DEFAULT_SOURCE_BUFFER_LENGTH_FOR_COMPRESSOR", SIZET2NUM(LZWS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_COMPRESSOR));
27
- rb_define_const(module, "DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR", SIZET2NUM(LZWS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR));
28
- rb_define_const(module, "DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR", SIZET2NUM(LZWS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR));
29
- rb_define_const(module, "DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR", SIZET2NUM(LZWS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR));
27
+ rb_define_const(
28
+ module, "DEFAULT_SOURCE_BUFFER_LENGTH_FOR_COMPRESSOR", SIZET2NUM(LZWS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_COMPRESSOR));
29
+
30
+ rb_define_const(
31
+ module,
32
+ "DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR",
33
+ SIZET2NUM(LZWS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR));
34
+
35
+ rb_define_const(
36
+ module,
37
+ "DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR",
38
+ SIZET2NUM(LZWS_DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR));
39
+
40
+ rb_define_const(
41
+ module,
42
+ "DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR",
43
+ SIZET2NUM(LZWS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR));
30
44
  }
@@ -9,7 +9,8 @@
9
9
 
10
10
  // Results for errors listed in "lib/lzws/error" used in c extension.
11
11
 
12
- enum {
12
+ enum
13
+ {
13
14
  LZWS_EXT_ERROR_ALLOCATE_FAILED = 1,
14
15
  LZWS_EXT_ERROR_VALIDATE_FAILED,
15
16
 
@@ -1,16 +1,15 @@
1
1
  // Ruby bindings for lzws library.
2
2
  // Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
- #include "ruby/io.h"
4
+ #include "lzws_ext/io.h"
5
5
 
6
- #include <lzws/common.h>
7
6
  #include <lzws/file.h>
8
7
 
9
8
  #include "lzws_ext/error.h"
10
- #include "lzws_ext/io.h"
11
9
  #include "lzws_ext/macro.h"
12
10
  #include "lzws_ext/option.h"
13
11
  #include "ruby.h"
12
+ #include "ruby/io.h"
14
13
 
15
14
  #define GET_FILE(target) \
16
15
  Check_Type(target, T_FILE); \
@@ -58,9 +57,7 @@ VALUE lzws_ext_compress_io(VALUE LZWS_EXT_UNUSED(self), VALUE source, VALUE dest
58
57
  LZWS_EXT_GET_BUFFER_LENGTH_OPTION(options, destination_buffer_length);
59
58
 
60
59
  lzws_result_t result = lzws_compress_file(
61
- source_file, source_buffer_length,
62
- destination_file, destination_buffer_length,
63
- without_magic_header, max_code_bit_length, block_mode, msb, unaligned_bit_groups, quiet);
60
+ source_file, source_buffer_length, destination_file, destination_buffer_length, &compressor_options);
64
61
 
65
62
  if (result != 0) {
66
63
  lzws_ext_raise_error(get_file_error(result));
@@ -82,9 +79,7 @@ VALUE lzws_ext_decompress_io(VALUE LZWS_EXT_UNUSED(self), VALUE source, VALUE de
82
79
  LZWS_EXT_GET_BUFFER_LENGTH_OPTION(options, destination_buffer_length);
83
80
 
84
81
  lzws_result_t result = lzws_decompress_file(
85
- source_file, source_buffer_length,
86
- destination_file, destination_buffer_length,
87
- without_magic_header, msb, unaligned_bit_groups, quiet);
82
+ source_file, source_buffer_length, destination_file, destination_buffer_length, &decompressor_options);
88
83
 
89
84
  if (result != 0) {
90
85
  lzws_ext_raise_error(get_file_error(result));
@@ -3,6 +3,7 @@
3
3
 
4
4
  #include "lzws_ext/buffer.h"
5
5
  #include "lzws_ext/io.h"
6
+ #include "lzws_ext/option.h"
6
7
  #include "lzws_ext/stream/compressor.h"
7
8
  #include "lzws_ext/stream/decompressor.h"
8
9
  #include "lzws_ext/string.h"
@@ -14,6 +15,7 @@ void Init_lzws_ext()
14
15
 
15
16
  lzws_ext_buffer_exports(root_module);
16
17
  lzws_ext_io_exports(root_module);
18
+ lzws_ext_option_exports(root_module);
17
19
  lzws_ext_compressor_exports(root_module);
18
20
  lzws_ext_decompressor_exports(root_module);
19
21
  lzws_ext_string_exports(root_module);
@@ -6,30 +6,38 @@
6
6
  #include "lzws_ext/error.h"
7
7
  #include "ruby.h"
8
8
 
9
+ // -- values --
10
+
9
11
  static inline VALUE get_raw_option_value(VALUE options, const char* name)
10
12
  {
11
13
  return rb_funcall(options, rb_intern("[]"), 1, ID2SYM(rb_intern(name)));
12
14
  }
13
15
 
14
- bool lzws_ext_get_bool_option_value(VALUE options, const char* name)
16
+ void lzws_ext_get_bool_option(VALUE options, bool* option, const char* name)
15
17
  {
16
18
  VALUE raw_value = get_raw_option_value(options, name);
19
+ if (raw_value == Qnil) {
20
+ return;
21
+ }
17
22
 
18
23
  int raw_type = TYPE(raw_value);
19
24
  if (raw_type != T_TRUE && raw_type != T_FALSE) {
20
25
  lzws_ext_raise_error(LZWS_EXT_ERROR_VALIDATE_FAILED);
21
26
  }
22
27
 
23
- return raw_type == T_TRUE;
28
+ *option = raw_type == T_TRUE;
24
29
  }
25
30
 
26
- unsigned int lzws_ext_get_uint_option_value(VALUE options, const char* name)
31
+ void lzws_ext_get_max_code_bit_length_option(VALUE options, lzws_byte_fast_t* option, const char* name)
27
32
  {
28
33
  VALUE raw_value = get_raw_option_value(options, name);
34
+ if (raw_value == Qnil) {
35
+ return;
36
+ }
29
37
 
30
38
  Check_Type(raw_value, T_FIXNUM);
31
39
 
32
- return NUM2UINT(raw_value);
40
+ *option = NUM2UINT(raw_value);
33
41
  }
34
42
 
35
43
  size_t lzws_ext_get_size_option_value(VALUE options, const char* name)
@@ -40,3 +48,13 @@ size_t lzws_ext_get_size_option_value(VALUE options, const char* name)
40
48
 
41
49
  return NUM2SIZET(raw_value);
42
50
  }
51
+
52
+ // -- exports --
53
+
54
+ void lzws_ext_option_exports(VALUE root_module)
55
+ {
56
+ VALUE module = rb_define_module_under(root_module, "Option");
57
+
58
+ rb_define_const(module, "LOWEST_MAX_CODE_BIT_LENGTH", UINT2NUM(LZWS_LOWEST_MAX_CODE_BIT_LENGTH));
59
+ rb_define_const(module, "BIGGEST_MAX_CODE_BIT_LENGTH", UINT2NUM(LZWS_BIGGEST_MAX_CODE_BIT_LENGTH));
60
+ }
@@ -4,40 +4,44 @@
4
4
  #if !defined(LZWS_EXT_OPTIONS_H)
5
5
  #define LZWS_EXT_OPTIONS_H
6
6
 
7
+ #include <lzws/compressor/common.h>
8
+ #include <lzws/decompressor/common.h>
7
9
  #include <stdbool.h>
8
10
  #include <stdlib.h>
9
11
 
10
- #include "lzws_ext/common.h"
11
12
  #include "ruby.h"
12
13
 
13
- bool lzws_ext_get_bool_option_value(VALUE options, const char* name);
14
- unsigned int lzws_ext_get_uint_option_value(VALUE options, const char* name);
15
- size_t lzws_ext_get_size_option_value(VALUE options, const char* name);
14
+ void lzws_ext_get_bool_option(VALUE options, bool* option, const char* name);
15
+ void lzws_ext_get_max_code_bit_length_option(VALUE options, lzws_byte_fast_t* option, const char* name);
16
16
 
17
- #define LZWS_EXT_GET_BOOL_OPTION(options, name) \
18
- bool name = lzws_ext_get_bool_option_value(options, #name);
17
+ #define LZWS_EXT_GET_BOOL_OPTION(options, target_options, name) \
18
+ lzws_ext_get_bool_option(options, &target_options.name, #name);
19
19
 
20
- #define LZWS_EXT_GET_UINT_OPTION(options, type, name) \
21
- type name = lzws_ext_get_uint_option_value(options, #name);
20
+ #define LZWS_EXT_GET_MAX_CODE_BIT_LENGTH_OPTION(options, target_options, name) \
21
+ lzws_ext_get_max_code_bit_length_option(options, &target_options.name, #name);
22
22
 
23
- #define LZWS_EXT_GET_SIZE_OPTION(options, name) \
24
- size_t name = lzws_ext_get_size_option_value(options, #name);
23
+ #define LZWS_EXT_GET_COMPRESSOR_OPTIONS(options) \
24
+ lzws_compressor_options_t compressor_options = LZWS_COMPRESSOR_DEFAULT_OPTIONS; \
25
+ \
26
+ LZWS_EXT_GET_BOOL_OPTION(options, compressor_options, without_magic_header); \
27
+ LZWS_EXT_GET_MAX_CODE_BIT_LENGTH_OPTION(options, compressor_options, max_code_bit_length); \
28
+ LZWS_EXT_GET_BOOL_OPTION(options, compressor_options, block_mode); \
29
+ LZWS_EXT_GET_BOOL_OPTION(options, compressor_options, msb); \
30
+ LZWS_EXT_GET_BOOL_OPTION(options, compressor_options, unaligned_bit_groups); \
31
+ LZWS_EXT_GET_BOOL_OPTION(options, compressor_options, quiet);
25
32
 
26
- #define LZWS_EXT_GET_COMPRESSOR_OPTIONS(options) \
27
- LZWS_EXT_GET_BOOL_OPTION(options, without_magic_header); \
28
- LZWS_EXT_GET_UINT_OPTION(options, lzws_ext_byte_fast_t, max_code_bit_length); \
29
- LZWS_EXT_GET_BOOL_OPTION(options, block_mode); \
30
- LZWS_EXT_GET_BOOL_OPTION(options, msb); \
31
- LZWS_EXT_GET_BOOL_OPTION(options, unaligned_bit_groups); \
32
- LZWS_EXT_GET_BOOL_OPTION(options, quiet);
33
+ #define LZWS_EXT_GET_DECOMPRESSOR_OPTIONS(options) \
34
+ lzws_decompressor_options_t decompressor_options = LZWS_DECOMPRESSOR_DEFAULT_OPTIONS; \
35
+ \
36
+ LZWS_EXT_GET_BOOL_OPTION(options, decompressor_options, without_magic_header); \
37
+ LZWS_EXT_GET_BOOL_OPTION(options, decompressor_options, msb); \
38
+ LZWS_EXT_GET_BOOL_OPTION(options, decompressor_options, unaligned_bit_groups); \
39
+ LZWS_EXT_GET_BOOL_OPTION(options, decompressor_options, quiet);
33
40
 
34
- #define LZWS_EXT_GET_DECOMPRESSOR_OPTIONS(options) \
35
- LZWS_EXT_GET_BOOL_OPTION(options, without_magic_header); \
36
- LZWS_EXT_GET_BOOL_OPTION(options, msb); \
37
- LZWS_EXT_GET_BOOL_OPTION(options, unaligned_bit_groups); \
38
- LZWS_EXT_GET_BOOL_OPTION(options, quiet);
41
+ size_t lzws_ext_get_size_option_value(VALUE options, const char* name);
39
42
 
40
- #define LZWS_EXT_GET_BUFFER_LENGTH_OPTION(options, name) \
41
- LZWS_EXT_GET_SIZE_OPTION(options, name);
43
+ #define LZWS_EXT_GET_BUFFER_LENGTH_OPTION(options, name) size_t name = lzws_ext_get_size_option_value(options, #name);
44
+
45
+ void lzws_ext_option_exports(VALUE root_module);
42
46
 
43
47
  #endif // LZWS_EXT_OPTIONS_H
@@ -4,8 +4,6 @@
4
4
  #include "lzws_ext/stream/compressor.h"
5
5
 
6
6
  #include <lzws/buffer.h>
7
- #include <lzws/common.h>
8
- #include <lzws/compressor/common.h>
9
7
  #include <lzws/compressor/main.h>
10
8
  #include <lzws/compressor/state.h>
11
9
 
@@ -31,8 +29,7 @@ static void free_compressor(lzws_ext_compressor_t* compressor_ptr)
31
29
  VALUE lzws_ext_allocate_compressor(VALUE klass)
32
30
  {
33
31
  lzws_ext_compressor_t* compressor_ptr;
34
-
35
- VALUE self = Data_Make_Struct(klass, lzws_ext_compressor_t, NULL, free_compressor, compressor_ptr);
32
+ VALUE self = Data_Make_Struct(klass, lzws_ext_compressor_t, NULL, free_compressor, compressor_ptr);
36
33
 
37
34
  compressor_ptr->state_ptr = NULL;
38
35
  compressor_ptr->destination_buffer = NULL;
@@ -56,10 +53,7 @@ VALUE lzws_ext_initialize_compressor(VALUE self, VALUE options)
56
53
 
57
54
  lzws_compressor_state_t* state_ptr;
58
55
 
59
- lzws_result_t result = lzws_compressor_get_initial_state(
60
- &state_ptr,
61
- without_magic_header, max_code_bit_length, block_mode, msb, unaligned_bit_groups, quiet);
62
-
56
+ lzws_result_t result = lzws_compressor_get_initial_state(&state_ptr, &compressor_options);
63
57
  if (result != 0) {
64
58
  switch (result) {
65
59
  case LZWS_COMPRESSOR_ALLOCATE_FAILED:
@@ -73,7 +67,9 @@ VALUE lzws_ext_initialize_compressor(VALUE self, VALUE options)
73
67
 
74
68
  lzws_ext_byte_t* destination_buffer;
75
69
 
76
- result = lzws_create_destination_buffer_for_compressor(&destination_buffer, &destination_buffer_length, quiet);
70
+ result = lzws_create_destination_buffer_for_compressor(
71
+ &destination_buffer, &destination_buffer_length, compressor_options.quiet);
72
+
77
73
  if (result != 0) {
78
74
  lzws_compressor_free_state(state_ptr);
79
75
  lzws_ext_raise_error(LZWS_EXT_ERROR_ALLOCATE_FAILED);
@@ -98,7 +94,7 @@ VALUE lzws_ext_initialize_compressor(VALUE self, VALUE options)
98
94
  \
99
95
  const char* source = RSTRING_PTR(source_value); \
100
96
  size_t source_length = RSTRING_LEN(source_value); \
101
- lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*)source; \
97
+ lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*) source; \
102
98
  size_t remaining_source_length = source_length;
103
99
 
104
100
  VALUE lzws_ext_compress(VALUE self, VALUE source_value)
@@ -109,12 +105,12 @@ VALUE lzws_ext_compress(VALUE self, VALUE source_value)
109
105
 
110
106
  lzws_result_t result = lzws_compress(
111
107
  compressor_ptr->state_ptr,
112
- &remaining_source, &remaining_source_length,
113
- &compressor_ptr->remaining_destination_buffer, &compressor_ptr->remaining_destination_buffer_length);
108
+ &remaining_source,
109
+ &remaining_source_length,
110
+ &compressor_ptr->remaining_destination_buffer,
111
+ &compressor_ptr->remaining_destination_buffer_length);
114
112
 
115
- if (
116
- result != 0 &&
117
- result != LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) {
113
+ if (result != 0 && result != LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) {
118
114
  lzws_ext_raise_error(LZWS_EXT_ERROR_UNEXPECTED);
119
115
  }
120
116
 
@@ -131,17 +127,14 @@ VALUE lzws_ext_compressor_finish(VALUE self)
131
127
 
132
128
  lzws_result_t result = lzws_compressor_finish(
133
129
  compressor_ptr->state_ptr,
134
- &compressor_ptr->remaining_destination_buffer, &compressor_ptr->remaining_destination_buffer_length);
130
+ &compressor_ptr->remaining_destination_buffer,
131
+ &compressor_ptr->remaining_destination_buffer_length);
135
132
 
136
- if (
137
- result != 0 &&
138
- result != LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) {
133
+ if (result != 0 && result != LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) {
139
134
  lzws_ext_raise_error(LZWS_EXT_ERROR_UNEXPECTED);
140
135
  }
141
136
 
142
- VALUE needs_more_destination = result == LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION ? Qtrue : Qfalse;
143
-
144
- return needs_more_destination;
137
+ return result == LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION ? Qtrue : Qfalse;
145
138
  }
146
139
 
147
140
  VALUE lzws_ext_compressor_read_result(VALUE self)
@@ -153,10 +146,9 @@ VALUE lzws_ext_compressor_read_result(VALUE self)
153
146
  size_t destination_buffer_length = compressor_ptr->destination_buffer_length;
154
147
  size_t remaining_destination_buffer_length = compressor_ptr->remaining_destination_buffer_length;
155
148
 
156
- const char* result = (const char*)destination_buffer;
149
+ const char* result = (const char*) destination_buffer;
157
150
  size_t result_length = destination_buffer_length - remaining_destination_buffer_length;
158
-
159
- VALUE result_value = rb_str_new(result, result_length);
151
+ VALUE result_value = rb_str_new(result, result_length);
160
152
 
161
153
  compressor_ptr->remaining_destination_buffer = destination_buffer;
162
154
  compressor_ptr->remaining_destination_buffer_length = destination_buffer_length;
@@ -10,7 +10,8 @@
10
10
  #include "lzws_ext/common.h"
11
11
  #include "ruby.h"
12
12
 
13
- typedef struct {
13
+ typedef struct
14
+ {
14
15
  lzws_compressor_state_t* state_ptr;
15
16
  lzws_ext_byte_t* destination_buffer;
16
17
  size_t destination_buffer_length;
@@ -4,8 +4,6 @@
4
4
  #include "lzws_ext/stream/decompressor.h"
5
5
 
6
6
  #include <lzws/buffer.h>
7
- #include <lzws/common.h>
8
- #include <lzws/decompressor/common.h>
9
7
  #include <lzws/decompressor/main.h>
10
8
  #include <lzws/decompressor/state.h>
11
9
 
@@ -31,7 +29,6 @@ static void free_decompressor(lzws_ext_decompressor_t* decompressor_ptr)
31
29
  VALUE lzws_ext_allocate_decompressor(VALUE klass)
32
30
  {
33
31
  lzws_ext_decompressor_t* decompressor_ptr;
34
-
35
32
  VALUE self = Data_Make_Struct(klass, lzws_ext_decompressor_t, NULL, free_decompressor, decompressor_ptr);
36
33
 
37
34
  decompressor_ptr->state_ptr = NULL;
@@ -56,10 +53,7 @@ VALUE lzws_ext_initialize_decompressor(VALUE self, VALUE options)
56
53
 
57
54
  lzws_decompressor_state_t* state_ptr;
58
55
 
59
- lzws_result_t result = lzws_decompressor_get_initial_state(
60
- &state_ptr,
61
- without_magic_header, msb, unaligned_bit_groups, quiet);
62
-
56
+ lzws_result_t result = lzws_decompressor_get_initial_state(&state_ptr, &decompressor_options);
63
57
  if (result != 0) {
64
58
  switch (result) {
65
59
  case LZWS_DECOMPRESSOR_ALLOCATE_FAILED:
@@ -71,7 +65,9 @@ VALUE lzws_ext_initialize_decompressor(VALUE self, VALUE options)
71
65
 
72
66
  lzws_ext_byte_t* destination_buffer;
73
67
 
74
- result = lzws_create_destination_buffer_for_decompressor(&destination_buffer, &destination_buffer_length, quiet);
68
+ result = lzws_create_destination_buffer_for_decompressor(
69
+ &destination_buffer, &destination_buffer_length, decompressor_options.quiet);
70
+
75
71
  if (result != 0) {
76
72
  lzws_decompressor_free_state(state_ptr);
77
73
  lzws_ext_raise_error(LZWS_EXT_ERROR_ALLOCATE_FAILED);
@@ -96,7 +92,7 @@ VALUE lzws_ext_initialize_decompressor(VALUE self, VALUE options)
96
92
  \
97
93
  const char* source = RSTRING_PTR(source_value); \
98
94
  size_t source_length = RSTRING_LEN(source_value); \
99
- lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*)source; \
95
+ lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*) source; \
100
96
  size_t remaining_source_length = source_length;
101
97
 
102
98
  VALUE lzws_ext_decompress(VALUE self, VALUE source_value)
@@ -107,12 +103,12 @@ VALUE lzws_ext_decompress(VALUE self, VALUE source_value)
107
103
 
108
104
  lzws_result_t result = lzws_decompress(
109
105
  decompressor_ptr->state_ptr,
110
- &remaining_source, &remaining_source_length,
111
- &decompressor_ptr->remaining_destination_buffer, &decompressor_ptr->remaining_destination_buffer_length);
106
+ &remaining_source,
107
+ &remaining_source_length,
108
+ &decompressor_ptr->remaining_destination_buffer,
109
+ &decompressor_ptr->remaining_destination_buffer_length);
112
110
 
113
- if (
114
- result != 0 &&
115
- result != LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
111
+ if (result != 0 && result != LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
116
112
  switch (result) {
117
113
  case LZWS_DECOMPRESSOR_INVALID_MAGIC_HEADER:
118
114
  case LZWS_DECOMPRESSOR_INVALID_MAX_CODE_BIT_LENGTH:
@@ -139,10 +135,9 @@ VALUE lzws_ext_decompressor_read_result(VALUE self)
139
135
  size_t destination_buffer_length = decompressor_ptr->destination_buffer_length;
140
136
  size_t remaining_destination_buffer_length = decompressor_ptr->remaining_destination_buffer_length;
141
137
 
142
- const char* result = (const char*)destination_buffer;
138
+ const char* result = (const char*) destination_buffer;
143
139
  size_t result_length = destination_buffer_length - remaining_destination_buffer_length;
144
-
145
- VALUE result_value = rb_str_new(result, result_length);
140
+ VALUE result_value = rb_str_new(result, result_length);
146
141
 
147
142
  decompressor_ptr->remaining_destination_buffer = destination_buffer;
148
143
  decompressor_ptr->remaining_destination_buffer_length = destination_buffer_length;
@@ -10,7 +10,8 @@
10
10
  #include "lzws_ext/common.h"
11
11
  #include "ruby.h"
12
12
 
13
- typedef struct {
13
+ typedef struct
14
+ {
14
15
  lzws_decompressor_state_t* state_ptr;
15
16
  lzws_ext_byte_t* destination_buffer;
16
17
  size_t destination_buffer_length;
@@ -4,11 +4,8 @@
4
4
  #include "lzws_ext/string.h"
5
5
 
6
6
  #include <lzws/buffer.h>
7
- #include <lzws/common.h>
8
- #include <lzws/compressor/common.h>
9
7
  #include <lzws/compressor/main.h>
10
8
  #include <lzws/compressor/state.h>
11
- #include <lzws/decompressor/common.h>
12
9
  #include <lzws/decompressor/main.h>
13
10
  #include <lzws/decompressor/state.h>
14
11
  #include <stdlib.h>
@@ -22,8 +19,10 @@
22
19
  // -- buffer --
23
20
 
24
21
  static inline lzws_ext_result_t increase_destination_buffer(
25
- VALUE destination_value, size_t destination_length,
26
- size_t* remaining_destination_buffer_length_ptr, size_t destination_buffer_length)
22
+ VALUE destination_value,
23
+ size_t destination_length,
24
+ size_t* remaining_destination_buffer_length_ptr,
25
+ size_t destination_buffer_length)
27
26
  {
28
27
  if (*remaining_destination_buffer_length_ptr == destination_buffer_length) {
29
28
  // We want to write more data at once, than buffer has.
@@ -52,49 +51,46 @@ static inline lzws_ext_result_t increase_destination_buffer(
52
51
 
53
52
  // -- compress --
54
53
 
55
- #define BUFFERED_COMPRESS(function, ...) \
56
- while (true) { \
57
- lzws_ext_byte_t* remaining_destination_buffer = (lzws_ext_byte_t*)RSTRING_PTR(destination_value) + destination_length; \
58
- size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length; \
59
- \
60
- result = function(__VA_ARGS__, &remaining_destination_buffer, &remaining_destination_buffer_length); \
61
- \
62
- if ( \
63
- result != 0 && \
64
- result != LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) { \
65
- return LZWS_EXT_ERROR_UNEXPECTED; \
66
- } \
67
- \
68
- destination_length += prev_remaining_destination_buffer_length - remaining_destination_buffer_length; \
69
- \
70
- if (result == LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) { \
71
- ext_result = increase_destination_buffer( \
72
- destination_value, destination_length, \
73
- &remaining_destination_buffer_length, destination_buffer_length); \
74
- \
75
- if (ext_result != 0) { \
76
- return ext_result; \
77
- } \
78
- \
79
- continue; \
80
- } \
81
- \
82
- break; \
54
+ #define BUFFERED_COMPRESS(function, ...) \
55
+ while (true) { \
56
+ lzws_ext_byte_t* remaining_destination_buffer = \
57
+ (lzws_ext_byte_t*) RSTRING_PTR(destination_value) + destination_length; \
58
+ size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length; \
59
+ \
60
+ result = function(__VA_ARGS__, &remaining_destination_buffer, &remaining_destination_buffer_length); \
61
+ if (result != 0 && result != LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) { \
62
+ return LZWS_EXT_ERROR_UNEXPECTED; \
63
+ } \
64
+ \
65
+ destination_length += prev_remaining_destination_buffer_length - remaining_destination_buffer_length; \
66
+ \
67
+ if (result == LZWS_COMPRESSOR_NEEDS_MORE_DESTINATION) { \
68
+ ext_result = increase_destination_buffer( \
69
+ destination_value, destination_length, &remaining_destination_buffer_length, destination_buffer_length); \
70
+ \
71
+ if (ext_result != 0) { \
72
+ return ext_result; \
73
+ } \
74
+ \
75
+ continue; \
76
+ } \
77
+ \
78
+ break; \
83
79
  }
84
80
 
85
81
  static inline lzws_ext_result_t compress(
86
82
  lzws_compressor_state_t* state_ptr,
87
- const char* source, size_t source_length,
88
- VALUE destination_value, size_t destination_buffer_length)
83
+ const char* source,
84
+ size_t source_length,
85
+ VALUE destination_value,
86
+ size_t destination_buffer_length)
89
87
  {
90
88
  lzws_result_t result;
91
89
  lzws_ext_result_t ext_result;
92
-
93
- lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*)source;
94
- size_t remaining_source_length = source_length;
95
-
96
- size_t destination_length = 0;
97
- size_t remaining_destination_buffer_length = destination_buffer_length;
90
+ lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*) source;
91
+ size_t remaining_source_length = source_length;
92
+ size_t destination_length = 0;
93
+ size_t remaining_destination_buffer_length = destination_buffer_length;
98
94
 
99
95
  BUFFERED_COMPRESS(lzws_compress, state_ptr, &remaining_source, &remaining_source_length);
100
96
  BUFFERED_COMPRESS(lzws_compressor_finish, state_ptr);
@@ -118,10 +114,7 @@ VALUE lzws_ext_compress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value,
118
114
 
119
115
  lzws_compressor_state_t* state_ptr;
120
116
 
121
- lzws_result_t result = lzws_compressor_get_initial_state(
122
- &state_ptr,
123
- without_magic_header, max_code_bit_length, block_mode, msb, unaligned_bit_groups, quiet);
124
-
117
+ lzws_result_t result = lzws_compressor_get_initial_state(&state_ptr, &compressor_options);
125
118
  if (result != 0) {
126
119
  switch (result) {
127
120
  case LZWS_COMPRESSOR_ALLOCATE_FAILED:
@@ -145,10 +138,8 @@ VALUE lzws_ext_compress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value,
145
138
  lzws_ext_raise_error(LZWS_EXT_ERROR_ALLOCATE_FAILED);
146
139
  }
147
140
 
148
- lzws_ext_result_t ext_result = compress(
149
- state_ptr,
150
- source, source_length,
151
- destination_value, destination_buffer_length);
141
+ lzws_ext_result_t ext_result =
142
+ compress(state_ptr, source, source_length, destination_value, destination_buffer_length);
152
143
 
153
144
  lzws_compressor_free_state(state_ptr);
154
145
 
@@ -163,30 +154,31 @@ VALUE lzws_ext_compress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value,
163
154
 
164
155
  static inline lzws_ext_result_t decompress(
165
156
  lzws_decompressor_state_t* state_ptr,
166
- const char* source, size_t source_length,
167
- VALUE destination_value, size_t destination_buffer_length)
157
+ const char* source,
158
+ size_t source_length,
159
+ VALUE destination_value,
160
+ size_t destination_buffer_length)
168
161
  {
169
162
  lzws_result_t result;
170
163
  lzws_ext_result_t ext_result;
171
-
172
- lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*)source;
173
- size_t remaining_source_length = source_length;
174
-
175
- size_t destination_length = 0;
176
- size_t remaining_destination_buffer_length = destination_buffer_length;
164
+ lzws_ext_byte_t* remaining_source = (lzws_ext_byte_t*) source;
165
+ size_t remaining_source_length = source_length;
166
+ size_t destination_length = 0;
167
+ size_t remaining_destination_buffer_length = destination_buffer_length;
177
168
 
178
169
  while (true) {
179
- lzws_ext_byte_t* remaining_destination_buffer = (lzws_ext_byte_t*)RSTRING_PTR(destination_value) + destination_length;
180
- size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
170
+ lzws_ext_byte_t* remaining_destination_buffer =
171
+ (lzws_ext_byte_t*) RSTRING_PTR(destination_value) + destination_length;
172
+ size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
181
173
 
182
174
  result = lzws_decompress(
183
175
  state_ptr,
184
- &remaining_source, &remaining_source_length,
185
- &remaining_destination_buffer, &remaining_destination_buffer_length);
176
+ &remaining_source,
177
+ &remaining_source_length,
178
+ &remaining_destination_buffer,
179
+ &remaining_destination_buffer_length);
186
180
 
187
- if (
188
- result != 0 &&
189
- result != LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
181
+ if (result != 0 && result != LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
190
182
  switch (result) {
191
183
  case LZWS_DECOMPRESSOR_INVALID_MAGIC_HEADER:
192
184
  case LZWS_DECOMPRESSOR_INVALID_MAX_CODE_BIT_LENGTH:
@@ -202,8 +194,7 @@ static inline lzws_ext_result_t decompress(
202
194
 
203
195
  if (result == LZWS_DECOMPRESSOR_NEEDS_MORE_DESTINATION) {
204
196
  ext_result = increase_destination_buffer(
205
- destination_value, destination_length,
206
- &remaining_destination_buffer_length, destination_buffer_length);
197
+ destination_value, destination_length, &remaining_destination_buffer_length, destination_buffer_length);
207
198
 
208
199
  if (ext_result != 0) {
209
200
  return ext_result;
@@ -234,10 +225,7 @@ VALUE lzws_ext_decompress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value
234
225
 
235
226
  lzws_decompressor_state_t* state_ptr;
236
227
 
237
- lzws_result_t result = lzws_decompressor_get_initial_state(
238
- &state_ptr,
239
- without_magic_header, msb, unaligned_bit_groups, quiet);
240
-
228
+ lzws_result_t result = lzws_decompressor_get_initial_state(&state_ptr, &decompressor_options);
241
229
  if (result != 0) {
242
230
  switch (result) {
243
231
  case LZWS_DECOMPRESSOR_ALLOCATE_FAILED:
@@ -259,10 +247,8 @@ VALUE lzws_ext_decompress_string(VALUE LZWS_EXT_UNUSED(self), VALUE source_value
259
247
  lzws_ext_raise_error(LZWS_EXT_ERROR_ALLOCATE_FAILED);
260
248
  }
261
249
 
262
- lzws_ext_result_t ext_result = decompress(
263
- state_ptr,
264
- source, source_length,
265
- destination_value, destination_buffer_length);
250
+ lzws_ext_result_t ext_result =
251
+ decompress(state_ptr, source, source_length, destination_value, destination_buffer_length);
266
252
 
267
253
  lzws_decompressor_free_state(state_ptr);
268
254
 
@@ -8,45 +8,37 @@ require_relative "validation"
8
8
 
9
9
  module LZWS
10
10
  module Option
11
- # Default options will be compatible with UNIX compress.
12
-
13
- DEFAULT_BUFFER_LENGTH = 0
14
- LOWEST_MAX_CODE_BIT_LENGTH = 9
15
- BIGGEST_MAX_CODE_BIT_LENGTH = 16
16
-
17
- DECOMPRESSOR_DEFAULTS = {
18
- :without_magic_header => false,
19
- :msb => false,
20
- :unaligned_bit_groups => false,
21
- :quiet => false
22
- }
23
- .freeze
24
-
25
- COMPRESSOR_DEFAULTS = DECOMPRESSOR_DEFAULTS.merge(
26
- :max_code_bit_length => BIGGEST_MAX_CODE_BIT_LENGTH,
27
- :block_mode => true
28
- )
29
- .freeze
11
+ DEFAULT_BUFFER_LENGTH = 0
30
12
 
31
13
  def self.get_compressor_options(options, buffer_length_names)
32
14
  Validation.validate_hash options
33
15
 
34
16
  buffer_length_defaults = buffer_length_names.each_with_object({}) { |name, defaults| defaults[name] = DEFAULT_BUFFER_LENGTH }
35
- options = COMPRESSOR_DEFAULTS.merge(buffer_length_defaults).merge options
17
+ options = buffer_length_defaults.merge options
36
18
 
37
19
  buffer_length_names.each { |name| Validation.validate_not_negative_integer options[name] }
38
20
 
39
21
  max_code_bit_length = options[:max_code_bit_length]
40
- Validation.validate_positive_integer max_code_bit_length
22
+ unless max_code_bit_length.nil?
23
+ Validation.validate_positive_integer max_code_bit_length
24
+ raise ValidateError, "invalid max code bit length" if
25
+ max_code_bit_length < LOWEST_MAX_CODE_BIT_LENGTH || max_code_bit_length > BIGGEST_MAX_CODE_BIT_LENGTH
26
+ end
41
27
 
42
- raise ValidateError, "invalid max code bit length" if
43
- max_code_bit_length < LOWEST_MAX_CODE_BIT_LENGTH || max_code_bit_length > BIGGEST_MAX_CODE_BIT_LENGTH
28
+ without_magic_header = options[:without_magic_header]
29
+ Validation.validate_bool without_magic_header unless without_magic_header.nil?
44
30
 
45
- Validation.validate_bool options[:without_magic_header]
46
- Validation.validate_bool options[:block_mode]
47
- Validation.validate_bool options[:msb]
48
- Validation.validate_bool options[:unaligned_bit_groups]
49
- Validation.validate_bool options[:quiet]
31
+ block_mode = options[:block_mode]
32
+ Validation.validate_bool block_mode unless block_mode.nil?
33
+
34
+ msb = options[:msb]
35
+ Validation.validate_bool msb unless msb.nil?
36
+
37
+ unaligned_bit_groups = options[:unaligned_bit_groups]
38
+ Validation.validate_bool unaligned_bit_groups unless unaligned_bit_groups.nil?
39
+
40
+ quiet = options[:quiet]
41
+ Validation.validate_bool quiet unless quiet.nil?
50
42
 
51
43
  options
52
44
  end
@@ -55,14 +47,21 @@ module LZWS
55
47
  Validation.validate_hash options
56
48
 
57
49
  buffer_length_defaults = buffer_length_names.each_with_object({}) { |name, defaults| defaults[name] = DEFAULT_BUFFER_LENGTH }
58
- options = DECOMPRESSOR_DEFAULTS.merge(buffer_length_defaults).merge options
50
+ options = buffer_length_defaults.merge options
59
51
 
60
52
  buffer_length_names.each { |name| Validation.validate_not_negative_integer options[name] }
61
53
 
62
- Validation.validate_bool options[:without_magic_header]
63
- Validation.validate_bool options[:msb]
64
- Validation.validate_bool options[:unaligned_bit_groups]
65
- Validation.validate_bool options[:quiet]
54
+ without_magic_header = options[:without_magic_header]
55
+ Validation.validate_bool without_magic_header unless without_magic_header.nil?
56
+
57
+ msb = options[:msb]
58
+ Validation.validate_bool msb unless msb.nil?
59
+
60
+ unaligned_bit_groups = options[:unaligned_bit_groups]
61
+ Validation.validate_bool unaligned_bit_groups unless unaligned_bit_groups.nil?
62
+
63
+ quiet = options[:quiet]
64
+ Validation.validate_bool quiet unless quiet.nil?
66
65
 
67
66
  options
68
67
  end
@@ -2,5 +2,5 @@
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
4
  module LZWS
5
- VERSION = "1.1.7".freeze
5
+ VERSION = "1.2.0".freeze
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lzws
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Aladjev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-09 00:00:00.000000000 Z
11
+ date: 2020-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: codecov
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.12'
47
+ version: '5.14'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.12'
54
+ version: '5.14'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: ocg
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,28 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.75'
103
+ version: '0.93'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.75'
110
+ version: '0.93'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubocop-performance
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.5'
117
+ version: '1.8'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '1.5'
124
+ version: '1.8'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement