ext/zstdruby/common.h in zstd-ruby-1.5.6.1 vs ext/zstdruby/common.h in zstd-ruby-1.5.6.2
- old
+ new
@@ -1,15 +1,66 @@
#ifndef ZSTD_RUBY_H
#define ZSTD_RUBY_H 1
-#include "ruby.h"
+#include <ruby.h>
#include "./libzstd/zstd.h"
static int convert_compression_level(VALUE compression_level_value)
{
if (NIL_P(compression_level_value)) {
return ZSTD_CLEVEL_DEFAULT;
}
return NUM2INT(compression_level_value);
+}
+
+static size_t zstd_compress(ZSTD_CCtx* const ctx, ZSTD_outBuffer* output, ZSTD_inBuffer* input, ZSTD_EndDirective endOp)
+{
+ return ZSTD_compressStream2(ctx, output, input, endOp);
+}
+
+static void set_compress_params(ZSTD_CCtx* const ctx, VALUE level_from_args, VALUE kwargs)
+{
+ ID kwargs_keys[2];
+ kwargs_keys[0] = rb_intern("level");
+ kwargs_keys[1] = rb_intern("dict");
+ VALUE kwargs_values[2];
+ rb_get_kwargs(kwargs, kwargs_keys, 0, 2, kwargs_values);
+
+ int compression_level = ZSTD_CLEVEL_DEFAULT;
+ if (kwargs_values[0] != Qundef && kwargs_values[0] != Qnil) {
+ compression_level = convert_compression_level(kwargs_values[0]);
+ } else if (!NIL_P(level_from_args)) {
+ rb_warn("`level` in args is deprecated; use keyword args `level:` instead.");
+ compression_level = convert_compression_level(level_from_args);
+ }
+ ZSTD_CCtx_setParameter(ctx, ZSTD_c_compressionLevel, compression_level);
+
+ if (kwargs_values[1] != Qundef && kwargs_values[1] != Qnil) {
+ char* dict_buffer = RSTRING_PTR(kwargs_values[1]);
+ size_t dict_size = RSTRING_LEN(kwargs_values[1]);
+ size_t load_dict_ret = ZSTD_CCtx_loadDictionary(ctx, dict_buffer, dict_size);
+ if (ZSTD_isError(load_dict_ret)) {
+ ZSTD_freeCCtx(ctx);
+ rb_raise(rb_eRuntimeError, "%s", "ZSTD_CCtx_loadDictionary failed");
+ }
+ }
+}
+
+static void set_decompress_params(ZSTD_DCtx* const dctx, VALUE kwargs)
+{
+ ID kwargs_keys[1];
+ kwargs_keys[0] = rb_intern("dict");
+ VALUE kwargs_values[1];
+ rb_get_kwargs(kwargs, kwargs_keys, 0, 1, kwargs_values);
+
+ if (kwargs_values[0] != Qundef && kwargs_values[0] != Qnil) {
+ char* dict_buffer = RSTRING_PTR(kwargs_values[0]);
+ size_t dict_size = RSTRING_LEN(kwargs_values[0]);
+ size_t load_dict_ret = ZSTD_DCtx_loadDictionary(dctx, dict_buffer, dict_size);
+ if (ZSTD_isError(load_dict_ret)) {
+ ZSTD_freeDCtx(dctx);
+ rb_raise(rb_eRuntimeError, "%s", "ZSTD_CCtx_loadDictionary failed");
+ }
+ }
}
#endif /* ZSTD_RUBY_H */