source: trunk/Packages/TemplateGenerics/Generic/GenericListObject.inc

Last change on this file was 18, checked in by chronos, 12 years ago
  • Used external packages are now stored in uncompressed form rather in zipped files. This allow better package version synchronisation.
File size: 3.0 KB
Line 
1{$IFDEF INTERFACE}
2
3{$DEFINE TGListIndex := TGListObjectIndex}
4{$DEFINE TGListItem := TGListObjectItem}
5{$DEFINE TGList := TGListObjectList}
6{$DEFINE TGListSortCompare := TGListObjectSortCompare}
7{$DEFINE TGListToStringConverter := TGListObjectToStringConverter}
8{$DEFINE TGListFromStringConverter := TGListObjectFromStringConverter}
9{$DEFINE TGListItemArray := TGListObjectItemArray}
10{$DEFINE INTERFACE}
11{$I 'GenericList.inc'}
12
13 // TGListObject<TListObjectIndex, TListObjectItem> = class(TGList)
14 TGListObject = class(TGList)
15 protected
16 procedure Put(Index: TGListIndex; const AValue: TGListItem); override;
17 procedure SetCount(const AValue: TGListIndex); override;
18 public
19 OwnsObjects: Boolean;
20 function AddNew(NewObject: TGListItem = nil): TGListItem;
21 function InsertNew(Index: TGListIndex; NewObject: TGListItem = nil): TGListItem;
22 procedure Delete(Index: TGListObjectIndex); override;
23 procedure Assign(Source: TGList); override;
24 constructor Create; override;
25 destructor Destroy; override;
26 end;
27
28{$UNDEF INTERFACE}
29{$ENDIF}
30
31{$IFDEF IMPLEMENTATION_USES}
32
33 {$DEFINE IMPLEMENTATION_USES}
34 {$I 'GenericList.inc'}
35
36{$UNDEF IMPLEMENTATION_USES}
37{$ENDIF}
38
39{$IFDEF IMPLEMENTATION}
40
41{$DEFINE TGListIndex := TGListObjectIndex}
42{$DEFINE TGListItem := TGListObjectItem}
43{$DEFINE TGList := TGListObjectList}
44{$DEFINE TGListSortCompare := TGListObjectSortCompare}
45{$DEFINE TGListToStringConverter := TGListObjectToStringConverter}
46{$DEFINE TGListFromStringConverter := TGListObjectFromStringConverter}
47{$DEFINE TGListItemArray := TGListObjectItemArray}
48{$DEFINE IMPLEMENTATION}
49{$I 'GenericList.inc'}
50
51{ TGListObject }
52
53function TGListObject.AddNew(NewObject: TGListItem = nil): TGListItem;
54begin
55 if Assigned(NewObject) then Result := NewObject
56 else Result := TGListItem.Create;
57 Add(Result);
58end;
59
60function TGListObject.InsertNew(Index: TGListIndex;
61 NewObject: TGListItem = nil): TGListItem;
62begin
63 if Assigned(NewObject) then Result := NewObject
64 else Result := TGListItem.Create;
65 Insert(Index, Result);
66end;
67
68procedure TGListObject.Assign(Source: TGList);
69begin
70 Clear;
71 OwnsObjects := False;
72 inherited;
73end;
74
75procedure TGListObject.Put(Index: TGListIndex; const AValue: TGListItem);
76begin
77 if OwnsObjects and (FItems[Index] <> AValue) then FItems[Index].Free;
78 inherited Put(Index, AValue);
79end;
80
81procedure TGListObject.Delete(Index: TGListObjectIndex);
82begin
83 if OwnsObjects then FItems[Index].Free;
84 inherited Delete(Index);
85end;
86
87procedure TGListObject.SetCount(const AValue: TGListIndex);
88var
89 I: TGListObjectIndex;
90begin
91 if OwnsObjects then begin
92 I := FCount - 1;
93 while I >= AValue do begin
94 FItems[I].Free;
95 I := I - 1;
96 end;
97 end;
98 inherited;
99end;
100
101constructor TGListObject.Create;
102begin
103 inherited;
104 OwnsObjects := True;
105end;
106
107destructor TGListObject.Destroy;
108begin
109 Clear;
110 inherited Destroy;
111end;
112
113{$UNDEF IMPLEMENTATION}
114{$ENDIF}
Note: See TracBrowser for help on using the repository browser.