utilrb.cc
Go to the documentation of this file.
00001 #include <ruby.h>
00002 #include <set>
00003 
00004 static VALUE mUtilrb;
00005 
00006 using namespace std;
00007 
00008 #ifndef RUBINIUS
00009 static VALUE enumerable_each_uniq_i(VALUE i, VALUE* memo)
00010 { 
00011     set<VALUE>& seen = *reinterpret_cast< set<VALUE>* >(memo); 
00012     if (seen.find(i) == seen.end())
00013     {
00014         seen.insert(i);
00015         return rb_yield(i);
00016     }
00017     else
00018         return Qnil;
00019 
00020 }
00021 
00022 /* :nodoc: */
00023 static VALUE enumerable_each_uniq(VALUE self)
00024 {
00025     set<VALUE> seen;
00026     rb_iterate(rb_each, self, 
00027             RUBY_METHOD_FUNC(enumerable_each_uniq_i), (VALUE)&seen);
00028     return self;
00029 }
00030 
00031 /* call-seq:
00032  *  Kernel.is_singleton?(object)
00033  *
00034  * Returns true if +self+ is a singleton class 
00035  */
00036 static VALUE kernel_is_singleton_p(VALUE self)
00037 {
00038     if (BUILTIN_TYPE(self) == T_CLASS && FL_TEST(self, FL_SINGLETON))
00039         return Qtrue;
00040     else
00041         return Qfalse;
00042 }
00043 
00044 static VALUE kernel_is_immediate(VALUE klass, VALUE object)
00045 { return IMMEDIATE_P(object) ? Qtrue : Qfalse; }
00046 #endif
00047 
00048 static VALUE kernel_crash(VALUE klass)
00049 {
00050     *((int*)0) = 10;
00051     // Return something to shut gcc up
00052     return Qfalse;
00053 }
00054 
00055 extern "C" void Init_value_set();
00056 extern "C" void Init_weakref(VALUE mUtilrb);
00057 extern "C" void Init_proc();
00058 extern "C" void Init_utilrb_readline();
00059 
00060 extern "C" void Init_utilrb()
00061 {
00062     mUtilrb = rb_define_module("Utilrb");
00063 
00064 #ifndef RUBINIUS
00065     rb_define_method(rb_mEnumerable, "each_uniq", RUBY_METHOD_FUNC(enumerable_each_uniq), 0);
00066     if (!rb_respond_to(rb_mEnumerable, rb_intern("singleton_class?")))
00067         rb_define_method(rb_cModule, "singleton_class?", RUBY_METHOD_FUNC(kernel_is_singleton_p), 0);
00068 
00069     rb_define_singleton_method(rb_mKernel, "crash!", RUBY_METHOD_FUNC(kernel_crash), 0);
00070     rb_define_singleton_method(rb_mKernel, "immediate?", RUBY_METHOD_FUNC(kernel_is_immediate), 1);
00071 
00072     Init_weakref(mUtilrb);
00073 #endif
00074 
00075     Init_proc();
00076 
00077     Init_value_set();
00078     Init_utilrb_readline();
00079 }
00080 


utilrb
Author(s): Sylvain Joyeux/sylvain.joyeux@m4x.org
autogenerated on Sat Jun 8 2019 18:49:20