Skip to content

Commit

Permalink
fix whitespace in decoder.c
Browse files Browse the repository at this point in the history
  • Loading branch information
mojombo committed Apr 28, 2009
1 parent 45377f7 commit 19601e4
Showing 1 changed file with 58 additions and 63 deletions.
121 changes: 58 additions & 63 deletions ext/decoder.c
Expand Up @@ -79,52 +79,52 @@ VALUE read_small_tuple(unsigned char **pData) {
if(read_1(pData) != ERL_SMALL_TUPLE) {
rb_raise(rb_eStandardError, "Invalid Type, not a small tuple");
}

int arity = read_1(pData);

VALUE array = rb_ary_new2(arity);

int i;
for(i = 0; i < arity; ++i) {
rb_ary_store(array, i, read_any_raw(pData));
}

return array;
}

VALUE read_large_tuple(unsigned char **pData) {
if(read_1(pData) != ERL_LARGE_TUPLE) {
rb_raise(rb_eStandardError, "Invalid Type, not a large tuple");
}

int arity = read_4(pData);

VALUE array = rb_ary_new2(arity);

int i;
for(i = 0; i < arity; ++i) {
rb_ary_store(array, i, read_any_raw(pData));
}

return array;
}

VALUE read_list(unsigned char **pData) {
if(read_1(pData) != ERL_LIST) {
rb_raise(rb_eStandardError, "Invalid Type, not an erlang list");
}

int size = read_4(pData);

VALUE array = rb_ary_new2(size);

int i;
for(i = 0; i < size; ++i) {
rb_ary_store(array, i, read_any_raw(pData));
}

read_1(pData);

return array;
}

Expand All @@ -140,161 +140,156 @@ VALUE read_bin(unsigned char **pData) {
if(read_1(pData) != ERL_BIN) {
rb_raise(rb_eStandardError, "Invalid Type, not an erlang binary");
}

int length = read_4(pData);

unsigned char buf[length + 1];
read_string_raw(buf, pData, length);

return rb_str_new2((char *) buf);
}

VALUE read_string(unsigned char **pData) {
if(read_1(pData) != ERL_STRING) {
rb_raise(rb_eStandardError, "Invalid Type, not an erlang string");
}

int length = read_2(pData);

unsigned char buf[length + 1];
read_string_raw(buf, pData, length);

VALUE array = rb_ary_new2(length);

int i = 0;
for(i; i < length; ++i) {
rb_ary_store(array, i, INT2NUM(*(buf + i)));
}

return array;
}

VALUE read_atom(unsigned char **pData) {
if(read_1(pData) != ERL_ATOM) {
rb_raise(rb_eStandardError, "Invalid Type, not an atom");
}

int length = read_2(pData);

unsigned char buf[length + 1];
read_string_raw(buf, pData, length);

// Erlang true and false are actually atoms
if(strncmp((char *) buf, "true", length) == 0) {
// bool true
return Qtrue;
}
else if(strncmp((char *) buf, "false", length) == 0)
{
// bool false
} else if(strncmp((char *) buf, "false", length) == 0) {
return Qfalse;
}
else {
} else {
return ID2SYM(rb_intern((char *) buf));
}
}
}

VALUE read_small_int(unsigned char **pData) {
if(read_1(pData) != ERL_SMALL_INT) {
rb_raise(rb_eStandardError, "Invalid Type, not a small int");
}

int value = read_1(pData);

return INT2FIX(value);
}

VALUE read_int(unsigned char **pData) {
if(read_1(pData) != ERL_INT) {
rb_raise(rb_eStandardError, "Invalid Type, not an int");
}

long long value = read_4(pData);

long long negative = ((value >> 31) & 0x1 == 1);

if(negative) {
value = (value - ((long long) 1 << 32));
}

return INT2FIX(value);
}

VALUE read_small_bignum(unsigned char **pData) {
if(read_1(pData) != ERL_SMALL_BIGNUM) {
rb_raise(rb_eStandardError, "Invalid Type, not a small bignum");
}

unsigned int size = read_1(pData);
unsigned int sign = read_1(pData);

VALUE num = INT2NUM(0);
VALUE tmp;

unsigned char buf[size + 1];
read_string_raw(buf, pData, size);

int i;
for(i = 0; i < size; ++i) {
tmp = INT2FIX(*(buf + i));
tmp = rb_funcall(tmp, rb_intern("<<"), 1, INT2NUM(i * 8));
num = rb_funcall(num, rb_intern("+"), 1, tmp);
}

if(sign) {
num = rb_funcall(num, rb_intern("*"), 1, INT2NUM(-1));
}

return num;
}

VALUE read_large_bignum(unsigned char **pData) {
if(read_1(pData) != ERL_LARGE_BIGNUM) {
rb_raise(rb_eStandardError, "Invalid Type, not a small bignum");
}

unsigned int size = read_4(pData);
unsigned int sign = read_1(pData);

VALUE num = INT2NUM(0);
VALUE tmp;

unsigned char buf[size + 1];
read_string_raw(buf, pData, size);

int i;
for(i = 0; i < size; ++i) {
tmp = INT2FIX(*(buf + i));
tmp = rb_funcall(tmp, rb_intern("<<"), 1, INT2NUM(i * 8));

num = rb_funcall(num, rb_intern("+"), 1, tmp);
}

if(sign) {
num = rb_funcall(num, rb_intern("*"), 1, INT2NUM(-1));
}

return num;
}

VALUE read_float(unsigned char **pData) {
if(read_1(pData) != ERL_FLOAT) {
rb_raise(rb_eStandardError, "Invalid Type, not a float");
}

unsigned char buf[32];
read_string_raw(buf, pData, 31);

VALUE rString = rb_str_new2((char *) buf);

return rb_funcall(rString, rb_intern("to_f"), 0);
}

VALUE read_nil(unsigned char **pData) {
if(read_1(pData) != ERL_NIL) {
rb_raise(rb_eStandardError, "Invalid Type, not a nil list");
}

return rb_ary_new2(0);
}

Expand All @@ -304,12 +299,12 @@ VALUE read_pid(unsigned char **pData) {
if(read_1(pData) != ERL_PID) {
rb_raise(rb_eStandardError, "Invalid Type, not a pid");
}

VALUE node = read_atom(pData);
VALUE id = INT2NUM(read_4(pData));
VALUE serial = INT2NUM(read_4(pData));
VALUE creation = INT2FIX(read_1(pData));

VALUE pid_class = rb_const_get(mErlectricity, rb_intern("Pid"));
return rb_funcall(pid_class, rb_intern("new"), 4, node, id, serial, creation);
}
Expand All @@ -318,17 +313,17 @@ VALUE read_new_reference(unsigned char **pData) {
if(read_1(pData) != ERL_NEW_REF) {
rb_raise(rb_eStandardError, "Invalid Type, not a new-style reference");
}

int size = read_2(pData);
VALUE node = read_atom(pData);
VALUE creation = INT2FIX(read_1(pData));

VALUE id = rb_ary_new2(size);
int i;
for(i = 0; i < size; ++i) {
rb_ary_store(id, i, INT2NUM(read_4(pData)));
}

VALUE newref_class = rb_const_get(mErlectricity, rb_intern("NewReference"));
return rb_funcall(newref_class, rb_intern("new"), 3, node, creation, id);
}
Expand Down Expand Up @@ -385,14 +380,14 @@ VALUE read_any_raw(unsigned char **pData) {

VALUE method_decode(VALUE klass, VALUE rString) {
unsigned char *data = (unsigned char *) StringValuePtr(rString);

unsigned char **pData = &data;

// check protocol version
if(read_1(pData) != ERL_VERSION) {
rb_raise(rb_eStandardError, "Bad Magic");
}

return read_any_raw(pData);
}

Expand Down

0 comments on commit 19601e4

Please sign in to comment.