1 // Created on: 2014-01-10
2 // Created by: Denis BOGOLEPOV
3 // Copyright (c) 2013-2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
16 // =======================================================================
19 // =======================================================================
20 template<class T, int N>
21 void BVH_Sorter<T, N>::Perform (BVH_Set<T, N>* theSet,
22 const Standard_Integer theAxis)
24 Perform (theSet, theAxis, 0, theSet->Size() - 1);
27 // =======================================================================
30 // =======================================================================
31 template<class T, int N>
32 void BVH_Sorter<T, N>::Perform (BVH_Set<T, N>* theSet,
33 const Standard_Integer theAxis,
34 const Standard_Integer theBegElement,
35 const Standard_Integer theEndElement)
37 Standard_Integer aLft = theBegElement;
38 Standard_Integer aRgh = theEndElement;
40 T aPivot = theSet->Center ((aRgh + aLft) / 2, theAxis);
44 while (theSet->Center (aLft, theAxis) < aPivot && aLft < theEndElement)
49 while (theSet->Center (aRgh, theAxis) > aPivot && aRgh > theBegElement)
58 theSet->Swap (aLft, aRgh);
66 if (aRgh > theBegElement)
68 Perform (theSet, theAxis, theBegElement, aRgh);
71 if (aLft < theEndElement)
73 Perform (theSet, theAxis, aLft, theEndElement);