1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00

added raise_typeerror, raise_compatible_typeerror

This commit is contained in:
ser1zw 2011-07-03 14:16:38 +09:00
parent ecca9a0d66
commit 76f2933061
17 changed files with 65 additions and 42 deletions

View file

@ -102,8 +102,6 @@ rb_center(VALUE self)
VALUE VALUE
rb_set_center(VALUE self, VALUE value) rb_set_center(VALUE self, VALUE value)
{ {
if (!cCvPoint2D32f::rb_compatible_q(rb_klass, value))
rb_raise(rb_eArgError, "object is not compatible %s.", rb_class2name(cCvPoint2D32f::rb_class()));
CVBOX2D(self)->center = VALUE_TO_CVPOINT2D32F(value); CVBOX2D(self)->center = VALUE_TO_CVPOINT2D32F(value);
return self; return self;
} }

View file

@ -38,17 +38,20 @@ VALUE new_object(CvBox2D box);
__NAMESPACE_END_CVBOX2D __NAMESPACE_END_CVBOX2D
inline CvBox2D *CVBOX2D(VALUE object){ inline CvBox2D*
CVBOX2D(VALUE object){
CvBox2D *ptr; CvBox2D *ptr;
Data_Get_Struct(object, CvBox2D, ptr); Data_Get_Struct(object, CvBox2D, ptr);
return ptr; return ptr;
} }
inline CvBox2D VALUE_TO_CVBOX2D(VALUE object){ inline CvBox2D
if(rb_obj_is_kind_of(object, cCvBox2D::rb_class())) { VALUE_TO_CVBOX2D(VALUE object){
if (rb_obj_is_kind_of(object, cCvBox2D::rb_class())) {
return *CVBOX2D(object); return *CVBOX2D(object);
}else{ }
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvBox2D::rb_class())); else {
raise_typeerror(object, cCvBox2D::rb_class());
} }
} }

View file

@ -283,7 +283,7 @@ rb_set_size(VALUE self, VALUE value)
result = cvSetCaptureProperty(CVCAPTURE(self), CV_CAP_PROP_FRAME_HEIGHT, height); result = cvSetCaptureProperty(CVCAPTURE(self), CV_CAP_PROP_FRAME_HEIGHT, height);
} }
else else
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvSize::rb_class())); raise_compatible_typeerror(object, cCvSize::rb_class());
return DBL2NUM(result); return DBL2NUM(result);
} }

View file

@ -121,7 +121,7 @@ rb_detect_objects(int argc, VALUE *argv, VALUE self)
rb_scan_args(argc, argv, "11", &image, &options); rb_scan_args(argc, argv, "11", &image, &options);
if (!rb_obj_is_kind_of(image, cCvMat::rb_class())) if (!rb_obj_is_kind_of(image, cCvMat::rb_class()))
rb_raise(rb_eTypeError, "argument 1(target-image) should be %s.", rb_class2name(cCvMat::rb_class())); raise_typeerror(image, cCvMat::rb_class());
double scale_factor; double scale_factor;
int flags, min_neighbors; int flags, min_neighbors;

View file

@ -278,7 +278,6 @@ VALUE new_mat_kind_object(CvSize size, VALUE ref_obj, int cvmat_depth, int chann
__NAMESPACE_END_CVMAT __NAMESPACE_END_CVMAT
inline CvMat* inline CvMat*
CVMAT(VALUE object) CVMAT(VALUE object)
{ {
@ -291,22 +290,21 @@ inline CvMat*
CVMAT_WITH_CHECK(VALUE object) CVMAT_WITH_CHECK(VALUE object)
{ {
if (!rb_obj_is_kind_of(object, cCvMat::rb_class())) if (!rb_obj_is_kind_of(object, cCvMat::rb_class()))
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)", raise_typeerror(object, cCvMat::rb_class());
rb_class2name(CLASS_OF(object)), rb_class2name(cCvMat::rb_class()));
return CVMAT(object); return CVMAT(object);
} }
inline CvMat* inline CvMat*
MASK(VALUE object) MASK(VALUE object)
{ {
if(NIL_P(object)) if (NIL_P(object))
return NULL; return NULL;
else if(rb_obj_is_kind_of(object, cCvMat::rb_class()) && else if (rb_obj_is_kind_of(object, cCvMat::rb_class()) &&
CV_MAT_DEPTH(CVMAT(object)->type) == CV_8UC1 && CV_MAT_DEPTH(CVMAT(object)->type) == CV_8UC1 &&
CV_MAT_CN(CVMAT(object)->type) == 1) CV_MAT_CN(CVMAT(object)->type) == 1)
return CVMAT(object); return CVMAT(object);
else else
rb_raise(rb_eTypeError, "object is not mask."); rb_raise(rb_eTypeError, "object is not a mask.");
} }
__NAMESPACE_END_OPENCV __NAMESPACE_END_OPENCV

View file

@ -46,11 +46,12 @@ inline CvPoint *CVPOINT(VALUE object){
} }
inline CvPoint VALUE_TO_CVPOINT(VALUE object){ inline CvPoint VALUE_TO_CVPOINT(VALUE object){
if(cCvPoint::rb_compatible_q(cCvPoint::rb_class(), object)){ if (cCvPoint::rb_compatible_q(cCvPoint::rb_class(), object)) {
return cvPoint(NUM2INT(rb_funcall(object, rb_intern("x"), 0)), return cvPoint(NUM2INT(rb_funcall(object, rb_intern("x"), 0)),
NUM2INT(rb_funcall(object, rb_intern("y"), 0))); NUM2INT(rb_funcall(object, rb_intern("y"), 0)));
}else{ }
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvPoint::rb_class())); else {
raise_compatible_typeerror(object, cCvPoint::rb_class());
} }
} }

View file

@ -49,11 +49,12 @@ CVPOINT2D32F(VALUE object)
inline CvPoint2D32f inline CvPoint2D32f
VALUE_TO_CVPOINT2D32F(VALUE object) VALUE_TO_CVPOINT2D32F(VALUE object)
{ {
if(cCvPoint2D32f::rb_compatible_q(cCvPoint2D32f::rb_class(), object)){ if (cCvPoint2D32f::rb_compatible_q(cCvPoint2D32f::rb_class(), object)) {
return cvPoint2D32f(NUM2DBL(rb_funcall(object, rb_intern("x"), 0)), return cvPoint2D32f(NUM2DBL(rb_funcall(object, rb_intern("x"), 0)),
NUM2DBL(rb_funcall(object, rb_intern("y"), 0))); NUM2DBL(rb_funcall(object, rb_intern("y"), 0)));
}else{ }
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvPoint2D32f::rb_class())); else {
raise_compatible_typeerror(object, cCvPoint2D32f::rb_class());
} }
} }

View file

@ -51,12 +51,13 @@ CVPOINT3D32F(VALUE object)
inline CvPoint3D32f inline CvPoint3D32f
VALUE_TO_CVPOINT3D32F(VALUE object) VALUE_TO_CVPOINT3D32F(VALUE object)
{ {
if(cCvPoint3D32f::rb_compatible_q(cCvPoint3D32f::rb_class(), object)){ if (cCvPoint3D32f::rb_compatible_q(cCvPoint3D32f::rb_class(), object)) {
return cvPoint3D32f(NUM2DBL(rb_funcall(object, rb_intern("x"), 0)), return cvPoint3D32f(NUM2DBL(rb_funcall(object, rb_intern("x"), 0)),
NUM2DBL(rb_funcall(object, rb_intern("y"), 0)), NUM2DBL(rb_funcall(object, rb_intern("y"), 0)),
NUM2DBL(rb_funcall(object, rb_intern("z"), 0))); NUM2DBL(rb_funcall(object, rb_intern("z"), 0)));
}else{ }
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvPoint3D32f::rb_class())); else{
raise_compatible_typeerror(object, cCvPoint3D32f::rb_class());
} }
} }

View file

@ -97,7 +97,10 @@ define_ruby_class()
VALUE VALUE
rb_compatible_q(VALUE klass, VALUE object) rb_compatible_q(VALUE klass, VALUE object)
{ {
return (rb_respond_to(object, rb_intern("x")) && rb_respond_to(object, rb_intern("y")) && rb_respond_to(object, rb_intern("width")) && rb_respond_to(object, rb_intern("height"))) ? Qtrue : Qfalse; return (rb_respond_to(object, rb_intern("x")) &&
rb_respond_to(object, rb_intern("y")) &&
rb_respond_to(object, rb_intern("width")) &&
rb_respond_to(object, rb_intern("height"))) ? Qtrue : Qfalse;
} }
/* /*
@ -153,12 +156,13 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
break; break;
case 1: case 1:
object = argv[0]; object = argv[0];
if(rb_compatible_q(rb_klass, object)) { if (rb_compatible_q(rb_klass, object)) {
CVRECT(self)->x = NUM2INT(rb_funcall(rb_funcall(object, rb_intern("x"), 0), rb_intern("to_i"), 0)); CVRECT(self)->x = NUM2INT(rb_funcall(rb_funcall(object, rb_intern("x"), 0), rb_intern("to_i"), 0));
CVRECT(self)->y = NUM2INT(rb_funcall(rb_funcall(object, rb_intern("y"), 0), rb_intern("to_i"), 0)); CVRECT(self)->y = NUM2INT(rb_funcall(rb_funcall(object, rb_intern("y"), 0), rb_intern("to_i"), 0));
CVRECT(self)->width = NUM2INT(rb_funcall(rb_funcall(object, rb_intern("width"), 0), rb_intern("to_i"), 0)); CVRECT(self)->width = NUM2INT(rb_funcall(rb_funcall(object, rb_intern("width"), 0), rb_intern("to_i"), 0));
CVRECT(self)->height = NUM2INT(rb_funcall(rb_funcall(object, rb_intern("height"), 0), rb_intern("to_i"), 0)); CVRECT(self)->height = NUM2INT(rb_funcall(rb_funcall(object, rb_intern("height"), 0), rb_intern("to_i"), 0));
}else{ }
else{
rb_raise(rb_eArgError, "object is not compatible %s.", rb_class2name(rb_klass)); rb_raise(rb_eArgError, "object is not compatible %s.", rb_class2name(rb_klass));
} }
break; break;

View file

@ -63,13 +63,14 @@ CVRECT(VALUE object)
inline CvRect inline CvRect
VALUE_TO_CVRECT(VALUE object) VALUE_TO_CVRECT(VALUE object)
{ {
if(cCvRect::rb_compatible_q(cCvRect::rb_class(), object)){ if (cCvRect::rb_compatible_q(cCvRect::rb_class(), object)) {
return cvRect(NUM2INT(rb_funcall(object, rb_intern("x"), 0)), return cvRect(NUM2INT(rb_funcall(object, rb_intern("x"), 0)),
NUM2INT(rb_funcall(object, rb_intern("y"), 0)), NUM2INT(rb_funcall(object, rb_intern("y"), 0)),
NUM2INT(rb_funcall(object, rb_intern("width"), 0)), NUM2INT(rb_funcall(object, rb_intern("width"), 0)),
NUM2INT(rb_funcall(object, rb_intern("height"), 0))); NUM2INT(rb_funcall(object, rb_intern("height"), 0)));
}else{ }
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvRect::rb_class())); else {
raise_compatible_typeerror(object, cCvRect::rb_class());
} }
} }

View file

@ -58,7 +58,7 @@ VALUE_TO_CVSCALAR(VALUE object)
NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(2))), NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(2))),
NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(3)))); NUM2DBL(rb_funcall(object, rb_intern("[]"), 1, INT2FIX(3))));
else else
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvScalar::rb_class())); raise_compatible_typeerror(object, cCvScalar::rb_class());
} }
__NAMESPACE_END_OPENCV __NAMESPACE_END_OPENCV

View file

@ -50,11 +50,12 @@ CVSIZE(VALUE object)
inline CvSize inline CvSize
VALUE_TO_CVSIZE(VALUE object) VALUE_TO_CVSIZE(VALUE object)
{ {
if(cCvSize::rb_compatible_q(cCvSize::rb_class(), object)){ if (cCvSize::rb_compatible_q(cCvSize::rb_class(), object)) {
return cvSize(NUM2INT(rb_funcall(object, rb_intern("width"), 0)), return cvSize(NUM2INT(rb_funcall(object, rb_intern("width"), 0)),
NUM2INT(rb_funcall(object, rb_intern("height"), 0))); NUM2INT(rb_funcall(object, rb_intern("height"), 0)));
}else{ }
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvSize::rb_class())); else {
raise_compatible_typeerror(object, cCvSize::rb_class());
} }
} }

View file

@ -49,11 +49,12 @@ CVSIZE2D32F(VALUE object)
inline CvSize2D32f inline CvSize2D32f
VALUE_TO_CVSIZE2D32F(VALUE object) VALUE_TO_CVSIZE2D32F(VALUE object)
{ {
if(cCvSize2D32f::rb_compatible_q(cCvSize2D32f::rb_class(), object)){ if (cCvSize2D32f::rb_compatible_q(cCvSize2D32f::rb_class(), object)) {
return cvSize2D32f(NUM2DBL(rb_funcall(object, rb_intern("width"), 0)), return cvSize2D32f(NUM2DBL(rb_funcall(object, rb_intern("width"), 0)),
NUM2DBL(rb_funcall(object, rb_intern("height"), 0))); NUM2DBL(rb_funcall(object, rb_intern("height"), 0)));
}else{ }
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvSize2D32f::rb_class())); else {
raise_compatible_typeerror(object, cCvSize2D32f::rb_class());
} }
} }

View file

@ -51,7 +51,7 @@ VALUE_TO_CVSLICE(VALUE object)
rb_funcall(object, rb_intern("exclude_end?"), 0) ? NUM2INT(rb_funcall(object, rb_intern("end"), 0)) : NUM2INT(rb_funcall(object, rb_intern("end"), 0)) - 1); rb_funcall(object, rb_intern("exclude_end?"), 0) ? NUM2INT(rb_funcall(object, rb_intern("end"), 0)) : NUM2INT(rb_funcall(object, rb_intern("end"), 0)) - 1);
} }
else { else {
rb_raise(rb_eTypeError, "require %s or compatible object.", rb_class2name(cCvSlice::rb_class())); raise_compatible_typeerror(object, cCvSlice::rb_class());
} }
} }

View file

@ -58,7 +58,7 @@ VALUE_TO_CVTERMCRITERIA(VALUE object)
return cvTermCriteria(CV_TERMCRIT_EPS, 0, NUM2DBL(object)); return cvTermCriteria(CV_TERMCRIT_EPS, 0, NUM2DBL(object));
case T_ARRAY: case T_ARRAY:
if (RARRAY_LEN(object) == 2) { if (RARRAY_LEN(object) == 2) {
return cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, return cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS,
NUM2INT(rb_ary_entry(object, 0)), NUM2INT(rb_ary_entry(object, 0)),
NUM2DBL(rb_ary_entry(object, 1))); NUM2DBL(rb_ary_entry(object, 1)));
} }

View file

@ -276,6 +276,18 @@ rb_cvCreateMemStorage(int block_size)
return ptr; return ptr;
} }
void
raise_typeerror(VALUE object, VALUE expected_class) {
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",
rb_obj_classname(object), rb_class2name(expected_class));
}
void
raise_compatible_typeerror(VALUE object, VALUE expected_class) {
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s or compatible object)",
rb_obj_classname(object), rb_class2name(expected_class));
}
VALUE rb_module; VALUE rb_module;
VALUE rb_opencv_constants; VALUE rb_opencv_constants;

View file

@ -160,7 +160,6 @@ extern "C"{
#define INT2BOOL(x) (x ? Qtrue : Qfalse) #define INT2BOOL(x) (x ? Qtrue : Qfalse)
#endif #endif
// wrapper for <= 1.8 // wrapper for <= 1.8
#ifndef RARRAY_LEN #ifndef RARRAY_LEN
#define RARRAY_LEN(arg) (RARRAY(arg)->len) #define RARRAY_LEN(arg) (RARRAY(arg)->len)
@ -194,6 +193,9 @@ void free_object(void *ptr);
void release_object(void *ptr); void release_object(void *ptr);
void release_iplconvkernel_object(void *ptr); void release_iplconvkernel_object(void *ptr);
void raise_typeerror(VALUE object, VALUE expected_class);
void raise_compatible_typeerror(VALUE object, VALUE expected_class);
VALUE rb_module_opencv(); VALUE rb_module_opencv();
void define_ruby_module(); void define_ruby_module();