function UniqueAcquirePointer(var source:Pointer; out Target:Pointer):boolean;inline; var ptr:Pointer; begin ptr:= AtomicExchange( source,nil); result:=Assigned(ptr); if result then Target:=ptr; end; function UniqueAcquireInterface(var source:IInterface; out Target):boolean; begin result:= UniqueAcquirePointer(PPointer(@source)^,PPointer(@Target)^); end; function UniqueAcquirePredicate(var source; out Target):boolean; begin result:= UniqueAcquirePointer(PPointer(@source)^,PPointer(@Target)^); end; |