Module: Zstd::ContextLess

Defined in:
ext/extzstd.c

Class Method Summary collapse

Class Method Details

.decode(src, dest, maxdest) ⇒ Object

RETURN

dest

src (string)
dest (string)
maxdest (integer or nil)


579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
# File 'ext/extzstd.c', line 579

static VALUE
less_s_decode(VALUE mod, VALUE src, VALUE dest, VALUE maxdest, VALUE predict)
{
    const char *q;
    size_t qsize;
    aux_string_pointer(src, &q, &qsize);

    char *r;
    size_t rsize = (NIL_P(maxdest)) ? ZSTD_getDecompressedSize(q, qsize) : NUM2SIZET(maxdest);
    aux_string_expand_pointer(dest, &r, rsize);
    rb_obj_infect(dest, src);

    const char *d;
    size_t dsize;
    aux_string_pointer_with_nil(predict, &d, &dsize);
    rb_obj_infect(dest, predict);

    ZSTD_DCtx *z = ZSTD_createDCtx();
    size_t s = ZSTD_decompress_usingDict(z, r, rsize, q, qsize, d, dsize);
    ZSTD_freeDCtx(z);
    extzstd_check_error(s);
    rb_str_set_len(dest, s);

    return dest;
}

.encode(src, dest, maxdest, params) ⇒ Object

RETURN

dest

src (string)
dest (string)
maxdest (integer or nil)
params (nil, integer or Zstd::Parameters)


520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
# File 'ext/extzstd.c', line 520

static VALUE
less_s_encode(VALUE mod, VALUE src, VALUE dest, VALUE maxdest, VALUE predict, VALUE params)
{
    const char *q;
    size_t qsize;
    aux_string_pointer(src, &q, &qsize);

    char *r;
    size_t rsize = (NIL_P(maxdest)) ? ZSTD_compressBound(qsize) : NUM2SIZET(maxdest);
    aux_string_expand_pointer(dest, &r, rsize);
    rb_obj_infect(dest, src);

    const char *d;
    size_t dsize;
    aux_string_pointer_with_nil(predict, &d, &dsize);
    rb_obj_infect(dest, predict);

    if (extzstd_params_p(params)) {
        /*
         * ZSTDLIB_API size_t ZSTD_compress_advanced(
         *      ZSTD_CCtx* ctx,
         *      void* dst, size_t dstCapacity,
         *      const void* src, size_t srcSize,
         *      const void* dict,size_t dictSize,
         *      ZSTD_parameters params);
         */
        ZSTD_CCtx *zstd = ZSTD_createCCtx();
        size_t s = ZSTD_compress_advanced(zstd, r, rsize, q, qsize, d, dsize, *extzstd_getparams(params));
        ZSTD_freeCCtx(zstd);
        extzstd_check_error(s);
        rb_str_set_len(dest, s);
        return dest;
    } else {
        /*
         * ZSTDLIB_API size_t ZSTD_compress_usingDict(
         *      ZSTD_CCtx* ctx,
         *      void* dst, size_t dstCapacity,
         *      const void* src, size_t srcSize,
         *      const void* dict,size_t dictSize,
         *      int compressionLevel);
         */
        ZSTD_CCtx *zstd = ZSTD_createCCtx();
        size_t s = ZSTD_compress_usingDict(zstd, r, rsize, q, qsize, d, dsize, aux_num2int(params, 0));
        ZSTD_freeCCtx(zstd);
        extzstd_check_error(s);
        rb_str_set_len(dest, s);
        return dest;
    }
}