From 6ebda8f2ccc138582c9eb5c80d0cadcf21f8f6fb Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 28 Sep 2010 14:52:44 +0000 Subject: [PATCH] * D2009 compat: TStringList.OwnsObjects git-svn-id: trunk@16058 - --- rtl/objpas/classes/classesh.inc | 4 ++++ rtl/objpas/classes/stringl.inc | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc index 538180b302..2d491f8924 100644 --- a/rtl/objpas/classes/classesh.inc +++ b/rtl/objpas/classes/classesh.inc @@ -666,6 +666,7 @@ type FDuplicates: TDuplicates; FCaseSensitive : Boolean; FSorted: Boolean; + FOwnsObjects : Boolean; procedure ExchangeItems(Index1, Index2: Integer); procedure Grow; procedure QuickSort(L, R: Integer; CompareFn: TStringListSortCompare); @@ -702,6 +703,7 @@ type property CaseSensitive: Boolean read FCaseSensitive write SetCaseSensitive; property OnChange: TNotifyEvent read FOnChange write FOnChange; property OnChanging: TNotifyEvent read FOnChanging write FOnChanging; + property OwnsObjects : boolean read FOwnsObjects write FOwnsObjects; end; {$else} @@ -717,6 +719,7 @@ type FOnChange: TNotifyEvent; FOnChanging: TNotifyEvent; FOnCompareText: TStringListTextCompare; + FOwnsObjects : Boolean; procedure SetCaseSensitive(NewSensitive: Boolean); protected procedure Changed; virtual; @@ -755,6 +758,7 @@ type property OnChange: TNotifyEvent read FOnChange write FOnChange; property OnChanging: TNotifyEvent read FOnChanging write FOnChanging; property OnCompareText: TStringListTextCompare read FOnCompareText write FOnCompareText; + property OwnsObjects : boolean read FOwnsObjects write FOwnsObjects; end; {$endif} diff --git a/rtl/objpas/classes/stringl.inc b/rtl/objpas/classes/stringl.inc index a91d7cf304..3612ed3b4c 100644 --- a/rtl/objpas/classes/stringl.inc +++ b/rtl/objpas/classes/stringl.inc @@ -1156,8 +1156,6 @@ begin InsertItem (Result,S); end; - - Procedure TStringList.Clear; Var I : longint; @@ -1165,15 +1163,24 @@ Var I : longint; begin if FCount = 0 then Exit; Changing; - For I:=0 to FCount-1 do - Flist^[I].FString:=''; + if FOwnsObjects then + begin + For I:=0 to FCount-1 do + begin + Flist^[I].FString:=''; + freeandnil(Flist^[i].FObject); + end; + end + else + begin + For I:=0 to FCount-1 do + Flist^[I].FString:=''; + end; FCount:=0; SetCapacity(0); Changed; end; - - Procedure TStringList.Delete(Index: Integer); begin @@ -1181,6 +1188,8 @@ begin Error(SlistINdexError,Index); Changing; Flist^[Index].FString:=''; + if FOwnsObjects then + FreeAndNil(Flist^[Index].FObject); Dec(FCount); If Index