source: DelphiTemplates/Generic/GenericListObject.inc

Last change on this file was 2, checked in by chronos, 13 years ago
File size: 2.2 KB
Line 
1{$IFDEF INTERFACE}
2
3TGListIndex = TGListObjectIndex;
4TGListItem = TGListObjectItem;
5{$DEFINE INTERFACE}
6{$I 'GenericList.inc'}
7
8 // TGListObject<TListObjectIndex, TListObjectItem> = class(TGList)
9 TGListObject = class(TGList)
10 private
11 procedure Put(Index: TGListIndex; const AValue: TGListItem); override;
12 public
13 OwnsObjects: Boolean;
14 function AddNew(NewObject: TGListItem = nil): TGListItem;
15 function AddInsertNew(Index: TGListIndex; NewObject: TGListItem = nil): TGListItem;
16 procedure Delete(Index: TGListObjectIndex); override;
17 procedure Clear; override;
18 procedure Assign(Source: TGList); override;
19 constructor Create;
20 destructor Destroy; override;
21 end;
22
23{$UNDEF INTERFACE}
24{$ENDIF}
25
26{$IFDEF IMPLEMENTATION_USES}
27
28 {$DEFINE IMPLEMENTATION_USES}
29 {$I 'GenericList.inc'}
30
31{$UNDEF IMPLEMENTATION_USES}
32{$ENDIF}
33
34{$IFDEF IMPLEMENTATION}
35
36{$DEFINE IMPLEMENTATION}
37{$I 'GenericList.inc'}
38
39{ TGListObject }
40
41function TGListObject.AddNew(NewObject: TGListItem = nil): TGListItem;
42begin
43 if Assigned(NewObject) then Result := NewObject
44 else Result := TGListItem.Create;
45 Add(Result);
46end;
47
48function TGListObject.AddInsertNew(Index: TGListIndex;
49 NewObject: TGListItem = nil): TGListItem;
50begin
51 if Assigned(NewObject) then Result := NewObject
52 else Result := TGListItem.Create;
53 Insert(Index, Result);
54end;
55
56procedure TGListObject.Assign(Source: TGList);
57begin
58 Clear;
59 OwnsObjects := False;
60 inherited;
61end;
62
63procedure TGListObject.Put(Index: TGListIndex; const AValue: TGListItem);
64begin
65 if OwnsObjects then FItems[Index].Free;
66 inherited Put(Index, AValue);
67end;
68
69procedure TGListObject.Delete(Index: TGListObjectIndex);
70begin
71 if OwnsObjects then FItems[Index].Free;
72 inherited Delete(Index);
73end;
74
75procedure TGListObject.Clear;
76var
77 I: TGListObjectIndex;
78begin
79 if OwnsObjects then begin
80 I := 0;
81 while I < Count do begin
82 FItems[I].Free;
83 I := I + 1;
84 end;
85 end;
86 inherited Clear;
87end;
88
89constructor TGListObject.Create;
90begin
91 inherited;
92 OwnsObjects := True;
93end;
94
95destructor TGListObject.Destroy;
96begin
97 Clear;
98 inherited Destroy;
99end;
100
101{$UNDEF IMPLEMENTATION}
102{$ENDIF}
Note: See TracBrowser for help on using the repository browser.