LazUtils: helper for refcnt object

git-svn-id: trunk@44313 -
This commit is contained in:
martin 2014-03-02 02:22:18 +00:00
parent 09f97f2afd
commit ee0df892d8

View File

@ -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 .