Ignore:
Timestamp:
Mar 23, 2007, 5:05:38 AM (18 years ago)
Author:
alloc
Message:
 
Location:
oup/current/FileClasses
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • oup/current/FileClasses/_DataTypes.pas

    r124 r126  
    44
    55type
    6   TDataType = class
     6  TDataField = class
    77    private
    8       function GetDataLength: Integer; virtual; abstract;
     8      FOffset: Integer;
     9      FName:   String;
     10      FDescription: String;
     11      FDataLength: Integer;
    912      function GetValueAsString: String; virtual; abstract;
    10     published
    11       property DataLength: Integer read GetDataLength;
    12 //      property DataLength: Integer;
     13    public
     14      constructor Create(Offset: Integer; Name, Description: String);
     15
     16      property Offset: Integer read FOffset;
     17      property Name: String read FName;
     18      property Description: String read FDescription;
     19      property DataLength: Integer read FDataLength;
    1320      property ValueAsString: String read GetValueAsString;
    1421  end;
    1522
    16 
    17   TDataField = record
    18     Offset: Integer;
    19     Data: TDataType;
    20   end;
    2123  TDataFields = array of TDataField;
    2224
    2325
    24   TInt32 = class(TDataType)
     26  TInt32 = class(TDataField)
    2527    private
    26       FValue: LongWord;
    27       function GetDataLength: Integer; override;
     28      FInt: LongWord;
    2829      function GetValueAsString: String; override;
     30    public
     31      constructor Create(Offset: Integer; Name, Description: String);
    2932  end;
    3033
    31   TString = class(TDataType)
     34
     35  TString = class(TDataField)
    3236    private
    3337      FString: String;
    34       function GetDataLength: Integer; override;
    3538      function GetValueAsString: String; override;
     39    public
     40      constructor Create(Offset: Integer; Name, Description: String; Length: Integer);
     41  end;
     42
     43
     44 
     45  TArray = class(TDataField)
     46    private
     47      FDataFields: TDataFields;
     48      function GetFieldByOffset(Offset: Integer): TDataField;
     49      function GetFieldByIndex(ID: Integer): TDataField;
     50    public
     51      constructor Create(Offset: Integer; Name, Description: String; Length, Count: Integer);
     52      property FieldByOffset[Offset: Integer]: TDataField read GetFieldByOffset;
     53      property FieldByIndex[ID: Integer]: TDataField read GetFieldByIndex;
    3654  end;
    3755
     
    4159  SysUtils;
    4260
     61
     62{ TDataType }
     63
     64constructor TDataField.Create(Offset: Integer; Name, Description: String);
     65begin
     66  FOffset := Offset;
     67  FName := Name;
     68  FDescription := Description;
     69end;
     70
     71
     72
    4373{ TInt32 }
    4474
    45 function TInt32.GetDataLength: Integer;
     75constructor TInt32.Create(Offset: Integer; Name, Description: String);
    4676begin
    47   Result := 4;
     77  inherited Create(Offset, Name, Description);
    4878end;
    4979
    5080function TInt32.GetValueAsString: String;
    5181begin
    52   Result := IntToStr(FValue);
     82  Result := IntToStr(FInt);
    5383end;
     84
     85
    5486
    5587{ TString }
    5688
    57 function TString.GetDataLength: Integer;
     89constructor TString.Create(Offset: Integer; Name, Description: String;
     90  Length: Integer);
    5891begin
    59   Result := Length(FString);
     92  inherited Create(Offset, Name, Description);
     93
    6094end;
    6195
     
    6599end;
    66100
     101
     102
     103{ TArray }
     104
     105constructor TArray.Create(Offset: Integer; Name, Description: String;
     106  Length, Count: Integer);
     107begin
     108  Exit;
     109end;
     110
     111function TArray.GetFieldByIndex(ID: Integer): TDataField;
     112begin
     113  if ID < Length(FDataFields) then
     114    Result := FDataFields[ID]
     115  else
     116    Result := nil;
     117end;
     118
     119function TArray.GetFieldByOffset(Offset: Integer): TDataField;
     120var
     121  i: Integer;
     122begin
     123  Result := nil;
     124
     125  if Length(FDataFields) > 0 then
     126  begin
     127    for i := 0 to High(FDataFields) do
     128      if FDataFields[i].Offset = Offset then
     129        break;
     130    if i < Length(FDataFields) then
     131      Result := FDataFields[i];
     132  end;
     133end;
     134
     135
    67136end.
  • oup/current/FileClasses/_FileTypes.pas

    r124 r126  
    88
    99type
    10   TFileType = class
     10  TFile = class
    1111    private
     12      FConnectionID: Integer;
     13      FFileID: Integer;
     14
    1215      FDatLinks: TDatLinkList;
    1316      FDataFields: TDataFields;
    14       function GetDatLink(Offset: Integer): TDatLink;
    15       function GetField(Offset: Integer): TDataField;
     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;
    1625    public
    17       property LinksByID[Offset: Integer]: TDatLink read GetDatLink;
    18       property Fields[Offset: Integer]: TDataField read GetField;
     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;
    1936  end;
    2037
     
    2239implementation
    2340
     41uses
     42  DatLinks, RawList;
     43
    2444{ TFileType }
    2545
    26 function TFileType.GetDatLink(Offset: Integer): TDatLink;
     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;
    2770var
    2871  i: Integer;
     
    4285end;
    4386
    44 function TFileType.GetField(Offset: Integer): TDataField;
     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;
    4597var
    4698  i: Integer;
    4799begin
    48   Result.Offset := -1;
    49   Result.Data := nil;
     100  Result := nil;
    50101
    51102  if Length(FDataFields) > 0 then
     
    59110end;
    60111
     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
    61149end.
Note: See TracChangeset for help on using the changeset viewer.