File: nested_multimap_ext.c

package info (click to toggle)
ruby-multimap 1.1.2%2Bgh-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 228 kB
  • ctags: 96
  • sloc: ruby: 1,464; ansic: 18; makefile: 2
file content (24 lines) | stat: -rw-r--r-- 700 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "ruby.h"

VALUE cNestedMultimap;

static VALUE rb_nested_multimap_aref(int argc, VALUE *argv, VALUE self)
{
	int i;
	VALUE r, h;

	for (i = 0, r = self; rb_obj_is_kind_of(r, cNestedMultimap) == Qtrue; i++) {
		h = rb_funcall(r, rb_intern("_internal_hash"), 0);
		Check_Type(h, T_HASH);
		r = (i < argc) ? rb_hash_aref(h, argv[i]) : RHASH(h)->ifnone;
	}

	return r;
}

void Init_nested_multimap_ext() {
	cNestedMultimap = rb_const_get(rb_cObject, rb_intern("NestedMultimap"));
	// rb_funcall(cNestedMultimap, rb_intern("remove_method"), 1, rb_intern("[]"));
	rb_eval_string("NestedMultimap.send(:remove_method, :[])");
	rb_define_method(cNestedMultimap, "[]", rb_nested_multimap_aref, -1);
}