Sha256: 937a698e0b05c5cb51e94d164dff22788c2fbe8bd5faeda7d4f2db124bd959be

Contents?: true

Size: 1.04 KB

Versions: 11

Compression:

Stored size: 1.04 KB

Contents

#include <ruby.h>
#include <arpa/inet.h>

VALUE parts_ivar_id;

VALUE rb_cassandra_composite_fast_unpack(VALUE self, VALUE packed_string_value) {
  int i = 0;
  int index = 0;
  int message_length = RSTRING_LEN(packed_string_value);
  char *packed_string = (char *)RSTRING_PTR(packed_string_value);

  VALUE parts = rb_ary_new();
  while (index < message_length) {
    uint16_t length = ntohs(((uint16_t *)(packed_string+index))[0]);
    VALUE part = rb_str_new("", length);
    for (i = 0; i < length; i++) {
      ((char *)RSTRING_PTR(part))[i] = packed_string[index+2+i];
    }
    rb_ary_push(parts, part);
    index += length + 3;
  }

  rb_ivar_set(self, parts_ivar_id, parts);

  return Qnil;
}

void Init_cassandra_native(void) {
  VALUE cassandra_module = rb_const_get(rb_cObject, rb_intern("Cassandra"));
  VALUE cassandra_composite_class = rb_define_class_under(cassandra_module, "Composite", rb_cObject);
  rb_define_method(cassandra_composite_class, "fast_unpack", rb_cassandra_composite_fast_unpack, 1);

  parts_ivar_id = rb_intern("@parts");
}

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
sessionm-cassandra-1.1.2 ext/cassandra_native.c
sessionm-cassandra-1.1.1 ext/cassandra_native.c
sessionm-cassandra-1.1.0 ext/cassandra_native.c
sessionm-cassandra-1.0.2 ext/cassandra_native.c
cassandra-0.18.0 ext/cassandra_native.c
sessionm-cassandra-1.0.1 ext/cassandra_native.c
sessionm-cassandra-1.0.0 ext/cassandra_native.c
cassandra-0.17.0 ext/cassandra_native.c
cassandra-0.16.0 ext/cassandra_native.c
cassandra-0.15.0 ext/cassandra_native.c
cassandra-0.14.0 ext/cassandra_native.c