mirror of
https://github.com/Open-Cascade-SAS/OCCT.git
synced 2026-07-10 20:43:39 +08:00
1. The package BOPCol has been fully removed: - *BOPCol_BaseAllocator* is replaced with *Handle(NCollection_BaseAllocator)*; - *BOPCol_BoxBndTree* is replaced with *BOPTools_BoxBndTree*; - *BOPCol_Box2DBndTree* is removed as unused; - *BOPCol_DataMapOfIntegerInteger* is replaced with *TColStd_DataMapOfIntegerInteger*; - *BOPCol_DataMapOfIntegerListOfInteger* is replaced with *TColStd_DataMapOfIntegerListOfInteger*; - *BOPCol_DataMapOfIntegerListOfShape* is replaced with *TopTools_DataMapOfIntegerListOfShape*; - *BOPCol_DataMapOfIntegerMapOfInteger.hxx* is removed as unused; - *BOPCol_DataMapOfIntegerReal* is replaced with *TColStd_DataMapOfIntegerReal*; - *BOPCol_DataMapOfIntegerShape* is replaced with *TopTools_DataMapOfIntegerShape*; - *BOPCol_DataMapOfShapeBox* is replaced with *TopTools_DataMapOfShapeBox*; - *BOPCol_DataMapOfShapeInteger* is replaced with *TopTools_DataMapOfShapeInteger*; - *BOPCol_DataMapOfShapeListOfShape* is replaced with *TopTools_DataMapOfShapeListOfShape*; - *BOPCol_DataMapOfShapeReal* is replaced with *TopTools_DataMapOfShapeReal*; - *BOPCol_DataMapOfShapeShape* is replaced with *TopTools_DataMapOfShapeShape*; - *BOPCol_DataMapOfTransientAddress* is removed as unused; - *BOPCol_IndexedDataMapOfIntegerListOfInteger* is removed as unused; - *BOPCol_IndexedDataMapOfShapeBox* is removed as unused; - *BOPCol_IndexedDataMapOfShapeInteger* is removed as unused; - *BOPCol_IndexedDataMapOfShapeListOfShape* is replaced with *TopTools_IndexedDataMapOfShapeListOfShape*; - *BOPCol_IndexedDataMapOfShapeReal* is removed as unused; - *BOPCol_IndexedDataMapOfShapeShape* is replaced with *TopTools_IndexedDataMapOfShapeShape*; - *BOPCol_IndexedMapOfInteger* is replaced with *TColStd_IndexedMapOfInteger*; - *BOPCol_IndexedMapOfOrientedShape* is replaced with *TopTools_IndexedMapOfOrientedShape*; - *BOPCol_IndexedMapOfShape* is replaced with *TopTools_IndexedMapOfShape*; - *BOPCol_ListOfInteger* is replaced with *TColStd_ListOfInteger*; - *BOPCol_ListOfListOfShape* is replaced with *TopTools_ListOfListOfShape*; - *BOPCol_ListOfShape* is replaced with *TopTools_ListOfShape*; - *BOPCol_MapOfInteger* is replaced with *TColStd_MapOfInteger*; - *BOPCol_MapOfOrientedShape* is replaced with *TopTools_MapOfOrientedShape*; - *BOPCol_MapOfShape* is replaced with *TopTools_MapOfShape*; - *BOPCol_PListOfInteger* is removed as unused; - *BOPCol_PInteger* is removed as unused - *BOPCol_SequenceOfPnt2d* is replaced with *TColgp_SequenceOfPnt2d*; - *BOPCol_SequenceOfReal* is replaced with *TColStd_SequenceOfReal*; - *BOPCol_SequenceOfShape* is replaced with *TopTools_SequenceOfShape*; - *BOPCol_Parallel* is replaced with *BOPTools_Parallel*; - *BOPCol_NCVector* is replaced with *NCollection_Vector*; 2. The class *BOPDS_PassKey* and containers for it have been removed as unused; 3. The unused containers from *IntTools* package have been removed: - *IntTools_DataMapOfShapeAddress* is removed as unused; - *IntTools_IndexedDataMapOfTransientAddress* is removed as unused; 4. The container *BiTgte_DataMapOfShapeBox* is replaced with *TopTools_DataMapOfShapeBox*; 5. The class *BOPTools* has been removed as duplicate of the class *TopExp*;
177 lines
5.1 KiB
C++
177 lines
5.1 KiB
C++
// Created by: Peter KURNEV
|
|
// Copyright (c) 1999-2013 OPEN CASCADE SAS
|
|
//
|
|
// This file is part of Open CASCADE Technology software library.
|
|
//
|
|
// This library is free software; you can redistribute it and/or modify it under
|
|
// the terms of the GNU Lesser General Public License version 2.1 as published
|
|
// by the Free Software Foundation, with special exception defined in the file
|
|
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
|
|
// distribution for complete text of the license and disclaimer of any warranty.
|
|
//
|
|
// Alternatively, this file may be used under the terms of Open CASCADE
|
|
// commercial license or contractual agreement.
|
|
|
|
#ifndef _BOPTools_Parallel_HeaderFile
|
|
#define _BOPTools_Parallel_HeaderFile
|
|
|
|
#include <Standard_Macro.hxx>
|
|
#include <Standard_NotImplemented.hxx>
|
|
#include <OSD_Parallel.hxx>
|
|
#include <NCollection_DataMap.hxx>
|
|
#include <Standard_Mutex.hxx>
|
|
#include <OSD_Thread.hxx>
|
|
|
|
//
|
|
// 1. Implementation of Functors/Starters
|
|
//
|
|
// 1.1. Pure version
|
|
//
|
|
|
|
//=======================================================================
|
|
//class : BOPTools_Functor
|
|
//purpose :
|
|
//=======================================================================
|
|
template <class TypeSolver, class TypeSolverVector>
|
|
class BOPTools_Functor
|
|
{
|
|
public:
|
|
//! Constructor.
|
|
explicit BOPTools_Functor(TypeSolverVector& theSolverVec)
|
|
: mySolvers(theSolverVec) {}
|
|
|
|
//! Defines functor interface.
|
|
void operator() (const Standard_Integer theIndex) const
|
|
{
|
|
TypeSolver& aSolver = mySolvers(theIndex);
|
|
aSolver.Perform();
|
|
}
|
|
|
|
private:
|
|
BOPTools_Functor(const BOPTools_Functor&);
|
|
BOPTools_Functor& operator= (const BOPTools_Functor&);
|
|
|
|
private:
|
|
TypeSolverVector& mySolvers;
|
|
};
|
|
|
|
//=======================================================================
|
|
//class : BOPTools_Cnt
|
|
//purpose :
|
|
//=======================================================================
|
|
template <class TypeFunctor, class TypeSolverVector>
|
|
class BOPTools_Cnt
|
|
{
|
|
public:
|
|
static void Perform( const Standard_Boolean isRunParallel,
|
|
TypeSolverVector& theSolverVector )
|
|
{
|
|
TypeFunctor aFunctor(theSolverVector);
|
|
OSD_Parallel::For(0, theSolverVector.Length(), aFunctor, !isRunParallel);
|
|
}
|
|
};
|
|
|
|
//
|
|
// 1.2. Context dependent version
|
|
//
|
|
|
|
//=======================================================================
|
|
//class : BOPTools_ContextFunctor
|
|
//purpose :
|
|
//=======================================================================
|
|
template <class TypeSolver, class TypeSolverVector,
|
|
class TypeContext, typename TN>
|
|
class BOPTools_ContextFunctor
|
|
{
|
|
//! Auxiliary thread ID hasher.
|
|
struct Hasher
|
|
{
|
|
static Standard_Integer HashCode(const Standard_ThreadId theKey,
|
|
const Standard_Integer Upper)
|
|
{
|
|
return ::HashCode((Standard_Size)theKey, Upper);
|
|
}
|
|
|
|
static Standard_Boolean IsEqual(const Standard_ThreadId theKey1,
|
|
const Standard_ThreadId theKey2)
|
|
{
|
|
return theKey1 == theKey2;
|
|
}
|
|
};
|
|
|
|
typedef NCollection_DataMap<Standard_ThreadId, TypeContext, Hasher> ContextMap;
|
|
|
|
public:
|
|
|
|
//! Constructor
|
|
explicit BOPTools_ContextFunctor( TypeSolverVector& theVector )
|
|
: mySolverVector(theVector) {}
|
|
|
|
//! Binds main thread context
|
|
void SetContext( TypeContext& theContext )
|
|
{
|
|
myContexts.Bind(OSD_Thread::Current(), theContext);
|
|
}
|
|
|
|
//! Returns current thread context
|
|
TypeContext& GetThreadContext() const
|
|
{
|
|
const Standard_ThreadId aThreadID = OSD_Thread::Current();
|
|
if ( myContexts.IsBound(aThreadID) )
|
|
{
|
|
TypeContext& aContext = myContexts(aThreadID);
|
|
if ( aContext.IsNull() == Standard_False )
|
|
return aContext;
|
|
}
|
|
|
|
// Create new context
|
|
TypeContext aContext = new TN
|
|
( NCollection_BaseAllocator::CommonBaseAllocator() );
|
|
|
|
Standard_Mutex::Sentry aLocker(myMutex);
|
|
myContexts.Bind(aThreadID, aContext);
|
|
|
|
return myContexts(aThreadID);
|
|
}
|
|
|
|
//! Defines functor interface
|
|
void operator()( const Standard_Integer theIndex ) const
|
|
{
|
|
TypeContext& aContext = GetThreadContext();
|
|
TypeSolver& aSolver = mySolverVector(theIndex);
|
|
|
|
aSolver.SetContext(aContext);
|
|
aSolver.Perform();
|
|
}
|
|
|
|
private:
|
|
BOPTools_ContextFunctor(const BOPTools_ContextFunctor&);
|
|
BOPTools_ContextFunctor& operator= (const BOPTools_ContextFunctor&);
|
|
|
|
private:
|
|
TypeSolverVector& mySolverVector;
|
|
mutable ContextMap myContexts;
|
|
mutable Standard_Mutex myMutex;
|
|
};
|
|
|
|
//=======================================================================
|
|
//class : BOPTools_ContextCnt
|
|
//purpose :
|
|
//=======================================================================
|
|
template <class TypeFunctor, class TypeSolverVector, class TypeContext>
|
|
class BOPTools_ContextCnt
|
|
{
|
|
public:
|
|
static void Perform( const Standard_Boolean isRunParallel,
|
|
TypeSolverVector& theSolverVector,
|
|
TypeContext& theContext )
|
|
{
|
|
TypeFunctor aFunctor(theSolverVector);
|
|
aFunctor.SetContext(theContext);
|
|
|
|
OSD_Parallel::For(0, theSolverVector.Length(), aFunctor, !isRunParallel);
|
|
}
|
|
};
|
|
|
|
#endif
|