0024234: occt master is not compiled by VC++ 2005 (vc8 32/64 bit TKBO)
[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 // On Windows, function TryEnterCriticalSection has appeared in Windows NT
25 // and is surrounded by #ifdef in MS VC++ 7.1 headers.
26 // Thus to use it we need to define appropriate macro saying that we wil
27 // run on Windows NT 4.0 at least
28 #if ((defined(_WIN32) || defined(__WIN32__)) && !defined(_WIN32_WINNT))
29   #define _WIN32_WINNT 0x0501
30 #endif
31
32 #include <tbb/tbb.h>
33 using namespace tbb;
34
35 #define flexible_range blocked_range
36 #define flexible_for   parallel_for
37
38 #else // not HAVE_TBB
39
40 #define flexible_range serial_range
41 #define flexible_for   serial_for
42
43 //=======================================================================
44 //class : serial_range
45 //purpose  : 
46 //=======================================================================
47 template <class Type> class serial_range {
48  public:
49   serial_range(const Type& aBegin,
50                const Type& aEnd)
51     : myBegin(aBegin), myEnd(aEnd) {
52   }
53   //
54   ~serial_range() {
55   }
56   //
57   const Type& begin() const{
58     return myBegin;
59   }
60   //
61   const Type& end() const{
62     return myEnd;
63   };
64   //
65  protected:
66   Type myBegin;
67   Type myEnd;
68 };
69
70 //=======================================================================
71 //function : serial_for
72 //purpose  : 
73 //=======================================================================
74 template<typename Range, typename Body>
75 static void serial_for( const Range& range, const Body& body ) {
76   body.operator()(range);
77 };
78 #endif // not HAVE_TBB
79
80 #endif