diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-07 07:54:28 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-07 07:54:28 +0000 |
commit | ac3c2866c74a703d5208a9001606ac4738daadbd (patch) | |
tree | 995b4ebf38b0616393b4c0391a711544636e43de | |
parent | 74a6cc877cb0d8af8f34103a003689c9f184d85e (diff) |
* error.c (rb_typed_struct_is_kind_of): new function to see if the
given typed struct.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23983 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | error.c | 10 | ||||
-rw-r--r-- | include/ruby/ruby.h | 2 |
3 files changed, 17 insertions, 0 deletions
@@ -1,3 +1,8 @@ +Tue Jul 7 16:54:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * error.c (rb_typed_struct_is_kind_of): new function to see if the + given typed struct. + Tue Jul 7 13:44:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> * error.c (rb_check_typed_struct): new function to check typed @@ -316,6 +316,16 @@ rb_check_type(VALUE x, int t) } } +int +rb_typed_struct_is_kind_of(VALUE obj, const rb_data_type_t *data_type) +{ + if (SPECIAL_CONST_P(obj) || BUILTIN_TYPE(obj) != T_DATA || + !RTYPEDDATA_P(obj) || RTYPEDDATA_TYPE(obj) != data_type) { + return 0; + } + return 1; +} + void * rb_check_typed_struct(VALUE obj, const rb_data_type_t *data_type) { diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 8aef106b9a..d9d23355ed 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -764,8 +764,10 @@ typedef void (*RUBY_DATA_FUNC)(void*); VALUE rb_data_object_alloc(VALUE,void*,RUBY_DATA_FUNC,RUBY_DATA_FUNC); VALUE rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *); +int rb_typed_struct_is_kind_of(VALUE, const rb_data_type_t *); void *rb_check_typed_struct(VALUE, const rb_data_type_t *); #define Check_TypedStruct(v,t) rb_check_typed_struct((VALUE)(v),t) +#define RUBY_TYPED_DEFAULT_FREE ((void (*)(void *))-1) #define Data_Wrap_Struct(klass,mark,free,sval)\ rb_data_object_alloc(klass,sval,(RUBY_DATA_FUNC)mark,(RUBY_DATA_FUNC)free) |