ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/DataAccess/DataAccess.pas
(Generate patch)

Comparing:
oup/rewrite/DataAccess/DataAccess.pas (file contents), Revision 93 by alloc, Thu Jan 18 17:15:59 2007 UTC vs.
oup/current/DataAccess/DataAccess.pas (file contents), Revision 229 by alloc, Wed Jun 20 10:57:51 2007 UTC

# Line 1 | Line 1
1   unit DataAccess;
2   interface
3  
4 < uses TypeDefs, Classes, StrUtils, SysUtils;
5 < //uses Data, Classes, SysUtils, StrUtils,
6 < //  Dialogs, ABSDecUtil, ABSMain, DB, Windows;
7 <
4 > uses TypeDefs, Classes, StrUtils, SysUtils, _MetaManager;
5  
6   type
7    TDataAccess = class
8    private
9 +  protected
10      FConnectionID:  Integer;
11      FFileName:      String;
12      FBackend:       TDataBackend;
13 +    FDataOS:        TDataOS;
14      FLevelNumber:   Integer;
15      FChangeRights:  TChangeRights;
16 <  protected
16 >    FMeta:          TMetaManager;
17 >    procedure SetDataOS(DataOS: TDataOS);
18    public
19      property ConnectionID: Integer      read FConnectionID;
20 <    property FileName:    String        read FFileName;
21 <    property Backend:     TDataBackend  read FBackend;
22 <    property LevelNumber: Integer       read FLevelNumber;
20 >    property FileName:     String       read FFileName;
21 >    property Backend:      TDataBackend read FBackend;
22 >    property DataOS:       TDataOS      read FDataOS write SetDataOS;
23 >    property LevelNumber:  Integer      read FLevelNumber;
24 >    property ChangeRights: TChangeRights read FChangeRights;
25 >    property MetaData:     TMetaManager read FMeta;
26  
27 <    constructor Create(FileName: String; ConnectionID: Integer; var Msg: TStatusMessages); virtual; abstract;
27 >    constructor Create(FileName: String; ConnectionID: Integer; var Msg: TStatusMessages); virtual;
28      procedure Close; virtual; abstract;
29  
30      function ExtractFileIDOfName(Name: String): Integer; virtual;
# Line 33 | Line 36 | type
36      function GetExtensionsList(ExtListFormat: TExtensionFormat): TStrings; virtual; abstract;
37  
38      procedure LoadDatFile(FileID: Integer; var Target: TStream); overload; virtual; abstract;
39 <    procedure LoadDatFile(FileID: Integer; var Target: TByteArray); overload; virtual; abstract;
39 >    procedure LoadDatFile(FileID: Integer; var Target: TByteData); overload;
40      procedure UpdateDatFile(FileID: Integer; Src: TStream); overload; virtual; abstract;
41 <    procedure UpdateDatFile(FileID: Integer; Src: TByteArray); overload; virtual; abstract;
41 >    procedure UpdateDatFile(FileID: Integer; Src: TByteData); overload;
42      procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TStream); overload; virtual; abstract;
43 <    procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteArray); overload; virtual; abstract;
44 <    procedure LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); overload; virtual; abstract;
43 >    procedure LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteData); overload;
44 >    procedure LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer); overload;
45      procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TStream); overload; virtual; abstract;
46 <    procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TByteArray); overload; virtual; abstract;
44 <    procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); overload; virtual; abstract;
46 >    procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer); overload;
47  
48 +    function GetDatLinks(FileID: Integer): TDatLinkList; virtual; abstract;
49 +    function GetDatLink(FileID, DatOffset: Integer): TDatLink; virtual; abstract;
50      function GetRawList(FileID: Integer): TRawDataList; virtual; abstract;
51 <    function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo;
51 >    function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; virtual; abstract;
52  
53      procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TStream); overload; virtual; abstract;
54 <    procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TByteArray); overload; virtual; abstract;
55 <    procedure UpdateRawFile(FileID, DatOffset, Size: Integer; Src: TStream); overload; virtual; abstract;
56 <    procedure UpdateRawFile(FileID, DatOffset, Size: Integer; Src: TByteArray); overload; virtual; abstract;
54 >    procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TByteData); overload;
55 >    procedure UpdateRawFile(FileID, DatOffset: Integer; Src: TStream); overload; virtual; abstract;
56 >    procedure UpdateRawFile(FileID, DatOffset: Integer; Src: TByteData); overload;
57      procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TStream); overload; virtual; abstract;
58 <    procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteArray); overload; virtual; abstract;
59 <    procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); overload; virtual; abstract;
58 >    procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteData); overload;
59 >    procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer); overload;
60      procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TStream); overload; virtual; abstract;
61 <    procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TByteArray); overload; virtual; abstract;
58 <    procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); overload; virtual; abstract;
61 >    procedure UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer); overload;
62  
63 <    function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TStream): Integer; overload; virtual; abstract;
64 <    function AppendRawFile(LocSep: Boolean; Size: Integer; Src: TByteArray): Integer; overload; virtual; abstract;
65 <    function AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; overload; virtual; abstract;
63 >    function AppendRawFile(LocSep: Boolean; Src: TStream): Integer; overload; virtual;
64 >    function AppendRawFile(LocSep: Boolean; Src: TByteData): Integer; overload;
65 > //    function AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer; overload;
66    published
67    end;
68  
69  
70  
68
69
70 {
71 var
72  DataConnections: array of TOniData;
73
74 function CreateDataConnection(filename: String; backend: Integer): TOniData;
75 function ConnectionExists(filename: String): TOniData;
76 procedure CloseDataConnection(connection: TOniData);
77 function GetEmptyFileInfo: TFileInfo;
78 }
79
80
71   implementation
72  
73  
# Line 85 | Line 75 | implementation
75   Implementation of TDataAccess
76   *)
77  
78 + constructor TDataAccess.Create(FileName: String; ConnectionID: Integer;
79 +  var Msg: TStatusMessages);
80 + begin
81 +  FMeta := TMetaManager.Create(FConnectionID, Self);
82 + end;
83 +
84 +
85 +
86   function TDataAccess.ExtractFileIDOfName(Name: String): Integer;
87   begin
88    if Name[5] = '-' then
# Line 129 | Line 127 | begin
127   end;
128  
129  
130 < function TDataAccess.GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo;
130 > procedure TDataAccess.LoadDatFile(FileID: Integer; var Target: TByteData);
131   var
132 <  i: LongWord;
135 <  RawList: TRawDataList;
132 >  data: TStream;
133   begin
134 <  RawList          := GetRawList(FileID);
138 <  Result.SrcID     := -1;
139 <  Result.SrcOffset := -1;
140 <  Result.RawAddr   := -1;
141 <  Result.RawSize   := -1;
142 <  if Length(RawList) > 0 then
134 >  if fileid < GetFileCount then
135    begin
136 <    for i := 0 to High(RawList) do
137 <    begin
138 <      if RawList[i].SrcOffset = DatOffset then
139 <      begin
140 <        Result.SrcID     := FileID;
149 <        Result.SrcOffset := RawList[i].SrcOffset;
150 <        Result.RawAddr   := RawList[i].RawAddr;
151 <        Result.RawSize   := RawList[i].RawSize;
152 <        Result.LocSep    := RawList[i].LocSep;
153 <        Break;
154 <      end;
155 <    end;
136 >    data := nil;
137 >    LoadDatFile(FileID, data);
138 >    SetLength(Target, data.Size);
139 >    data.Read(Target[0], data.Size);
140 >    data.Free;
141    end;
142   end;
143  
144 + procedure TDataAccess.UpdateDatFile(FileID: Integer; Src: TByteData);
145 + var
146 +  data: TStream;
147 + begin
148 +  if fileid < GetFileCount then
149 +  begin
150 +    data := TMemoryStream.Create;
151 +    data.Write(Src[0], Length(Src));
152 +    data.Seek(0, soFromBeginning);
153 +    UpdateDatFile(FileID, data);
154 +    data.Free;
155 +  end;
156 + end;
157 +
158 + procedure TDataAccess.LoadDatFilePart(FileID, Offset, Size: Integer; var Target: TByteData);
159 + var
160 +  data: TStream;
161 + begin
162 +  if fileid < GetFileCount then
163 +  begin
164 +    data := nil;
165 +    LoadDatFilePart(FileID, offset, size, data);
166 +    SetLength(Target, data.Size);
167 +    data.Read(Target[0], data.Size);
168 +    data.Free;
169 +  end;
170 + end;
171  
172 + procedure TDataAccess.LoadDatFilePart(FileID, Offset, Size: Integer; Target: Pointer);
173 + var
174 +  data: TStream;
175 + begin
176 +  if fileid < GetFileCount then
177 +  begin
178 +    data := nil;
179 +    LoadDatFilePart(FileID, offset, size, data);
180 +    data.Read(Target^, data.Size);
181 +    data.Free;
182 +  end;
183 + end;
184 +
185 + procedure TDataAccess.UpdateDatFilePart(FileID, Offset, Size: Integer; Src: Pointer);
186 + var
187 +  data: TStream;
188 + begin
189 +  if fileid < GetFileCount then
190 +  begin
191 +    data := TMemoryStream.Create;
192 +    data.Write(Src^, Size);
193 +    data.Seek(0, soFromBeginning);
194 +    UpdateDatFilePart(FileID, offset, size, data);
195 +    data.Free;
196 +  end;
197 + end;
198 +
199 +
200 +
201 + procedure TDataAccess.LoadRawFile(FileID, DatOffset: Integer; var Target: TByteData);
202 + var
203 +  data: TStream;
204 + begin
205 +  if fileid < GetFileCount then
206 +  begin
207 +    data := nil;
208 +    LoadRawFile(FileID, DatOffset, data);
209 +    SetLength(Target, data.Size);
210 +    data.Read(Target[0], data.Size);
211 +    data.Free;
212 +  end;
213 + end;
214 +
215 + procedure TDataAccess.UpdateRawFile(FileID, DatOffset: Integer; Src: TByteData);
216 + var
217 +  data: TStream;
218 + begin
219 +  if fileid < GetFileCount then
220 +  begin
221 +    data := TMemoryStream.Create;
222 +    data.Write(Src[0], Length(Src));
223 +    data.Seek(0, soFromBeginning);
224 +    UpdateRawFile(FileID, DatOffset, data);
225 +    data.Free;
226 +  end;
227 + end;
228 +
229 + procedure TDataAccess.LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TByteData);
230 + var
231 +  data: TStream;
232 + begin
233 +  if fileid < GetFileCount then
234 +  begin
235 +    data := nil;
236 +    SetLength(Target, Size);
237 +    LoadRawFile(FileID, DatOffset, Data);
238 +    Data.Seek(Offset, soFromBeginning);
239 +    Data.Read(Target[0], Size);
240 +    Data.Free;
241 +  end;
242 + end;
243 +
244 + procedure TDataAccess.LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; Target: Pointer);
245 + var
246 +  data: TStream;
247 + begin
248 +  if fileid < GetFileCount then
249 +  begin
250 +    data := nil;
251 +    LoadRawFile(FileID, DatOffset, Data);
252 +    Data.Seek(Offset, soFromBeginning);
253 +    Data.Read(Target^, Size);
254 +    Data.Free;
255 +  end;
256 + end;
257 +
258 + procedure TDataAccess.UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: Pointer);
259 + var
260 +  data: TStream;
261 + begin
262 +  if fileid < GetFileCount then
263 +  begin
264 +    data := TMemoryStream.Create;
265 +    data.Write(Src^, Size);
266 +    data.Seek(0, soFromBeginning);
267 +    UpdateRawFilePart(FileID, DatOffset, Offset, Size, data);
268 +    data.Free;
269 +  end;
270 + end;
271 +
272 +
273 + function TDataAccess.AppendRawFile(LocSep: Boolean; Src: TStream): Integer;
274 + begin
275 +  raise ENotImplemented.Create('ERROR: AppendRawFile not implemented here!!!');
276 + end;
277 +
278 +
279 + function TDataAccess.AppendRawFile(LocSep: Boolean; Src: TByteData): Integer;
280 + var
281 +  data: TStream;
282 + begin
283 +  data := TMemoryStream.Create;
284 +  data.Write(Src[0], Length(Src));
285 +  data.Seek(0, soFromBeginning);
286 +  Result := AppendRawFile(LocSep, data);
287 +  data.Free;
288 + end;
289 + {
290 + function TDataAccess.AppendRawFile(LocSep: Boolean; Size: Integer; Src: Pointer): Integer;
291 + var
292 +  data: TStream;
293 + begin
294 +  data := TMemoryStream.Create;
295 +  data.Write(Src^, Size);
296 +  data.Seek(0, soFromBeginning);
297 +  Result := AppendRawFile(LocSep, data);
298 +  data.Free;
299 + end;
300 + }
301 +
302 +
303 + procedure TDataAccess.SetDataOS(DataOS: TDataOS);
304 + begin
305 +  raise ENotImplemented.Create('TDataAccess.SetDataOS: TBD!');
306 + end;
307  
308   end.

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)