void CheckParameterListMatch(SYM *s1, SYM *s2) { s1 = s1->parms; s2 = s2->parms; if (!SameType(s1->tp,s2->tp)) error(ERR_PARMLIST_MISMATCH); }
static bool SameType(TYP *tp1, TYP *tp2) { bool ret; printf("Enter SameType\r\n"); while(false) { if (tp1->type == tp2->type) { if (!tp1->GetBtp() && !tp2->GetBtp()) { ret = true; break; } if (tp1->GetBtp() && !tp2->GetBtp()) { ret = false; break; } if (!tp1->GetBtp() && tp2->GetBtp()) { ret = false; break; } ret = SameType(tp1->GetBtp(),tp2->GetBtp()); break; } else { ret = false; break; } } xit: printf("Leave SameType\r\n"); return ret; }
void ImageProximityFFT::SqrDistance_Norm(Image& Source, Image& Template, Image& Dest) { CheckFloat(Dest); CheckSameNbChannels(Source, Template); CheckSameNbChannels(Source, Dest); CheckSameSize(Source, Dest); // Verify image size if (Template.Width() > Source.Width() || Template.Height() > Source.Height()) throw cl::Error(CL_IMAGE_FORMAT_NOT_SUPPORTED, "The template image must be smaller than source image."); // Verify image types if(!SameType(Source, Template)) throw cl::Error(CL_IMAGE_FORMAT_MISMATCH, "The source image and the template image must be same type."); PrepareFor(Source, Template); m_integral.SqrIntegral(Source, *m_image_sqsums); double templ_sqsum[4] = {0}; m_statistics.SumSqr(Template, templ_sqsum); CrossCorr(Source, Template, Dest); MatchSquareDiffNorm(Template.Width(), Template.Height(), *m_image_sqsums, templ_sqsum, Dest); }
void ImageProximityFFT::CrossCorr(Image& Source, Image& Template, Image& Dest) { CheckFloat(Dest); CheckSameNbChannels(Source, Template); CheckSameNbChannels(Source, Dest); CheckSameSize(Source, Dest); // Verify image size if (Template.Width() > Source.Width() || Template.Height() > Source.Height()) throw cl::Error(CL_IMAGE_FORMAT_NOT_SUPPORTED, "The template image must be smaller than source image."); // Verify image types if(!SameType(Source, Template)) throw cl::Error(CL_IMAGE_FORMAT_MISMATCH, "The source image and the template image must be same type."); PrepareFor(Source, Template); Convolve(Source, Template, Dest); // Computes the cross correlation using FFT }
void Conversions::Convert(Image& Source, Image& Dest) { CheckSameSize(Source, Dest); if (SameType(Source, Dest)) { Copy(Source, Dest); return; } switch (Dest.DataType()) { case SImage::U8: Kernel(to_uchar, Source, Dest, Source.Step(), Dest.Step()); break; case SImage::S8: Kernel(to_char, Source, Dest, Source.Step(), Dest.Step()); break; case SImage::U16: Kernel(to_ushort, Source, Dest, Source.Step(), Dest.Step()); break; case SImage::S16: Kernel(to_short, Source, Dest, Source.Step(), Dest.Step()); break; case SImage::U32: Kernel(to_uint, Source, Dest, Source.Step(), Dest.Step()); break; case SImage::S32: Kernel(to_int, Source, Dest, Source.Step(), Dest.Step()); break; case SImage::F32: Kernel(to_float, Source, Dest, Source.Step(), Dest.Step()); break; case SImage::F64: Kernel(to_double, Source, Dest, Source.Step(), Dest.Step()); break; case SImage::NbDataTypes: default: throw cl::Error(CL_IMAGE_FORMAT_NOT_SUPPORTED, "Unsupported data type"); } }
static OOC_BOOLEAN SameType(RT0__Struct t1, RT0__Struct t2, RT0__Struct receiverTag) { RESOLVE_TYPE_VAR(t1, receiverTag); RESOLVE_TYPE_VAR(t2, receiverTag); if (t1 == t2) { return OOC_TRUE; } else if ((t1->form == RT0__strQualType) && (t2->form == RT0__strQualType) && (t1->typeArgs[0] == t2->typeArgs[0])) { int i=1; while ((t1->typeArgs[i] != NULL) && SameType(t1->typeArgs[i], t2->typeArgs[i], receiverTag)) { i++; } return (t1->typeArgs[i] == NULL); } else { return OOC_FALSE; } }
OOC_BOOLEAN RT0__TypeTest(RT0__Struct tag, RT0__Struct td, RT0__Struct receiverTag) { RESOLVE_TYPE_VAR(td, receiverTag); return (tag->len >= td->len) && SameType(tag->baseTypes[td->len], td, receiverTag); }