ruby-brs 1.0.1 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,6 @@
2
2
  // Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
4
  #include "brs_ext/buffer.h"
5
- #include "brs_ext/common.h"
6
5
  #include "brs_ext/io.h"
7
6
  #include "brs_ext/option.h"
8
7
  #include "brs_ext/stream/compressor.h"
@@ -5,13 +5,12 @@
5
5
 
6
6
  #include <brotli/decode.h>
7
7
  #include <brotli/encode.h>
8
- #include <stdbool.h>
9
- #include <stdint.h>
10
8
 
11
- #include "brs_ext/common.h"
12
9
  #include "brs_ext/error.h"
13
10
  #include "ruby.h"
14
11
 
12
+ // -- values --
13
+
15
14
  static inline VALUE get_raw_option_value(VALUE options, const char* name)
16
15
  {
17
16
  return rb_funcall(options, rb_intern("[]"), 1, ID2SYM(rb_intern(name)));
@@ -27,14 +26,14 @@ static inline bool get_bool_option_value(VALUE raw_value)
27
26
  return raw_type == T_TRUE;
28
27
  }
29
28
 
30
- static inline unsigned long get_fixnum_option_value(VALUE raw_value)
29
+ static inline unsigned int get_uint_option_value(VALUE raw_value)
31
30
  {
32
31
  Check_Type(raw_value, T_FIXNUM);
33
32
 
34
33
  return NUM2UINT(raw_value);
35
34
  }
36
35
 
37
- static inline uint_fast8_t get_mode_option_value(VALUE raw_value)
36
+ static inline BrotliEncoderMode get_mode_option_value(VALUE raw_value)
38
37
  {
39
38
  Check_Type(raw_value, T_SYMBOL);
40
39
 
@@ -68,8 +67,8 @@ void brs_ext_get_option(VALUE options, brs_ext_option_t* option, brs_ext_option_
68
67
  case BRS_EXT_OPTION_TYPE_BOOL:
69
68
  value = get_bool_option_value(raw_value) ? 1 : 0;
70
69
  break;
71
- case BRS_EXT_OPTION_TYPE_FIXNUM:
72
- value = (brs_ext_option_value_t)get_fixnum_option_value(raw_value);
70
+ case BRS_EXT_OPTION_TYPE_UINT:
71
+ value = (brs_ext_option_value_t)get_uint_option_value(raw_value);
73
72
  break;
74
73
  case BRS_EXT_OPTION_TYPE_MODE:
75
74
  value = (brs_ext_option_value_t)get_mode_option_value(raw_value);
@@ -81,13 +80,17 @@ void brs_ext_get_option(VALUE options, brs_ext_option_t* option, brs_ext_option_
81
80
  option->value = value;
82
81
  }
83
82
 
84
- unsigned long brs_ext_get_fixnum_option_value(VALUE options, const char* name)
83
+ size_t brs_ext_get_size_option_value(VALUE options, const char* name)
85
84
  {
86
85
  VALUE raw_value = get_raw_option_value(options, name);
87
86
 
88
- return get_fixnum_option_value(raw_value);
87
+ Check_Type(raw_value, T_FIXNUM);
88
+
89
+ return NUM2SIZET(raw_value);
89
90
  }
90
91
 
92
+ // -- set params --
93
+
91
94
  #define SET_OPTION_VALUE(function, state_ptr, param, option) \
92
95
  if (option.has_value && !function(state_ptr, param, option.value)) { \
93
96
  return BRS_EXT_ERROR_VALIDATE_FAILED; \
@@ -120,24 +123,25 @@ brs_ext_result_t brs_ext_set_decompressor_options(BrotliDecoderState* state_ptr,
120
123
  return 0;
121
124
  }
122
125
 
126
+ // -- exports --
127
+
128
+ #define EXPORT_PARAM_BOUNDS(module, param, name) \
129
+ rb_define_const(module, "MIN_" name, UINT2NUM(BROTLI_MIN_##param)); \
130
+ rb_define_const(module, "MAX_" name, UINT2NUM(BROTLI_MAX_##param));
131
+
123
132
  void brs_ext_option_exports(VALUE root_module)
124
133
  {
125
- VALUE option = rb_define_module_under(root_module, "Option");
134
+ VALUE module = rb_define_module_under(root_module, "Option");
126
135
 
127
136
  VALUE modes = rb_ary_new_from_args(
128
137
  3,
129
138
  ID2SYM(rb_intern("text")),
130
139
  ID2SYM(rb_intern("font")),
131
140
  ID2SYM(rb_intern("generic")));
132
- rb_define_const(option, "MODES", modes);
141
+ rb_define_const(module, "MODES", modes);
133
142
  RB_GC_GUARD(modes);
134
143
 
135
- rb_define_const(option, "MIN_QUALITY", UINT2NUM(BROTLI_MIN_QUALITY));
136
- rb_define_const(option, "MAX_QUALITY", UINT2NUM(BROTLI_MAX_QUALITY));
137
-
138
- rb_define_const(option, "MIN_LGWIN", UINT2NUM(BROTLI_MIN_WINDOW_BITS));
139
- rb_define_const(option, "MAX_LGWIN", UINT2NUM(BROTLI_MAX_WINDOW_BITS));
140
-
141
- rb_define_const(option, "MIN_LGBLOCK", UINT2NUM(BROTLI_MIN_INPUT_BLOCK_BITS));
142
- rb_define_const(option, "MAX_LGBLOCK", UINT2NUM(BROTLI_MAX_INPUT_BLOCK_BITS));
144
+ EXPORT_PARAM_BOUNDS(module, QUALITY, "QUALITY");
145
+ EXPORT_PARAM_BOUNDS(module, WINDOW_BITS, "LGWIN");
146
+ EXPORT_PARAM_BOUNDS(module, INPUT_BLOCK_BITS, "LGBLOCK");
143
147
  }
@@ -7,7 +7,6 @@
7
7
  #include <brotli/decode.h>
8
8
  #include <brotli/encode.h>
9
9
  #include <stdbool.h>
10
- #include <stdint.h>
11
10
  #include <stdlib.h>
12
11
 
13
12
  #include "brs_ext/common.h"
@@ -18,12 +17,12 @@
18
17
 
19
18
  enum {
20
19
  BRS_EXT_OPTION_TYPE_BOOL = 1,
21
- BRS_EXT_OPTION_TYPE_FIXNUM,
20
+ BRS_EXT_OPTION_TYPE_UINT,
22
21
  BRS_EXT_OPTION_TYPE_MODE
23
22
  };
24
23
 
25
- typedef uint_fast8_t brs_ext_option_type_t;
26
- typedef uint32_t brs_ext_option_value_t;
24
+ typedef brs_ext_byte_fast_t brs_ext_option_type_t;
25
+ typedef uint32_t brs_ext_option_value_t;
27
26
 
28
27
  typedef struct {
29
28
  bool has_value;
@@ -54,11 +53,11 @@ void brs_ext_get_option(VALUE options, brs_ext_option_t* option, brs_ext_option_
54
53
  brs_ext_compressor_options_t compressor_options; \
55
54
  \
56
55
  BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_MODE, mode); \
57
- BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_FIXNUM, quality); \
58
- BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_FIXNUM, lgwin); \
59
- BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_FIXNUM, lgblock); \
56
+ BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_UINT, quality); \
57
+ BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_UINT, lgwin); \
58
+ BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_UINT, lgblock); \
60
59
  BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_BOOL, disable_literal_context_modeling); \
61
- BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_FIXNUM, size_hint); \
60
+ BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_UINT, size_hint); \
62
61
  BRS_EXT_GET_OPTION(options, compressor_options, BRS_EXT_OPTION_TYPE_BOOL, large_window);
63
62
 
64
63
  #define BRS_EXT_GET_DECOMPRESSOR_OPTIONS(options) \
@@ -67,10 +66,10 @@ void brs_ext_get_option(VALUE options, brs_ext_option_t* option, brs_ext_option_
67
66
  BRS_EXT_GET_OPTION(options, decompressor_options, BRS_EXT_OPTION_TYPE_BOOL, disable_ring_buffer_reallocation); \
68
67
  BRS_EXT_GET_OPTION(options, decompressor_options, BRS_EXT_OPTION_TYPE_BOOL, large_window);
69
68
 
70
- unsigned long brs_ext_get_fixnum_option_value(VALUE options, const char* name);
69
+ size_t brs_ext_get_size_option_value(VALUE options, const char* name);
71
70
 
72
71
  #define BRS_EXT_GET_BUFFER_LENGTH_OPTION(options, name) \
73
- size_t name = brs_ext_get_fixnum_option_value(options, #name);
72
+ size_t name = brs_ext_get_size_option_value(options, #name);
74
73
 
75
74
  brs_ext_result_t brs_ext_set_compressor_options(BrotliEncoderState* state_ptr, brs_ext_compressor_options_t* options);
76
75
  brs_ext_result_t brs_ext_set_decompressor_options(BrotliDecoderState* state_ptr, brs_ext_decompressor_options_t* options);
@@ -4,11 +4,9 @@
4
4
  #include "brs_ext/stream/compressor.h"
5
5
 
6
6
  #include <brotli/encode.h>
7
- #include <stdint.h>
8
- #include <stdlib.h>
7
+ #include <brotli/types.h>
9
8
 
10
9
  #include "brs_ext/buffer.h"
11
- #include "brs_ext/common.h"
12
10
  #include "brs_ext/error.h"
13
11
  #include "brs_ext/option.h"
14
12
  #include "ruby.h"
@@ -20,7 +18,7 @@ static void free_compressor(brs_ext_compressor_t* compressor_ptr)
20
18
  BrotliEncoderDestroyInstance(state_ptr);
21
19
  }
22
20
 
23
- uint8_t* destination_buffer = compressor_ptr->destination_buffer;
21
+ brs_ext_byte_t* destination_buffer = compressor_ptr->destination_buffer;
24
22
  if (destination_buffer != NULL) {
25
23
  free(destination_buffer);
26
24
  }
@@ -69,7 +67,7 @@ VALUE brs_ext_initialize_compressor(VALUE self, VALUE options)
69
67
  destination_buffer_length = BRS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_COMPRESSOR;
70
68
  }
71
69
 
72
- uint8_t* destination_buffer = malloc(destination_buffer_length);
70
+ brs_ext_byte_t* destination_buffer = malloc(destination_buffer_length);
73
71
  if (destination_buffer == NULL) {
74
72
  BrotliEncoderDestroyInstance(state_ptr);
75
73
  brs_ext_raise_error(BRS_EXT_ERROR_ALLOCATE_FAILED);
@@ -89,13 +87,13 @@ VALUE brs_ext_initialize_compressor(VALUE self, VALUE options)
89
87
  brs_ext_raise_error(BRS_EXT_ERROR_USED_AFTER_CLOSE); \
90
88
  }
91
89
 
92
- #define GET_SOURCE_DATA(source_value) \
93
- Check_Type(source_value, T_STRING); \
94
- \
95
- const char* source = RSTRING_PTR(source_value); \
96
- size_t source_length = RSTRING_LEN(source_value); \
97
- const uint8_t* remaining_source = (const uint8_t*)source; \
98
- size_t remaining_source_length = source_length;
90
+ #define GET_SOURCE_DATA(source_value) \
91
+ Check_Type(source_value, T_STRING); \
92
+ \
93
+ const char* source = RSTRING_PTR(source_value); \
94
+ size_t source_length = RSTRING_LEN(source_value); \
95
+ const brs_ext_byte_t* remaining_source = (const brs_ext_byte_t*)source; \
96
+ size_t remaining_source_length = source_length;
99
97
 
100
98
  VALUE brs_ext_compress(VALUE self, VALUE source_value)
101
99
  {
@@ -116,7 +114,7 @@ VALUE brs_ext_compress(VALUE self, VALUE source_value)
116
114
  brs_ext_raise_error(BRS_EXT_ERROR_UNEXPECTED);
117
115
  }
118
116
 
119
- VALUE bytes_written = UINT2NUM(source_length - remaining_source_length);
117
+ VALUE bytes_written = SIZET2NUM(source_length - remaining_source_length);
120
118
  VALUE needs_more_destination = BrotliEncoderHasMoreOutput(state_ptr) ? Qtrue : Qfalse;
121
119
 
122
120
  return rb_ary_new_from_args(2, bytes_written, needs_more_destination);
@@ -129,8 +127,8 @@ VALUE brs_ext_flush_compressor(VALUE self)
129
127
 
130
128
  BrotliEncoderState* state_ptr = compressor_ptr->state_ptr;
131
129
 
132
- const uint8_t* remaining_source = NULL;
133
- size_t remaining_source_length = 0;
130
+ const brs_ext_byte_t* remaining_source = NULL;
131
+ size_t remaining_source_length = 0;
134
132
 
135
133
  BROTLI_BOOL result = BrotliEncoderCompressStream(
136
134
  state_ptr,
@@ -155,8 +153,8 @@ VALUE brs_ext_finish_compressor(VALUE self)
155
153
 
156
154
  BrotliEncoderState* state_ptr = compressor_ptr->state_ptr;
157
155
 
158
- const uint8_t* remaining_source = NULL;
159
- size_t remaining_source_length = 0;
156
+ const brs_ext_byte_t* remaining_source = NULL;
157
+ size_t remaining_source_length = 0;
160
158
 
161
159
  BROTLI_BOOL result = BrotliEncoderCompressStream(
162
160
  state_ptr,
@@ -179,9 +177,9 @@ VALUE brs_ext_compressor_read_result(VALUE self)
179
177
  GET_COMPRESSOR(self);
180
178
  DO_NOT_USE_AFTER_CLOSE(compressor_ptr);
181
179
 
182
- uint8_t* destination_buffer = compressor_ptr->destination_buffer;
183
- size_t destination_buffer_length = compressor_ptr->destination_buffer_length;
184
- size_t remaining_destination_buffer_length = compressor_ptr->remaining_destination_buffer_length;
180
+ brs_ext_byte_t* destination_buffer = compressor_ptr->destination_buffer;
181
+ size_t destination_buffer_length = compressor_ptr->destination_buffer_length;
182
+ size_t remaining_destination_buffer_length = compressor_ptr->remaining_destination_buffer_length;
185
183
 
186
184
  const char* result = (const char*)destination_buffer;
187
185
  size_t result_length = destination_buffer_length - remaining_destination_buffer_length;
@@ -206,7 +204,7 @@ VALUE brs_ext_compressor_close(VALUE self)
206
204
  compressor_ptr->state_ptr = NULL;
207
205
  }
208
206
 
209
- uint8_t* destination_buffer = compressor_ptr->destination_buffer;
207
+ brs_ext_byte_t* destination_buffer = compressor_ptr->destination_buffer;
210
208
  if (destination_buffer != NULL) {
211
209
  free(destination_buffer);
212
210
 
@@ -221,9 +219,10 @@ VALUE brs_ext_compressor_close(VALUE self)
221
219
 
222
220
  void brs_ext_compressor_exports(VALUE root_module)
223
221
  {
224
- VALUE stream = rb_define_module_under(root_module, "Stream");
222
+ VALUE module = rb_define_module_under(root_module, "Stream");
223
+
224
+ VALUE compressor = rb_define_class_under(module, "NativeCompressor", rb_cObject);
225
225
 
226
- VALUE compressor = rb_define_class_under(stream, "NativeCompressor", rb_cObject);
227
226
  rb_define_alloc_func(compressor, brs_ext_allocate_compressor);
228
227
  rb_define_method(compressor, "initialize", brs_ext_initialize_compressor, 1);
229
228
  rb_define_method(compressor, "write", brs_ext_compress, 1);
@@ -5,16 +5,16 @@
5
5
  #define BRS_EXT_STREAM_COMPRESSOR_H
6
6
 
7
7
  #include <brotli/encode.h>
8
- #include <stdint.h>
9
8
  #include <stdlib.h>
10
9
 
10
+ #include "brs_ext/common.h"
11
11
  #include "ruby.h"
12
12
 
13
13
  typedef struct {
14
14
  BrotliEncoderState* state_ptr;
15
- uint8_t* destination_buffer;
15
+ brs_ext_byte_t* destination_buffer;
16
16
  size_t destination_buffer_length;
17
- uint8_t* remaining_destination_buffer;
17
+ brs_ext_byte_t* remaining_destination_buffer;
18
18
  size_t remaining_destination_buffer_length;
19
19
  } brs_ext_compressor_t;
20
20
 
@@ -4,11 +4,8 @@
4
4
  #include "brs_ext/stream/decompressor.h"
5
5
 
6
6
  #include <brotli/decode.h>
7
- #include <stdint.h>
8
- #include <stdlib.h>
9
7
 
10
8
  #include "brs_ext/buffer.h"
11
- #include "brs_ext/common.h"
12
9
  #include "brs_ext/error.h"
13
10
  #include "brs_ext/option.h"
14
11
  #include "ruby.h"
@@ -20,7 +17,7 @@ static void free_decompressor(brs_ext_decompressor_t* decompressor_ptr)
20
17
  BrotliDecoderDestroyInstance(state_ptr);
21
18
  }
22
19
 
23
- uint8_t* destination_buffer = decompressor_ptr->destination_buffer;
20
+ brs_ext_byte_t* destination_buffer = decompressor_ptr->destination_buffer;
24
21
  if (destination_buffer != NULL) {
25
22
  free(destination_buffer);
26
23
  }
@@ -69,7 +66,7 @@ VALUE brs_ext_initialize_decompressor(VALUE self, VALUE options)
69
66
  destination_buffer_length = BRS_DEFAULT_DESTINATION_BUFFER_LENGTH_FOR_DECOMPRESSOR;
70
67
  }
71
68
 
72
- uint8_t* destination_buffer = malloc(destination_buffer_length);
69
+ brs_ext_byte_t* destination_buffer = malloc(destination_buffer_length);
73
70
  if (destination_buffer == NULL) {
74
71
  BrotliDecoderDestroyInstance(state_ptr);
75
72
  brs_ext_raise_error(BRS_EXT_ERROR_ALLOCATE_FAILED);
@@ -89,13 +86,13 @@ VALUE brs_ext_initialize_decompressor(VALUE self, VALUE options)
89
86
  brs_ext_raise_error(BRS_EXT_ERROR_USED_AFTER_CLOSE); \
90
87
  }
91
88
 
92
- #define GET_SOURCE_DATA(source_value) \
93
- Check_Type(source_value, T_STRING); \
94
- \
95
- const char* source = RSTRING_PTR(source_value); \
96
- size_t source_length = RSTRING_LEN(source_value); \
97
- const uint8_t* remaining_source = (const uint8_t*)source; \
98
- size_t remaining_source_length = source_length;
89
+ #define GET_SOURCE_DATA(source_value) \
90
+ Check_Type(source_value, T_STRING); \
91
+ \
92
+ const char* source = RSTRING_PTR(source_value); \
93
+ size_t source_length = RSTRING_LEN(source_value); \
94
+ const brs_ext_byte_t* remaining_source = (const brs_ext_byte_t*)source; \
95
+ size_t remaining_source_length = source_length;
99
96
 
100
97
  VALUE brs_ext_decompress(VALUE self, VALUE source_value)
101
98
  {
@@ -117,10 +114,10 @@ VALUE brs_ext_decompress(VALUE self, VALUE source_value)
117
114
  brs_ext_raise_error(brs_ext_get_decompressor_error(error_code));
118
115
  }
119
116
 
120
- VALUE bytes_written = UINT2NUM(source_length - remaining_source_length);
117
+ VALUE bytes_read = SIZET2NUM(source_length - remaining_source_length);
121
118
  VALUE needs_more_destination = result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT ? Qtrue : Qfalse;
122
119
 
123
- return rb_ary_new_from_args(2, bytes_written, needs_more_destination);
120
+ return rb_ary_new_from_args(2, bytes_read, needs_more_destination);
124
121
  }
125
122
 
126
123
  VALUE brs_ext_decompressor_read_result(VALUE self)
@@ -128,9 +125,9 @@ VALUE brs_ext_decompressor_read_result(VALUE self)
128
125
  GET_DECOMPRESSOR(self);
129
126
  DO_NOT_USE_AFTER_CLOSE(decompressor_ptr);
130
127
 
131
- uint8_t* destination_buffer = decompressor_ptr->destination_buffer;
132
- size_t destination_buffer_length = decompressor_ptr->destination_buffer_length;
133
- size_t remaining_destination_buffer_length = decompressor_ptr->remaining_destination_buffer_length;
128
+ brs_ext_byte_t* destination_buffer = decompressor_ptr->destination_buffer;
129
+ size_t destination_buffer_length = decompressor_ptr->destination_buffer_length;
130
+ size_t remaining_destination_buffer_length = decompressor_ptr->remaining_destination_buffer_length;
134
131
 
135
132
  const char* result = (const char*)destination_buffer;
136
133
  size_t result_length = destination_buffer_length - remaining_destination_buffer_length;
@@ -155,7 +152,7 @@ VALUE brs_ext_decompressor_close(VALUE self)
155
152
  decompressor_ptr->state_ptr = NULL;
156
153
  }
157
154
 
158
- uint8_t* destination_buffer = decompressor_ptr->destination_buffer;
155
+ brs_ext_byte_t* destination_buffer = decompressor_ptr->destination_buffer;
159
156
  if (destination_buffer != NULL) {
160
157
  free(destination_buffer);
161
158
 
@@ -170,9 +167,10 @@ VALUE brs_ext_decompressor_close(VALUE self)
170
167
 
171
168
  void brs_ext_decompressor_exports(VALUE root_module)
172
169
  {
173
- VALUE stream = rb_define_module_under(root_module, "Stream");
170
+ VALUE module = rb_define_module_under(root_module, "Stream");
171
+
172
+ VALUE decompressor = rb_define_class_under(module, "NativeDecompressor", rb_cObject);
174
173
 
175
- VALUE decompressor = rb_define_class_under(stream, "NativeDecompressor", rb_cObject);
176
174
  rb_define_alloc_func(decompressor, brs_ext_allocate_decompressor);
177
175
  rb_define_method(decompressor, "initialize", brs_ext_initialize_decompressor, 1);
178
176
  rb_define_method(decompressor, "read", brs_ext_decompress, 1);
@@ -5,16 +5,16 @@
5
5
  #define BRS_EXT_STREAM_DECOMPRESSOR_H
6
6
 
7
7
  #include <brotli/decode.h>
8
- #include <stdint.h>
9
8
  #include <stdlib.h>
10
9
 
10
+ #include "brs_ext/common.h"
11
11
  #include "ruby.h"
12
12
 
13
13
  typedef struct {
14
14
  BrotliDecoderState* state_ptr;
15
- uint8_t* destination_buffer;
15
+ brs_ext_byte_t* destination_buffer;
16
16
  size_t destination_buffer_length;
17
- uint8_t* remaining_destination_buffer;
17
+ brs_ext_byte_t* remaining_destination_buffer;
18
18
  size_t remaining_destination_buffer_length;
19
19
  } brs_ext_decompressor_t;
20
20
 
@@ -5,11 +5,10 @@
5
5
 
6
6
  #include <brotli/decode.h>
7
7
  #include <brotli/encode.h>
8
- #include <stdint.h>
8
+ #include <brotli/types.h>
9
9
  #include <stdlib.h>
10
10
 
11
11
  #include "brs_ext/buffer.h"
12
- #include "brs_ext/common.h"
13
12
  #include "brs_ext/error.h"
14
13
  #include "brs_ext/macro.h"
15
14
  #include "brs_ext/option.h"
@@ -17,26 +16,6 @@
17
16
 
18
17
  // -- buffer --
19
18
 
20
- static inline VALUE create_buffer(VALUE length)
21
- {
22
- return rb_str_new(NULL, NUM2UINT(length));
23
- }
24
-
25
- #define CREATE_BUFFER(buffer, length, exception) \
26
- VALUE buffer = rb_protect(create_buffer, UINT2NUM(length), &exception);
27
-
28
- static inline VALUE resize_buffer(VALUE args)
29
- {
30
- VALUE buffer = rb_ary_entry(args, 0);
31
- VALUE length = rb_ary_entry(args, 1);
32
- return rb_str_resize(buffer, NUM2UINT(length));
33
- }
34
-
35
- #define RESIZE_BUFFER(buffer, length, exception) \
36
- VALUE resize_buffer_args = rb_ary_new_from_args(2, buffer, UINT2NUM(length)); \
37
- buffer = rb_protect(resize_buffer, resize_buffer_args, &exception); \
38
- RB_GC_GUARD(resize_buffer_args);
39
-
40
19
  static inline brs_ext_result_t increase_destination_buffer(
41
20
  VALUE destination_value, size_t destination_length,
42
21
  size_t* remaining_destination_buffer_length_ptr, size_t destination_buffer_length)
@@ -48,7 +27,7 @@ static inline brs_ext_result_t increase_destination_buffer(
48
27
 
49
28
  int exception;
50
29
 
51
- RESIZE_BUFFER(destination_value, destination_length + destination_buffer_length, exception);
30
+ BRS_EXT_RESIZE_STRING_BUFFER(destination_value, destination_length + destination_buffer_length, exception);
52
31
  if (exception != 0) {
53
32
  return BRS_EXT_ERROR_ALLOCATE_FAILED;
54
33
  }
@@ -60,31 +39,33 @@ static inline brs_ext_result_t increase_destination_buffer(
60
39
 
61
40
  // -- utils --
62
41
 
63
- #define GET_SOURCE_DATA(source_value) \
64
- Check_Type(source_value, T_STRING); \
65
- \
66
- const char* source = RSTRING_PTR(source_value); \
67
- size_t source_length = RSTRING_LEN(source_value); \
68
- const uint8_t* remaining_source = (const uint8_t*)source; \
69
- size_t remaining_source_length = source_length;
42
+ #define GET_SOURCE_DATA(source_value) \
43
+ Check_Type(source_value, T_STRING); \
44
+ \
45
+ const char* source = RSTRING_PTR(source_value); \
46
+ size_t source_length = RSTRING_LEN(source_value);
70
47
 
71
48
  // -- compress --
72
49
 
73
50
  static inline brs_ext_result_t compress(
74
51
  BrotliEncoderState* state_ptr,
75
- const uint8_t* remaining_source, size_t remaining_source_length,
52
+ const char* source, size_t source_length,
76
53
  VALUE destination_value, size_t destination_buffer_length)
77
54
  {
55
+ BROTLI_BOOL result;
78
56
  brs_ext_result_t ext_result;
79
57
 
58
+ const brs_ext_byte_t* remaining_source = (const brs_ext_byte_t*)source;
59
+ size_t remaining_source_length = source_length;
60
+
80
61
  size_t destination_length = 0;
81
62
  size_t remaining_destination_buffer_length = destination_buffer_length;
82
63
 
83
64
  while (true) {
84
- uint8_t* remaining_destination_buffer = (uint8_t*)RSTRING_PTR(destination_value) + destination_length;
85
- size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
65
+ brs_ext_byte_t* remaining_destination_buffer = (brs_ext_byte_t*)RSTRING_PTR(destination_value) + destination_length;
66
+ size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
86
67
 
87
- BROTLI_BOOL result = BrotliEncoderCompressStream(
68
+ result = BrotliEncoderCompressStream(
88
69
  state_ptr,
89
70
  BROTLI_OPERATION_FINISH,
90
71
  &remaining_source_length, &remaining_source,
@@ -114,7 +95,7 @@ static inline brs_ext_result_t compress(
114
95
 
115
96
  int exception;
116
97
 
117
- RESIZE_BUFFER(destination_value, destination_length, exception);
98
+ BRS_EXT_RESIZE_STRING_BUFFER(destination_value, destination_length, exception);
118
99
  if (exception != 0) {
119
100
  return BRS_EXT_ERROR_ALLOCATE_FAILED;
120
101
  }
@@ -146,7 +127,7 @@ VALUE brs_ext_compress_string(VALUE BRS_EXT_UNUSED(self), VALUE source_value, VA
146
127
 
147
128
  int exception;
148
129
 
149
- CREATE_BUFFER(destination_value, destination_buffer_length, exception);
130
+ BRS_EXT_CREATE_STRING_BUFFER(destination_value, destination_buffer_length, exception);
150
131
  if (exception != 0) {
151
132
  BrotliEncoderDestroyInstance(state_ptr);
152
133
  brs_ext_raise_error(BRS_EXT_ERROR_ALLOCATE_FAILED);
@@ -154,7 +135,7 @@ VALUE brs_ext_compress_string(VALUE BRS_EXT_UNUSED(self), VALUE source_value, VA
154
135
 
155
136
  ext_result = compress(
156
137
  state_ptr,
157
- remaining_source, remaining_source_length,
138
+ source, source_length,
158
139
  destination_value, destination_buffer_length);
159
140
 
160
141
  BrotliEncoderDestroyInstance(state_ptr);
@@ -170,19 +151,23 @@ VALUE brs_ext_compress_string(VALUE BRS_EXT_UNUSED(self), VALUE source_value, VA
170
151
 
171
152
  static inline brs_ext_result_t decompress(
172
153
  BrotliDecoderState* state_ptr,
173
- const uint8_t* remaining_source, size_t remaining_source_length,
154
+ const char* source, size_t source_length,
174
155
  VALUE destination_value, size_t destination_buffer_length)
175
156
  {
176
- brs_ext_result_t ext_result;
157
+ BrotliDecoderResult result;
158
+ brs_ext_result_t ext_result;
159
+
160
+ const brs_ext_byte_t* remaining_source = (const brs_ext_byte_t*)source;
161
+ size_t remaining_source_length = source_length;
177
162
 
178
163
  size_t destination_length = 0;
179
164
  size_t remaining_destination_buffer_length = destination_buffer_length;
180
165
 
181
166
  while (true) {
182
- uint8_t* remaining_destination_buffer = (uint8_t*)RSTRING_PTR(destination_value) + destination_length;
183
- size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
167
+ brs_ext_byte_t* remaining_destination_buffer = (brs_ext_byte_t*)RSTRING_PTR(destination_value) + destination_length;
168
+ size_t prev_remaining_destination_buffer_length = remaining_destination_buffer_length;
184
169
 
185
- BrotliDecoderResult result = BrotliDecoderDecompressStream(
170
+ result = BrotliDecoderDecompressStream(
186
171
  state_ptr,
187
172
  &remaining_source_length, &remaining_source,
188
173
  &remaining_destination_buffer_length, &remaining_destination_buffer,
@@ -215,7 +200,7 @@ static inline brs_ext_result_t decompress(
215
200
 
216
201
  int exception;
217
202
 
218
- RESIZE_BUFFER(destination_value, destination_length, exception);
203
+ BRS_EXT_RESIZE_STRING_BUFFER(destination_value, destination_length, exception);
219
204
  if (exception != 0) {
220
205
  brs_ext_raise_error(BRS_EXT_ERROR_ALLOCATE_FAILED);
221
206
  }
@@ -247,7 +232,7 @@ VALUE brs_ext_decompress_string(VALUE BRS_EXT_UNUSED(self), VALUE source_value,
247
232
 
248
233
  int exception;
249
234
 
250
- CREATE_BUFFER(destination_value, destination_buffer_length, exception);
235
+ BRS_EXT_CREATE_STRING_BUFFER(destination_value, destination_buffer_length, exception);
251
236
  if (exception != 0) {
252
237
  BrotliDecoderDestroyInstance(state_ptr);
253
238
  brs_ext_raise_error(BRS_EXT_ERROR_ALLOCATE_FAILED);
@@ -255,7 +240,7 @@ VALUE brs_ext_decompress_string(VALUE BRS_EXT_UNUSED(self), VALUE source_value,
255
240
 
256
241
  ext_result = decompress(
257
242
  state_ptr,
258
- remaining_source, remaining_source_length,
243
+ source, source_length,
259
244
  destination_value, destination_buffer_length);
260
245
 
261
246
  BrotliDecoderDestroyInstance(state_ptr);