From: Roman Lygin Date: Thu, 30 Jan 2014 08:58:31 +0000 (+0400) Subject: 0023855: Old BOPs fail on Win7 64bit when using TBB X-Git-Tag: HYDRO-2014-01-31~14 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=091232bae7585054cbc860aa9aed6199be3c8301 0023855: Old BOPs fail on Win7 64bit when using TBB Minor code refactoring (readability) Test case for issue CR23855 --- diff --git a/src/TopOpeBRep/TopOpeBRep_sort.cxx b/src/TopOpeBRep/TopOpeBRep_sort.cxx index f4c47373a9..1cecf1797c 100644 --- a/src/TopOpeBRep/TopOpeBRep_sort.cxx +++ b/src/TopOpeBRep/TopOpeBRep_sort.cxx @@ -19,33 +19,49 @@ #include #include -typedef Standard_Address BOA_t; +typedef TopOpeBRepDS_ListOfInterference* BOA_t; -int compll(const void* v1, const void* v2) { - const TopOpeBRepDS_ListOfInterference* l1 = (const TopOpeBRepDS_ListOfInterference*)(*((long int*)v1)); - const TopOpeBRepDS_ListOfInterference* l2 = (const TopOpeBRepDS_ListOfInterference*)(*((long int*)v2)); +static int compll(const void* v1, const void* v2) { + BOA_t l1 = *(BOA_t*)v1; + BOA_t l2 = *(BOA_t*)v2; if (l1->Extent() == 0) return (0); else if (l2->Extent() == 0) return (0); - Handle(TopOpeBRepDS_CurvePointInterference) i1 = Handle(TopOpeBRepDS_CurvePointInterference)::DownCast(l1->First()); if (i1.IsNull()) return (0); - Handle(TopOpeBRepDS_CurvePointInterference) i2 = Handle(TopOpeBRepDS_CurvePointInterference)::DownCast(l2->First()); if (i2.IsNull()) return (0); + Handle(TopOpeBRepDS_CurvePointInterference) i1 = Handle(TopOpeBRepDS_CurvePointInterference)::DownCast(l1->First()); + if (i1.IsNull()) + return 0; + Handle(TopOpeBRepDS_CurvePointInterference) i2 = Handle(TopOpeBRepDS_CurvePointInterference)::DownCast(l2->First()); + if (i2.IsNull()) + return 0; Standard_Real p1 = i1->Parameter(); Standard_Real p2 = i2->Parameter(); if (p1 < p2) return (-1); else if (p1 > p2) return (1); - else return (0); + return 0; } -Standard_EXPORT void BREP_sortonparameter2(TopOpeBRepDS_ListOfInterference& LOI) +static void BREP_sortonparameter2(TopOpeBRepDS_ListOfInterference& LOI) { - TopOpeBRepDS_TKI tki;tki.FillOnGeometry(LOI); - Standard_Integer ng=0; for(tki.Init();tki.More();tki.Next()) ng++; - size_t sng=(size_t)ng;size_t sad=sizeof(BOA_t); - BOA_t* T = (BOA_t*)malloc((size_t)(sng*sad));TopOpeBRepDS_Kind K;Standard_Integer G;Standard_Integer j=0; - for(tki.Init();tki.More();tki.Next(),j++) T[j]=(BOA_t)&(tki.Value(K,G)); + TopOpeBRepDS_TKI tki; + tki.FillOnGeometry(LOI); + Standard_Integer ng=0; + for(tki.Init();tki.More();tki.Next()) + ng++; + size_t sng=(size_t)ng; + size_t sad=sizeof(BOA_t); + BOA_t* T = (BOA_t*)Standard::Allocate (sng*sad); + TopOpeBRepDS_Kind K; + Standard_Integer G, j=0; + for(tki.Init();tki.More();tki.Next(),j++) + T[j]= &(tki.ChangeValue(K,G)); qsort(T,sng,sad,compll); - LOI.Clear();for(j=0;j