Sha256: 00d387f612503705710d71dd49e1b9a47b5d69fd7a4166d660e992e026569d98

Contents?: true

Size: 1.97 KB

Versions: 3

Compression:

Stored size: 1.97 KB

Contents

#include "reflex/ruby/key.h"


#include <rucy.h>
#include "defs.h"


using namespace Rucy;


static Class cKey;


namespace Reflex
{


	Class
	key_class ()
	{
		return cKey;
	}


}// Reflex


namespace Rucy
{


	Value
	value (const Reflex::Key& key)
	{
		return new_type(cKey, new Reflex::Key(key));
	}


}// Rucy


#define THIS to<Reflex::Key*>(self)

#define CHECK RUCY_CHECK_OBJ(self, Reflex::Key, cKey)


static
VALUE alloc(VALUE klass)
{
	return new_type<Reflex::Key>(klass);
}

static
VALUE initialize(VALUE self)
{
	RUCY_CHECK_OBJ(self, Reflex::Key, cKey);
	if (argc < 0 || 4 < argc)
		argument_error("Key#initialize", argc, 0, 1, 2);

	THIS->chars     = (argc >= 1) ? argv[0].c_str()   : NULL;
	THIS->code      = (argc >= 2) ? to<int>(argv[1])  : Reflex::KEY_NONE;
	THIS->repeat    = (argc >= 3) ? to<int>(argv[2])  : 1;
	THIS->modifiers = (argc >= 4) ? to<uint>(argv[3]) : (uint) Reflex::MOD_NONE;

	return self;
}

static
VALUE initialize_copy(VALUE self, VALUE obj)
{
	RUCY_CHECK_OBJ(self, Reflex::Key, cKey);

	Reflex::Key* key = to<Reflex::Key*>(obj);
	if (!key) argument_error();

	*THIS = *key;
	return self;
}

static
VALUE chars(VALUE self)
{
	CHECK;
	return value(THIS->chars.c_str());
}

static
VALUE code(VALUE self)
{
	CHECK;
	return value(THIS->code);
}

static
VALUE repeat(VALUE self)
{
	CHECK;
	return value(THIS->repeat);
}

static
VALUE modifiers(VALUE self)
{
	CHECK;
	return value(THIS->modifiers);
}


void
Init_key ()
{
	Module mReflex = rb_define_module("Reflex");

	cKey = rb_define_class_under(mReflex, "Key", rb_cObject);
	rb_define_alloc_func(cKey, alloc);
	rb_define_private_method(cKey, "initialize", RUBY_METHOD_FUNC(initialize), -1);
	rb_define_private_method(cKey, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
	rb_define_method(cKey, "chars", RUBY_METHOD_FUNC(chars), 0);
	rb_define_method(cKey, "code", RUBY_METHOD_FUNC(code), 0);
	rb_define_method(cKey, "repeat", RUBY_METHOD_FUNC(repeat), 0);
	rb_define_method(cKey, "modifiers", RUBY_METHOD_FUNC(modifiers), 0);
}

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
reflexion-0.1.6 .doc/ext/reflex/key.cpp
reflexion-0.1.5 .doc/ext/reflex/key.cpp
reflexion-0.1.4 .doc/ext/reflex/key.cpp