mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 10:35:58 +02:00
LazUtils: helper for refcnt object
git-svn-id: trunk@44313 -
This commit is contained in:
parent
09f97f2afd
commit
ee0df892d8
@ -56,7 +56,8 @@ type
|
||||
end;
|
||||
|
||||
|
||||
procedure ReleaseRefAndNil(var ARefCountedObject);
|
||||
procedure ReleaseRefAndNil(var ARefCountedObject {$IFDEF WITH_REFCOUNT_DEBUG}; DebugIdAdr: Pointer = nil; DebugIdTxt: String = ''{$ENDIF});
|
||||
procedure NilThenReleaseRef(var ARefCountedObject {$IFDEF WITH_REFCOUNT_DEBUG}; DebugIdAdr: Pointer = nil; DebugIdTxt: String = ''{$ENDIF});
|
||||
|
||||
implementation
|
||||
{$IFDEF WITH_REFCOUNT_DEBUG}
|
||||
@ -227,7 +228,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure ReleaseRefAndNil(var ARefCountedObject);
|
||||
procedure ReleaseRefAndNil(var ARefCountedObject {$IFDEF WITH_REFCOUNT_DEBUG}; DebugIdAdr: Pointer = nil; DebugIdTxt: String = ''{$ENDIF});
|
||||
begin
|
||||
Assert( (Pointer(ARefCountedObject) = nil) or
|
||||
(TObject(ARefCountedObject) is TRefCountedObject),
|
||||
@ -237,9 +238,29 @@ begin
|
||||
exit;
|
||||
|
||||
if (TObject(ARefCountedObject) is TRefCountedObject) then
|
||||
TRefCountedObject(ARefCountedObject).ReleaseReference;
|
||||
TRefCountedObject(ARefCountedObject).ReleaseReference{$IFDEF WITH_REFCOUNT_DEBUG}(DebugIdAdr, DebugIdTxt){$ENDIF};
|
||||
Pointer(ARefCountedObject) := nil;
|
||||
end;
|
||||
|
||||
procedure NilThenReleaseRef(var ARefCountedObject {$IFDEF WITH_REFCOUNT_DEBUG}; DebugIdAdr: Pointer = nil; DebugIdTxt: String = ''{$ENDIF});
|
||||
var
|
||||
RefObj: TRefCountedObject;
|
||||
begin
|
||||
Assert( (Pointer(ARefCountedObject) = nil) or
|
||||
(TObject(ARefCountedObject) is TRefCountedObject),
|
||||
'ReleaseRefAndNil requires TRefCountedObject');
|
||||
|
||||
if Pointer(ARefCountedObject) = nil then
|
||||
exit;
|
||||
|
||||
if (TObject(ARefCountedObject) is TRefCountedObject) then
|
||||
RefObj := TRefCountedObject(ARefCountedObject)
|
||||
else RefObj := nil;
|
||||
Pointer(ARefCountedObject) := nil;
|
||||
|
||||
if RefObj <> nil then
|
||||
RefObj.ReleaseReference{$IFDEF WITH_REFCOUNT_DEBUG}(DebugIdAdr, DebugIdTxt){$ENDIF};
|
||||
end;
|
||||
|
||||
end .
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user