ruby-zstds 1.3.0 → 1.3.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec16246ba1102583f6f309e555e4ac4dbbf49135f5adee4e0332b86be7388de4
4
- data.tar.gz: 7d8d40b406c9da3ed50c5929f565c51fc8cf46558bee937fdeaa0d942d0fe84f
3
+ metadata.gz: 1a3bf1ddf3028d59dbfadc868b7dd0049f95213ccede92b223cab2f1af2a847b
4
+ data.tar.gz: d8dce89cd592e7815aea864900afd336e67a0bc65def9f6b21b30a67b184a7fc
5
5
  SHA512:
6
- metadata.gz: fd92bd835bf7eb14db13ecc1761a89467e3f38bbcb9d373573fa7c3a8839f4050a478091ada05fec97bb8e2824e9913d23ef9593f3388e317c5b9df456e7e7cd
7
- data.tar.gz: 00d8bd37067fd788a7033abd8cf4c6d590b4f672f8986e7da7b80e47ed9ffa4a91886db7442a2a118a6ba45c8f9b2b232665455a5fc85c6cf4c8fcbe119c4e9c
6
+ metadata.gz: b956bba7a80f4456b736748e2355d9e862f230af855d5b539cb0d7034c183238d8e8b68a65c629fb5baae2ec94757d0e8f822572d0bcc694a2740bb173ab6e7d
7
+ data.tar.gz: 6222867bf832bf0d8b08e8cc94d25be1eec376e87b6f24e1bc2d8c75f36d06bb12a7a601f8737eccafa02bdd1c1c0a3eee65c7d7f2c77fcb9e0b4068d9afaef1
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # Ruby bindings for zstd library
2
2
 
3
- | AppVeyor | Circle | Github actions | Codecov | Gem |
4
- | :------: | :----: | :------------: | :-----: | :--: |
5
- | [![AppVeyor test status](https://ci.appveyor.com/api/projects/status/github/andrew-aladev/ruby-zstds?branch=master&svg=true)](https://ci.appveyor.com/project/andrew-aladev/ruby-zstds/branch/master) | [![Circle test status](https://circleci.com/gh/andrew-aladev/ruby-zstds/tree/master.svg?style=shield)](https://circleci.com/gh/andrew-aladev/ruby-zstds/tree/master) | [![Github Actions test status](https://github.com/andrew-aladev/ruby-zstds/workflows/test/badge.svg?branch=master)](https://github.com/andrew-aladev/ruby-zstds/actions) | [![Codecov](https://codecov.io/gh/andrew-aladev/ruby-zstds/branch/master/graph/badge.svg)](https://codecov.io/gh/andrew-aladev/ruby-zstds) | [![Gem](https://img.shields.io/gem/v/ruby-zstds.svg)](https://rubygems.org/gems/ruby-zstds) |
3
+ | AppVeyor | Jenkins | Github actions | Codecov | Gem |
4
+ | :------: | :-----: | :------------: | :-----: | :--: |
5
+ | [![AppVeyor test status](https://ci.appveyor.com/api/projects/status/github/andrew-aladev/ruby-zstds?branch=master&svg=true)](https://ci.appveyor.com/project/andrew-aladev/ruby-zstds/branch/master) | [![Jenkins test status](http://37.187.122.190:58182/buildStatus/icon?job=ruby-zstds)](http://37.187.122.190:58182/job/ruby-zstds) | [![Github Actions test status](https://github.com/andrew-aladev/ruby-zstds/workflows/test/badge.svg?branch=master)](https://github.com/andrew-aladev/ruby-zstds/actions) | [![Codecov](https://codecov.io/gh/andrew-aladev/ruby-zstds/branch/master/graph/badge.svg)](https://codecov.io/gh/andrew-aladev/ruby-zstds) | [![Gem](https://img.shields.io/gem/v/ruby-zstds.svg)](https://rubygems.org/gems/ruby-zstds) |
6
6
 
7
7
  See [zstd library](https://github.com/facebook/zstd).
8
8
 
9
9
  ## Installation
10
10
 
11
- Operating systems: GNU/Linux, FreeBSD, OSX, Windows (MinGW).
11
+ Operating systems: GNU/Linux, FreeBSD, OSX.
12
12
 
13
13
  Dependencies: [zstd](https://github.com/facebook/zstd) 1.4.0+ version.
14
14
 
@@ -18,7 +18,6 @@ Dependencies: [zstd](https://github.com/facebook/zstd) 1.4.0+ version.
18
18
  | CentOS | `libzstd-devel` |
19
19
  | ArchLinux | `zstd` |
20
20
  | OSX | `zstd` |
21
- | Windows | `mingw-w64-x86_64-zstd` |
22
21
 
23
22
  ```sh
24
23
  gem install ruby-zstds
@@ -151,6 +150,10 @@ Parallel.each large_datas do |large_data|
151
150
  end
152
151
  ```
153
152
 
153
+ # Docs
154
+
155
+ Please review [rdoc generated docs](https://andrew-aladev.github.io/ruby-zstds).
156
+
154
157
  ## Options
155
158
 
156
159
  | Option | Values | Default | Description |
@@ -344,14 +347,11 @@ Special asynchronous methods missing in `Zlib::GzipWriter`.
344
347
  So it is possible to have asynchronous variants for these synchronous methods.
345
348
  Behaviour is the same as `IO#write_nonblock` method.
346
349
 
347
- All nonblock operations for file will raise `EBADF` error on Windows.
348
- Setting file into nonblocking mode is [not available on Windows](https://github.com/ruby/ruby/blob/master/win32/win32.c#L4388).
349
-
350
350
  ```
351
351
  #<<(object)
352
352
  #print(*objects)
353
353
  #printf(*args)
354
- #putc(object, encoding: ::Encoding::BINARY)
354
+ #putc(object, :encoding => 'ASCII-8BIT')
355
355
  #puts(*objects)
356
356
  ```
357
357
 
@@ -203,34 +203,34 @@ static inline void* finalize_wrapper(void* data)
203
203
  return NULL;
204
204
  }
205
205
 
206
- int compressionLevel;
207
206
  zstds_ext_option_t compression_level = args->dictionary_options.compression_level;
207
+ int compression_level_value;
208
208
  if (compression_level.has_value) {
209
- compressionLevel = compression_level.value;
209
+ compression_level_value = compression_level.value;
210
210
  } else {
211
- compressionLevel = 0;
211
+ compression_level_value = 0;
212
212
  }
213
213
 
214
- unsigned int notificationLevel;
215
214
  zstds_ext_option_t notification_level = args->dictionary_options.notification_level;
215
+ unsigned int notification_level_value;
216
216
  if (notification_level.has_value) {
217
- notificationLevel = notification_level.value;
217
+ notification_level_value = notification_level.value;
218
218
  } else {
219
- notificationLevel = 0;
219
+ notification_level_value = 0;
220
220
  }
221
221
 
222
- unsigned int dictID;
223
222
  zstds_ext_option_t dictionary_id = args->dictionary_options.dictionary_id;
223
+ unsigned int dictionary_id_value;
224
224
  if (dictionary_id.has_value) {
225
- dictID = dictionary_id.value;
225
+ dictionary_id_value = dictionary_id.value;
226
226
  } else {
227
- dictID = 0;
227
+ dictionary_id_value = 0;
228
228
  }
229
229
 
230
230
  ZDICT_params_t dictionary_params = {
231
- .compressionLevel = compressionLevel,
232
- .notificationLevel = notificationLevel,
233
- .dictID = dictID,
231
+ .compressionLevel = compression_level_value,
232
+ .notificationLevel = notification_level_value,
233
+ .dictID = dictionary_id_value,
234
234
  };
235
235
 
236
236
  args->result = ZDICT_finalizeDictionary(
@@ -7,13 +7,16 @@ require_relative "error"
7
7
  require_relative "validation"
8
8
 
9
9
  module ZSTDS
10
+ # ZSTDS::Dictionary class.
10
11
  class Dictionary
12
+ # Current train defaults.
11
13
  TRAIN_DEFAULTS = {
12
14
  :gvl => false,
13
15
  :capacity => 0
14
16
  }
15
17
  .freeze
16
18
 
19
+ # Current finalize defaults.
17
20
  FINALIZE_DEFAULTS = {
18
21
  :gvl => false,
19
22
  :max_size => 0,
@@ -21,6 +24,7 @@ module ZSTDS
21
24
  }
22
25
  .freeze
23
26
 
27
+ # Current finalize dictionary defaults.
24
28
  FINALIZE_DICTIONARY_DEFAULTS = {
25
29
  :compression_level => 0,
26
30
  :notification_level => 0,
@@ -28,8 +32,11 @@ module ZSTDS
28
32
  }
29
33
  .freeze
30
34
 
35
+ # Reads current +buffer+ binary data.
31
36
  attr_reader :buffer
32
37
 
38
+ # Initializes compressor.
39
+ # Uses +buffer+ binary data.
33
40
  def initialize(buffer)
34
41
  Validation.validate_string buffer
35
42
  raise ValidateError, "dictionary buffer should not be empty" if buffer.empty?
@@ -37,6 +44,12 @@ module ZSTDS
37
44
  @buffer = buffer
38
45
  end
39
46
 
47
+ # Trains dictionary.
48
+ # Uses +samples+ list of binary datas.
49
+ # Uses +options+ options hash.
50
+ # Option +gvl+ is global interpreter lock enabled.
51
+ # Option +capacity+ capacity of dictionary buffer.
52
+ # Returns dictionary based on new buffer.
40
53
  def self.train(samples, options = {})
41
54
  validate_samples samples
42
55
 
@@ -51,6 +64,14 @@ module ZSTDS
51
64
  new buffer
52
65
  end
53
66
 
67
+ # Finalizes dictionary.
68
+ # Uses +content+ binary data.
69
+ # Uses +samples+ list of binary datas.
70
+ # Uses +options+ options hash.
71
+ # Option +gvl+ is global interpreter lock enabled.
72
+ # Option +max_size+ max size of dictionary buffer.
73
+ # Option +dictionary_options+ standard dictionary options hash.
74
+ # Returns dictionary based on new buffer.
54
75
  def self.finalize(content, samples, options = {})
55
76
  Validation.validate_string content
56
77
  raise ValidateError, "content should not be empty" if content.empty?
@@ -79,6 +100,7 @@ module ZSTDS
79
100
  new buffer
80
101
  end
81
102
 
103
+ # Raises error when +samples+ are not list of not empty strings.
82
104
  def self.validate_samples(samples)
83
105
  Validation.validate_array samples
84
106
 
@@ -88,10 +110,12 @@ module ZSTDS
88
110
  end
89
111
  end
90
112
 
113
+ # Returns current dictionary id.
91
114
  def id
92
115
  self.class.get_buffer_id @buffer
93
116
  end
94
117
 
118
+ # Returns current dictionary header size.
95
119
  def header_size
96
120
  self.class.get_header_size @buffer
97
121
  end
data/lib/zstds/error.rb CHANGED
@@ -1,16 +1,15 @@
1
1
  # Ruby bindings for zstd library.
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
+ require "adsp"
5
+
4
6
  module ZSTDS
5
7
  class BaseError < ::StandardError; end
6
8
 
7
9
  class AllocateError < BaseError; end
8
- class ValidateError < BaseError; end
9
10
 
10
- class UsedAfterCloseError < BaseError; end
11
11
  class NotEnoughSourceBufferError < BaseError; end
12
12
  class NotEnoughDestinationBufferError < BaseError; end
13
- class NotEnoughDestinationError < BaseError; end
14
13
  class DecompressorCorruptedSourceError < BaseError; end
15
14
  class CorruptedDictionaryError < BaseError; end
16
15
 
@@ -18,6 +17,11 @@ module ZSTDS
18
17
  class ReadIOError < BaseError; end
19
18
  class WriteIOError < BaseError; end
20
19
 
21
- class NotImplementedError < BaseError; end
22
- class UnexpectedError < BaseError; end
20
+ ValidateError = ADSP::ValidateError
21
+
22
+ NotEnoughDestinationError = ADSP::NotEnoughDestinationError
23
+ UsedAfterCloseError = ADSP::UsedAfterCloseError
24
+
25
+ NotImplementedError = ADSP::NotImplementedError
26
+ UnexpectedError = ADSP::UnexpectedError
23
27
  end
data/lib/zstds/file.rb CHANGED
@@ -1,50 +1,40 @@
1
1
  # Ruby bindings for zstd library.
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
+ require "adsp/file"
4
5
  require "zstds_ext"
5
6
 
6
- require_relative "error"
7
7
  require_relative "option"
8
8
  require_relative "validation"
9
9
 
10
10
  module ZSTDS
11
- module File
12
- BUFFER_LENGTH_NAMES = %i[source_buffer_length destination_buffer_length].freeze
13
-
11
+ # ZSTDS::File class.
12
+ class File < ADSP::File
13
+ # Current option class.
14
+ Option = ZSTDS::Option
15
+
16
+ # Compresses data from +source+ file path to +destination+ file path.
17
+ # Option: +:source_buffer_length+ source buffer length.
18
+ # Option: +:destination_buffer_length+ destination buffer length.
19
+ # Option: +:pledged_size+ source bytesize.
14
20
  def self.compress(source, destination, options = {})
15
21
  Validation.validate_string source
16
- Validation.validate_string destination
17
22
 
18
23
  options = Option.get_compressor_options options, BUFFER_LENGTH_NAMES
19
24
 
20
25
  options[:pledged_size] = ::File.size source
21
26
 
22
- open_files source, destination do |source_io, destination_io|
23
- ZSTDS._native_compress_io source_io, destination_io, options
24
- end
25
-
26
- nil
27
+ super source, destination, options
27
28
  end
28
29
 
29
- def self.decompress(source, destination, options = {})
30
- Validation.validate_string source
31
- Validation.validate_string destination
32
-
33
- options = Option.get_decompressor_options options, BUFFER_LENGTH_NAMES
34
-
35
- open_files source, destination do |source_io, destination_io|
36
- ZSTDS._native_decompress_io source_io, destination_io, options
37
- end
38
-
39
- nil
30
+ # Bypass native compress.
31
+ def self.native_compress_io(*args)
32
+ ZSTDS._native_compress_io(*args)
40
33
  end
41
34
 
42
- private_class_method def self.open_files(source, destination, &_block)
43
- ::File.open source, "rb" do |source_io|
44
- ::File.open destination, "wb" do |destination_io|
45
- yield source_io, destination_io
46
- end
47
- end
35
+ # Bypass native decompress.
36
+ def self.native_decompress_io(*args)
37
+ ZSTDS._native_decompress_io(*args)
48
38
  end
49
39
  end
50
40
  end
data/lib/zstds/option.rb CHANGED
@@ -8,41 +8,95 @@ require_relative "error"
8
8
  require_relative "validation"
9
9
 
10
10
  module ZSTDS
11
+ # ZSTDS::Option module.
11
12
  module Option
13
+ # Current default buffer length.
12
14
  DEFAULT_BUFFER_LENGTH = 0
13
15
 
16
+ # Current compressor defaults.
14
17
  COMPRESSOR_DEFAULTS = {
18
+ # Enables global VM lock where possible.
15
19
  :gvl => false,
20
+ # Compression level.
16
21
  :compression_level => nil,
22
+ # Maximum back-reference distance (power of 2).
17
23
  :window_log => nil,
24
+ # Size of the initial probe table (power of 2).
18
25
  :hash_log => nil,
26
+ # Size of the multi-probe search table (power of 2).
19
27
  :chain_log => nil,
28
+ # Number of search attempts (power of 2).
20
29
  :search_log => nil,
30
+ # Minimum size of searched matches.
21
31
  :min_match => nil,
32
+ # Distance between match sampling (for :fast strategy),
33
+ # length of match considered "good enough" for (for other strategies).
22
34
  :target_length => nil,
35
+ # Choses strategy.
23
36
  :strategy => nil,
37
+ # Enables long distance matching.
24
38
  :enable_long_distance_matching => nil,
39
+ # Size of the table for long distance matching (power of 2).
25
40
  :ldm_hash_log => nil,
41
+ # Minimum match size for long distance matcher.
26
42
  :ldm_min_match => nil,
43
+ # Log size of each bucket in the LDM hash table for collision resolution.
27
44
  :ldm_bucket_size_log => nil,
45
+ # Frequency of inserting/looking up entries into the LDM hash table.
28
46
  :ldm_hash_rate_log => nil,
47
+ # Enables writing of content size into frame header (if known).
29
48
  :content_size_flag => nil,
49
+ # Enables writing of 32-bits checksum of content at end of frame.
30
50
  :checksum_flag => nil,
51
+ # Enables writing of dictionary id into frame header.
31
52
  :dict_id_flag => nil,
53
+ # Number of threads spawned in parallel.
32
54
  :nb_workers => nil,
55
+ # Size of job (nb_workers >= 1).
33
56
  :job_size => nil,
57
+ # Overlap size, as a fraction of window size.
34
58
  :overlap_log => nil,
59
+ # Chose dictionary.
35
60
  :dictionary => nil
36
61
  }
37
62
  .freeze
38
63
 
64
+ # Current decompressor defaults.
39
65
  DECOMPRESSOR_DEFAULTS = {
66
+ # Enables global VM lock where possible.
40
67
  :gvl => false,
68
+ # Size limit (power of 2).
41
69
  :window_log_max => nil,
70
+ # Chose dictionary.
42
71
  :dictionary => nil
43
72
  }
44
73
  .freeze
45
74
 
75
+ # Processes compressor +options+ and +buffer_length_names+.
76
+ # Option: +:source_buffer_length+ source buffer length.
77
+ # Option: +:destination_buffer_length+ destination buffer length.
78
+ # Option: +:gvl+ enables global VM lock where possible.
79
+ # Option: +:compression_level+ compression level.
80
+ # Option: +:window_log+ maximum back-reference distance (power of 2).
81
+ # Option: +:hash_log+ size of the initial probe table (power of 2).
82
+ # Option: +:chain_log+ size of the multi-probe search table (power of 2).
83
+ # Option: +:search_log+ number of search attempts (power of 2).
84
+ # Option: +:min_match+ minimum size of searched matches.
85
+ # Option: +:target_length+ distance between match sampling (for :fast strategy),
86
+ # length of match considered "good enough" for (for other strategies).
87
+ # Option: +:strategy+ choses strategy.
88
+ # Option: +:ldm_hash_log+ size of the table for long distance matching (power of 2).
89
+ # Option: +:ldm_min_match+ minimum match size for long distance matcher.
90
+ # Option: +:ldm_bucket_size_log+ log size of each bucket in the LDM hash table for collision resolution.
91
+ # Option: +:ldm_hash_rate_log+ frequency of inserting/looking up entries into the LDM hash table.
92
+ # Option: +:content_size_flag+ enables writing of content size into frame header (if known).
93
+ # Option: +:checksum_flag+ enables writing of 32-bits checksum of content at end of frame.
94
+ # Option: +:dict_id_flag+ enables writing of dictionary id into frame header.
95
+ # Option: +:nb_workers+ number of threads spawned in parallel.
96
+ # Option: +:job_size+ size of job (nb_workers >= 1).
97
+ # Option: +:overlap_log+ overlap size, as a fraction of window size.
98
+ # Option: +:dictionary+ chose dictionary.
99
+ # Returns processed compressor options.
46
100
  def self.get_compressor_options(options, buffer_length_names)
47
101
  Validation.validate_hash options
48
102
 
@@ -179,6 +233,12 @@ module ZSTDS
179
233
  options
180
234
  end
181
235
 
236
+ # Processes decompressor +options+ and +buffer_length_names+.
237
+ # Option: +:source_buffer_length+ source buffer length.
238
+ # Option: +:destination_buffer_length+ destination buffer length.
239
+ # Option: +:gvl+ enables global VM lock where possible.
240
+ # Option: +:window_log_max+ size limit (power of 2).
241
+ # Returns processed decompressor options.
182
242
  def self.get_decompressor_options(options, buffer_length_names)
183
243
  Validation.validate_hash options
184
244
 
@@ -1,97 +1,33 @@
1
1
  # Ruby bindings for zstd library.
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
+ require "adsp/stream/raw/compressor"
4
5
  require "zstds_ext"
5
6
 
6
- require_relative "abstract"
7
- require_relative "../../error"
8
7
  require_relative "../../option"
9
8
  require_relative "../../validation"
10
9
 
11
10
  module ZSTDS
12
11
  module Stream
13
12
  module Raw
14
- class Compressor < Abstract
15
- BUFFER_LENGTH_NAMES = %i[destination_buffer_length].freeze
13
+ # ZSTDS::Stream::Raw::Compressor class.
14
+ class Compressor < ADSP::Stream::Raw::Compressor
15
+ # Current native compressor class.
16
+ NativeCompressor = Stream::NativeCompressor
16
17
 
18
+ # Current option class.
19
+ Option = ZSTDS::Option
20
+
21
+ # Initializes compressor.
22
+ # Option: +:destination_buffer_length+ destination buffer length.
23
+ # Option: +:pledged_size+ source bytesize.
17
24
  def initialize(options = {})
18
25
  options = Option.get_compressor_options options, BUFFER_LENGTH_NAMES
19
26
 
20
27
  pledged_size = options[:pledged_size]
21
28
  Validation.validate_not_negative_integer pledged_size unless pledged_size.nil?
22
29
 
23
- native_stream = NativeCompressor.new options
24
-
25
- super native_stream
26
- end
27
-
28
- def write(source, &writer)
29
- do_not_use_after_close
30
-
31
- Validation.validate_string source
32
- Validation.validate_proc writer
33
-
34
- total_bytes_written = 0
35
-
36
- loop do
37
- bytes_written, need_more_destination = @native_stream.write source
38
- total_bytes_written += bytes_written
39
-
40
- if need_more_destination
41
- source = source.byteslice bytes_written, source.bytesize - bytes_written
42
- more_destination(&writer)
43
- next
44
- end
45
-
46
- unless bytes_written == source.bytesize
47
- # :nocov:
48
- # Compressor write should eat all provided "source" without remainder.
49
- raise UnexpectedError, "unexpected error"
50
- # :nocov:
51
- end
52
-
53
- break
54
- end
55
-
56
- total_bytes_written
57
- end
58
-
59
- def flush(&writer)
60
- do_not_use_after_close
61
-
62
- Validation.validate_proc writer
63
-
64
- loop do
65
- need_more_destination = @native_stream.flush
66
-
67
- if need_more_destination
68
- more_destination(&writer)
69
- next
70
- end
71
-
72
- break
73
- end
74
-
75
- super
76
- end
77
-
78
- def close(&writer)
79
- return nil if closed?
80
-
81
- Validation.validate_proc writer
82
-
83
- loop do
84
- need_more_destination = @native_stream.finish
85
-
86
- if need_more_destination
87
- more_destination(&writer)
88
- next
89
- end
90
-
91
- break
92
- end
93
-
94
- super
30
+ super options
95
31
  end
96
32
  end
97
33
  end
@@ -1,65 +1,21 @@
1
1
  # Ruby bindings for zstd library.
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
+ require "adsp/stream/raw/decompressor"
4
5
  require "zstds_ext"
5
6
 
6
- require_relative "abstract"
7
7
  require_relative "../../option"
8
- require_relative "../../validation"
9
8
 
10
9
  module ZSTDS
11
10
  module Stream
12
11
  module Raw
13
- class Decompressor < Abstract
14
- BUFFER_LENGTH_NAMES = %i[destination_buffer_length].freeze
12
+ # ZSTDS::Stream::Raw::Decompressor class.
13
+ class Decompressor < ADSP::Stream::Raw::Decompressor
14
+ # Current native decompressor class.
15
+ NativeDecompressor = Stream::NativeDecompressor
15
16
 
16
- def initialize(options = {})
17
- options = Option.get_decompressor_options options, BUFFER_LENGTH_NAMES
18
- native_stream = NativeDecompressor.new options
19
-
20
- super native_stream
21
- end
22
-
23
- def read(source, &writer)
24
- do_not_use_after_close
25
-
26
- Validation.validate_string source
27
- Validation.validate_proc writer
28
-
29
- total_bytes_read = 0
30
-
31
- loop do
32
- bytes_read, need_more_destination = @native_stream.read source
33
- total_bytes_read += bytes_read
34
-
35
- if need_more_destination
36
- source = source.byteslice bytes_read, source.bytesize - bytes_read
37
- more_destination(&writer)
38
- next
39
- end
40
-
41
- break
42
- end
43
-
44
- # Please remember that "total_bytes_read" can not be equal to "source.bytesize".
45
- total_bytes_read
46
- end
47
-
48
- def flush(&writer)
49
- do_not_use_after_close
50
-
51
- Validation.validate_proc writer
52
-
53
- super
54
- end
55
-
56
- def close(&writer)
57
- return nil if closed?
58
-
59
- Validation.validate_proc writer
60
-
61
- super
62
- end
17
+ # Current option class.
18
+ Option = ZSTDS::Option
63
19
  end
64
20
  end
65
21
  end