00001 #ifndef Exc_Ruby__ruby_class__hpp_
00002 #define Exc_Ruby__ruby_class__hpp_
00003
00004 #include "../detail/Iterator_Definer.hpp"
00005 #include "ruby_module.hpp"
00006
00007 namespace Exc_Ruby
00008 {
00009
00010 class Class
00011 : public Module
00012
00013
00014 {
00015 public:
00016 explicit Class(VALUE v);
00017
00018
00019
00020
00021 static VALUE default_allocation_func(VALUE klass)
00022 {
00023 return Exc_Ruby::default_allocation_func<int>(klass);
00024 }
00025
00026 template<typename Constructor_T>
00027 Class & define_constructor(
00028 Constructor_T constructor);
00029
00030
00031 template<typename Initialize_Func_T>
00032 Class & define_creation_funcs(
00033 RUBY_VALUE_FUNC allocate_func,
00034 Initialize_Func_T initialize_func);
00035
00036
00037 Class & undef_creation_funcs();
00038
00039
00040
00041 template<typename Exception_T, typename Functor_T>
00042 Class & add_handler(
00043 Functor_T functor);
00044
00045
00046
00047 template<typename Func_T>
00048 Class & define_method(
00049 char const * name,
00050 Func_T func);
00051
00052
00053
00054 template<typename Func_T>
00055 Class & define_singleton_method(
00056 char const * name,
00057 Func_T func);
00058
00059
00060
00061 template<typename Func_T>
00062 Class & define_module_function(
00063 char const * name,
00064 Func_T func);
00065 };
00066
00067 Class define_class_under(
00068 Value_Holder module,
00069 char const * name,
00070 Value_Holder superclass = rb_cObject);
00071
00072 Class define_class(
00073 char const * name,
00074 Value_Holder superclass = rb_cObject);
00075
00076 }
00077
00078 #include "ruby_class.ipp"
00079
00080 #endif // Exc_Ruby__ruby_class__hpp_
00081