OCC22577 Thread-safety/re-entrability improvements
[occt.git] / src / Standard / Handle_Standard_Transient.cxx
1 #include <Handle_Standard_Transient.hxx>
2 #include <Standard_Atomic.hxx>
3
4 //============================================================================
5
6 void Handle(Standard_Transient)::Dump(Standard_OStream& out) const
7
8   out << Access();
9 }
10
11 //============================================================================
12
13 void Handle(Standard_Transient)::Assign (const Standard_Transient *anItem)
14 {
15   Standard_Transient *anIt = ( anItem ? (Standard_Transient*)anItem : UndefinedHandleAddress );
16   if ( anIt == entity ) return;
17   EndScope();
18   entity = anIt;
19   BeginScope();
20 }
21
22 //============================================================================
23
24 void Handle(Standard_Transient)::BeginScope()
25 {
26   if (entity != UndefinedHandleAddress)
27   {
28     Standard_Atomic_Increment (&entity->count);
29   }
30 }
31
32 //============================================================================
33
34 void Handle(Standard_Transient)::EndScope()
35 {
36   if (entity == UndefinedHandleAddress)
37     return;
38   if (Standard_Atomic_Decrement (&entity->count) == 0)
39     entity->Delete();
40   entity = UndefinedHandleAddress;
41 }