mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 20:59:06 +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;
|
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
|
implementation
|
||||||
{$IFDEF WITH_REFCOUNT_DEBUG}
|
{$IFDEF WITH_REFCOUNT_DEBUG}
|
||||||
@ -227,7 +228,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure ReleaseRefAndNil(var ARefCountedObject);
|
procedure ReleaseRefAndNil(var ARefCountedObject {$IFDEF WITH_REFCOUNT_DEBUG}; DebugIdAdr: Pointer = nil; DebugIdTxt: String = ''{$ENDIF});
|
||||||
begin
|
begin
|
||||||
Assert( (Pointer(ARefCountedObject) = nil) or
|
Assert( (Pointer(ARefCountedObject) = nil) or
|
||||||
(TObject(ARefCountedObject) is TRefCountedObject),
|
(TObject(ARefCountedObject) is TRefCountedObject),
|
||||||
@ -237,9 +238,29 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
|
|
||||||
if (TObject(ARefCountedObject) is TRefCountedObject) then
|
if (TObject(ARefCountedObject) is TRefCountedObject) then
|
||||||
TRefCountedObject(ARefCountedObject).ReleaseReference;
|
TRefCountedObject(ARefCountedObject).ReleaseReference{$IFDEF WITH_REFCOUNT_DEBUG}(DebugIdAdr, DebugIdTxt){$ENDIF};
|
||||||
Pointer(ARefCountedObject) := nil;
|
Pointer(ARefCountedObject) := nil;
|
||||||
end;
|
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 .
|
end .
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user