Sha256: e237a64085d2af7238b51117af72449774cedcb9a448c0590175542fe129281d

Contents?: true

Size: 1.8 KB

Versions: 6

Compression:

Stored size: 1.8 KB

Contents

#include "wankel.h"

static ID intern_new, intern_parse, intern_encode;

static VALUE c_wankel, c_wankelParser, c_wankelEncoder, e_parseError, e_encodeError;

// Class Methods =============================================================
static VALUE wankel_parse(int argc, VALUE * argv, VALUE klass) {
    VALUE parser, input, options, callback;
    rb_scan_args(argc, argv, "11&", &input, &options, &callback);
    
    parser = rb_funcall(c_wankelParser, intern_new, 1, options);
    return rb_funcall(parser, intern_parse, 2, input, callback);
}

static VALUE wankel_encode(int argc, VALUE * argv, VALUE klass) {
    VALUE encoder, input, output, options;
    rb_scan_args(argc, argv, "12", &input, &output, &options);
	

	if (TYPE(output) == T_HASH) {
		encoder = rb_funcall(c_wankelEncoder, intern_new, 1, output);
		return rb_funcall(encoder, intern_encode, 1, input);
	} else {
		encoder = rb_funcall(c_wankelEncoder, intern_new, 1, options);
		return rb_funcall(encoder, intern_encode, 2, input, output);
	}
}

void Init_wankel() {
    c_wankel = rb_define_class("Wankel", rb_cObject);
    e_parseError = rb_define_class_under(c_wankel, "ParseError", rb_eStandardError);
    e_encodeError = rb_define_class_under(c_wankel, "EncodeError", rb_eStandardError);
    
    intern_new = rb_intern("new");
    intern_parse = rb_intern("parse");
	intern_encode = rb_intern("encode");

    rb_define_singleton_method(c_wankel, "parse", wankel_parse, -1);
    rb_define_singleton_method(c_wankel, "encode", wankel_encode, -1);
	
    rb_define_singleton_method(c_wankel, "load", wankel_parse, -1);
    rb_define_singleton_method(c_wankel, "dump", wankel_encode, -1);
    
    c_wankelParser = Init_wankel_parser();
    c_wankelEncoder = Init_wankel_encoder();
    Init_wankel_sax_parser();
    Init_wankel_sax_encoder();
    Init_yajl_helpers();
}

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
wankel-0.4.0 ext/wankel/wankel.c
wankel-0.3.1 ext/wankel/wankel.c
wankel-0.3.0 ext/wankel/wankel.c
wankel-0.2.0 ext/wankel/wankel.c
wankel-0.1.1 ext/wankel/wankel.c
wankel-0.1.0 ext/wankel/wankel.c