0024157: Parallelization of assembly part of BO
[occt.git] / src / BOPCol / BOPCol_TBB.hxx
1 // Created by: Peter KURNEV
2 // Copyright (c) 1999-2013 OPEN CASCADE SAS
3 //
4 // The content of this file is subject to the Open CASCADE Technology Public
5 // License Version 6.5 (the "License"). You may not use the content of this file
6 // except in compliance with the License. Please obtain a copy of the License
7 // at http://www.opencascade.org and read it completely before using this file.
8 //
9 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
10 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11 //
12 // The Original Code and all software distributed under the License is
13 // distributed on an "AS IS" basis, without warranty of any kind, and the
14 // Initial Developer hereby disclaims all such warranties, including without
15 // limitation, any warranties of merchantability, fitness for a particular
16 // purpose or non-infringement. Please see the License for the specific terms
17 // and conditions governing the rights and limitations under the License.
18
19 #ifndef _BOPDS_Col_HeaderFile
20 #define _BOPDS_Col_HeaderFile
21
22 #ifdef HAVE_TBB
23
24
25 #include <tbb/tbb.h>
26 using namespace tbb;
27
28 #define flexible_range blocked_range
29 #define flexible_for   parallel_for
30
31
32 #else // not HAVE_TBB
33
34 #define flexible_range serial_range
35 #define flexible_for   serial_for
36
37 //=======================================================================
38 //class : serial_range
39 //purpose  : 
40 //=======================================================================
41 template <class Type> class serial_range {
42  public:
43   serial_range(const Type& aBegin,
44                const Type& aEnd)
45     : myBegin(aBegin), myEnd(aEnd) {
46   }
47   //
48   ~serial_range() {
49   }
50   //
51   const Type& begin() const{
52     return myBegin;
53   }
54   //
55   const Type& end() const{
56     return myEnd;
57   };
58   //
59  protected:
60   Type myBegin;
61   Type myEnd;
62 };
63
64 //=======================================================================
65 //function : serial_for
66 //purpose  : 
67 //=======================================================================
68 template<typename Range, typename Body>
69 static void serial_for( const Range& range, const Body& body ) {
70   body.operator()(range);
71 };
72 #endif // not HAVE_TBB
73
74 #endif