File: crcx.c

package info (click to toggle)
ruby-aliyun-sdk 0.8.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 792 kB
  • sloc: ruby: 7,909; ansic: 204; makefile: 4
file content (45 lines) | stat: -rw-r--r-- 1,159 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "crcx.h"

void Init_crcx(){
    VALUE mAliyun = Qnil;
    VALUE CrcX = Qnil;

    crc64_init_once();

    mAliyun = rb_define_module("Aliyun");
    CrcX = rb_define_module_under(mAliyun, "CrcX");
    rb_define_module_function(CrcX, "crc64", crc64_wrapper, 3);
    rb_define_module_function(CrcX, "crc64_combine", crc64_combine_wrapper, 3);
}

void check_num_type(VALUE crc_value)
{
    if (T_BIGNUM == TYPE(crc_value)) {
        Check_Type(crc_value, T_BIGNUM);
    }
    else {
        Check_Type(crc_value, T_FIXNUM);
    }
    return ;
}

VALUE crc64_wrapper(VALUE self, VALUE init_crc, VALUE buffer, VALUE size)
{
    uint64_t crc_value = 0;

    check_num_type(init_crc);
    check_num_type(size);
    Check_Type(buffer, T_STRING);
    crc_value = crc64(NUM2ULL(init_crc), (void *)RSTRING_PTR(buffer), NUM2ULL(size));
    return ULL2NUM(crc_value);
}

VALUE crc64_combine_wrapper(VALUE self, VALUE crc1, VALUE crc2, VALUE len2)
{
    uint64_t crc_value = 0;
    check_num_type(crc1);
    check_num_type(crc2);
    check_num_type(len2);
    crc_value = crc64_combine(NUM2ULL(crc1), NUM2ULL(crc2), NUM2ULL(len2));
    return ULL2NUM(crc_value);
}