diff --git a/rtl/objpas/fgl.pp b/rtl/objpas/fgl.pp index a33b2ca078..e4372a8695 100644 --- a/rtl/objpas/fgl.pp +++ b/rtl/objpas/fgl.pp @@ -80,6 +80,7 @@ type function Insert(Index: Integer): Pointer; procedure Move(CurIndex, NewIndex: Integer); procedure Assign(Obj: TFPSList); + procedure AddList(Obj: TFPSList); function Remove(Item: Pointer): Integer; procedure Pack; procedure Sort(Compare: TFPSListCompareFunc); @@ -143,6 +144,7 @@ type property Last: T read GetLast write SetLast; {$ifndef VER2_4} procedure Assign(Source: TFPGList); + procedure AddList(Source: TFPGList); {$endif VER2_4} function Remove(const Item: T): Integer; {$ifdef FGLINLINE} inline; {$endif} procedure Sort(Compare: TCompareFunc); @@ -181,6 +183,7 @@ type procedure Insert(Index: Integer; const Item: T); {$ifdef FGLINLINE} inline; {$endif} property Last: T read GetLast write SetLast; {$ifndef VER2_4} + procedure AddList(Source: TFPGObjectList); procedure Assign(Source: TFPGObjectList); {$endif VER2_4} function Remove(const Item: T): Integer; {$ifdef FGLINLINE} inline; {$endif} @@ -221,6 +224,7 @@ type property Last: T read GetLast write SetLast; {$ifndef VER2_4} procedure Assign(Source: TFPGInterfacedObjectList); + procedure AddList(Source: TFPGInterfacedObjectList); {$endif VER2_4} function Remove(const Item: T): Integer; {$ifdef FGLINLINE} inline; {$endif} procedure Sort(Compare: TCompareFunc); @@ -798,17 +802,26 @@ begin QuickSort(0, FCount-1, Compare); end; -procedure TFPSList.Assign(Obj: TFPSList); +procedure TFPSList.AddList(Obj: TFPSList); var i: Integer; begin if Obj.ItemSize <> FItemSize then Error(SListItemSizeError, 0); - Clear; for I := 0 to Obj.Count - 1 do Add(Obj[i]); end; +procedure TFPSList.Assign(Obj: TFPSList); + +begin + // We must do this check here, to avoid clearing the list. + if Obj.ItemSize <> FItemSize then + Error(SListItemSizeError, 0); + Clear; + AddList(Obj); +end; + {****************************************************************************} {* TFPGListEnumerator *} {****************************************************************************} @@ -927,14 +940,21 @@ begin end; {$ifndef VER2_4} -procedure TFPGList.Assign(Source: TFPGList); +procedure TFPGList.AddList(Source: TFPGList); + var i: Integer; + begin - Clear; for I := 0 to Source.Count - 1 do Add(Source[i]); end; + +procedure TFPGList.Assign(Source: TFPGList); +begin + Clear; + AddList(Source); +end; {$endif VER2_4} function TFPGList.Remove(const Item: T): Integer; @@ -1043,14 +1063,19 @@ begin end; {$ifndef VER2_4} -procedure TFPGObjectList.Assign(Source: TFPGObjectList); +procedure TFPGObjectList.AddList(Source: TFPGObjectList); var i: Integer; begin - Clear; for I := 0 to Source.Count - 1 do Add(Source[i]); end; + +procedure TFPGObjectList.Assign(Source: TFPGObjectList); +begin + Clear; + AddList(Source); +end; {$endif VER2_4} function TFPGObjectList.Remove(const Item: T): Integer; @@ -1163,10 +1188,16 @@ end; {$ifndef VER2_4} procedure TFPGInterfacedObjectList.Assign(Source: TFPGInterfacedObjectList); + +begin + Clear; + AddList(Source); +end; + +procedure TFPGInterfacedObjectList.AddList(Source: TFPGInterfacedObjectList); var i: Integer; begin - Clear; for I := 0 to Source.Count - 1 do Add(Source[i]); end;