mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
Integration of OCCT 6.5.0 from SVN
This commit is contained in:
46
src/Standard/Handle_Standard_Transient.cxx
Executable file
46
src/Standard/Handle_Standard_Transient.cxx
Executable file
@@ -0,0 +1,46 @@
|
||||
#include <Handle_Standard_Transient.hxx>
|
||||
#include <Standard_Atomic.hxx>
|
||||
|
||||
//============================================================================
|
||||
|
||||
void Handle(Standard_Transient)::Dump(Standard_OStream& out) const
|
||||
{
|
||||
out << Access();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
||||
void Handle(Standard_Transient)::Assign (const Standard_Transient *anItem)
|
||||
{
|
||||
Standard_Transient *anIt = ( anItem ? (Standard_Transient*)anItem : UndefinedHandleAddress );
|
||||
if ( anIt == entity ) return;
|
||||
EndScope();
|
||||
entity = anIt;
|
||||
BeginScope();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
||||
void Handle(Standard_Transient)::BeginScope()
|
||||
{
|
||||
if (entity != UndefinedHandleAddress)
|
||||
{
|
||||
if ( Standard::IsReentrant() )
|
||||
Standard_Atomic_Increment (&entity->count);
|
||||
else
|
||||
entity->count++;
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
||||
void Handle(Standard_Transient)::EndScope()
|
||||
{
|
||||
if (entity == UndefinedHandleAddress)
|
||||
return;
|
||||
if ( Standard::IsReentrant() ?
|
||||
Standard_Atomic_DecrementTest (&entity->count) :
|
||||
(--entity->count == 0) )
|
||||
entity->Delete();
|
||||
entity = UndefinedHandleAddress;
|
||||
}
|
Reference in New Issue
Block a user