source: oup/releases/0.34b/FileClasses/_FileTypes.pas @ 205

Last change on this file since 205 was 205, checked in by alloc, 14 years ago
File size: 3.3 KB
Line 
1unit _FileTypes;
2
3interface
4
5uses
6  TypeDefs, _DataTypes;
7
8
9type
10  TFile = class
11    private
12      FConnectionID: Integer;
13      FFileID: Integer;
14
15      FDatLinks: TDatLinkList;
16      FDataFields: TDataFields;
17      FRawParts: TRawDataList;
18
19      function GetDatLinkByOffset(Offset: Integer): TDatLink;
20      function GetDatLinkByIndex(ID: Integer): TDatLink;
21      function GetFieldByOffset(Offset: Integer): TDataField;
22      function GetFieldByIndex(ID: Integer): TDataField;
23      function GetRawPartByOffset(Offset: Integer): TRawDataInfo;
24      function GetRawPartByIndex(ID: Integer): TRawDataInfo;
25    public
26      constructor Create(ConnectionID, FileID: Integer);
27     
28      property LinkByOffset[Offset: Integer]: TDatLink read GetDatLinkByOffset;
29      property LinkByIndex[ID: Integer]: TDatLink read GetDatLinkByIndex;
30
31      property FieldByOffset[Offset: Integer]: TDataField read GetFieldByOffset;
32      property FieldByIndex[ID: Integer]: TDataField read GetFieldByIndex;
33
34      property RawPartByOffset[Offset: Integer]: TRawDataInfo read GetRawPartByOffset;
35      property RawPartByIndex[ID: Integer]: TRawDataInfo read GetRawPartByIndex;
36  end;
37
38
39implementation
40
41uses
42  DatLinks, RawList;
43
44{ TFileType }
45
46constructor TFile.Create(ConnectionID, FileID: Integer);
47begin
48  FConnectionID := ConnectionID;
49  FFileID := FileID;
50
51  FDatLinks := DatLinksManager.GetDatLinks(ConnectionID, FileID);
52  FRawParts := RawLists.GetRawList(ConnectionID, FileID);
53end;
54
55
56function TFile.GetDatLinkByIndex(ID: Integer): TDatLink;
57begin
58  if ID < Length(FDatLinks) then
59    Result := FDatLinks[ID]
60  else
61    with Result do
62    begin
63      SrcOffset := -1;
64      DestID := -1;
65      PosDestExts := '';
66    end;
67end;
68
69function TFile.GetDatLinkByOffset(Offset: Integer): TDatLink;
70var
71  i: Integer;
72begin
73  Result.SrcOffset := -1;
74  Result.DestID := -1;
75  Result.PosDestExts := '';
76 
77  if Length(FDatLinks) > 0 then
78  begin
79    for i := 0 to High(FDatLinks) do
80      if FDatLinks[i].SrcOffset = Offset then
81        break;
82    if i < Length(FDatLinks) then
83      Result := FDatLinks[i];
84  end;
85end;
86
87
88function TFile.GetFieldByIndex(ID: Integer): TDataField;
89begin
90  if ID < Length(FDataFields) then
91    Result := FDataFields[ID]
92  else
93    Result := nil;
94end;
95
96function TFile.GetFieldByOffset(Offset: Integer): TDataField;
97var
98  i: Integer;
99begin
100  Result := nil;
101
102  if Length(FDataFields) > 0 then
103  begin
104    for i := 0 to High(FDataFields) do
105      if FDataFields[i].Offset = Offset then
106        break;
107    if i < Length(FDataFields) then
108      Result := FDataFields[i];
109  end;
110end;
111
112
113function TFile.GetRawPartByIndex(ID: Integer): TRawDataInfo;
114begin
115  if ID < Length(FRawParts) then
116    Result := FRawParts[ID]
117  else
118    with Result do
119    begin
120      SrcID := -1;
121      SrcOffset := -1;
122      RawAddr := -1;
123      RawSize := -1;
124    end;
125end;
126
127function TFile.GetRawPartByOffset(Offset: Integer): TRawDataInfo;
128var
129  i: Integer;
130begin
131  with Result do
132  begin
133    SrcID := -1;
134    SrcOffset := -1;
135    RawAddr := -1;
136    RawSize := -1;
137  end;
138
139  if Length(FRawParts) > 0 then
140  begin
141    for i := 0 to High(FRawParts) do
142      if FRawParts[i].SrcOffset = Offset then
143        break;
144    if i < Length(FRawParts) then
145      Result := FRawParts[i];
146  end;
147end;
148
149end.
Note: See TracBrowser for help on using the repository browser.