/* * call-seq: * CvSeq.new(<i>type[,storage]</i>) * * Return a new CvSeq. <i>type</i> should be following classes. * * * CvIndex * * CvPoint */ VALUE rb_initialize(int argc, VALUE *argv, VALUE self) { VALUE klass, storage_value; CvMemStorage *storage; if (rb_scan_args(argc, argv, "11", &klass, &storage_value) > 1) { storage_value = CHECK_CVMEMSTORAGE(storage_value); storage = CVMEMSTORAGE(storage_value); } else storage = rb_cvCreateMemStorage(0); if(!rb_obj_is_kind_of(klass, rb_cClass)) raise_typeerror(klass, rb_cClass); int type = 0, size = 0; if (klass == rb_cFixnum) { type = CV_SEQ_ELTYPE_INDEX; size = sizeof(int); } else if (klass == cCvPoint::rb_class()) { type = CV_SEQ_ELTYPE_POINT; size = sizeof(CvPoint); } else if (klass == cCvPoint2D32f::rb_class()) { type = CV_SEQ_ELTYPE_POINT; size = sizeof(CvPoint2D32f); } else if (klass == cCvPoint3D32f::rb_class()) { type = CV_SEQ_ELTYPE_POINT3D; size = sizeof(CvPoint3D32f); } else rb_raise(rb_eArgError, "unsupport %s class for sequence-block.", rb_class2name(klass)); CvSeq* seq = NULL; try { seq = cvCreateSeq(type, sizeof(CvSeq), size, storage); } catch (cv::Exception& e) { raise_cverror(e); } DATA_PTR(self) = seq; resist_class_information_of_sequence(seq, klass); return self; }
VALUE rb_initialize(int argc, VALUE *argv, VALUE self) { CvMemStorage *storage; VALUE storage_value; if (rb_scan_args(argc, argv, "01", &storage_value) > 0) { storage_value = CHECK_CVMEMSTORAGE(storage_value); storage = CVMEMSTORAGE(storage_value); } else storage = rb_cvCreateMemStorage(0); try { DATA_PTR(self) = (CvChain*)cvCreateSeq(CV_SEQ_ELTYPE_CODE, sizeof(CvChain), sizeof(char), storage); } catch (cv::Exception& e) { raise_cverror(e); } return self; }