Changeset 240 for oup/current/FileClasses/_DataTypes.pas
- Timestamp:
- Jul 15, 2007, 1:12:26 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
oup/current/FileClasses/_DataTypes.pas
r237 r240 28 28 29 29 procedure Update(Offset, Length: Integer); virtual; abstract; 30 procedure WriteData(stream: TStream); virtual; abstract; 30 31 31 32 property Offset: Integer read FOffset; … … 56 57 Name, Description: String; ExtraArgs: array of const); override; 57 58 procedure Update(Offset, Length: Integer); override; 59 procedure WriteData(stream: TStream); override; 58 60 property FieldByOffset[Offset: Integer]: TDataField read GetFieldByOffset; 59 61 … … 73 75 Name, Description: String; ExtraArgs: array of const); override; 74 76 procedure Update(Offset, Length: Integer); override; 77 procedure WriteData(stream: TStream); override; 75 78 end; 76 79 … … 85 88 Name, Description: String; ExtraArgs: array of const); override; 86 89 procedure Update(Offset, Length: Integer); override; 90 procedure WriteData(stream: TStream); override; 87 91 end; 88 92 … … 98 102 Name, Description: String; ExtraArgs: array of const); override; 99 103 procedure Update(Offset, Length: Integer); override; 104 procedure WriteData(stream: TStream); override; 100 105 end; 101 106 … … 110 115 Name, Description: String; ExtraArgs: array of const); override; 111 116 procedure Update(Offset, Length: Integer); override; 117 procedure WriteData(stream: TStream); override; 112 118 end; 113 119 … … 122 128 Name, Description: String; ExtraArgs: array of const); override; 123 129 procedure Update(Offset, Length: Integer); override; 124 end; 125 126 127 TLinkByID = class(TDataField) 130 procedure WriteData(stream: TStream); override; 131 end; 132 133 134 TDatLink = class(TDataField) 135 private 136 function GetTarget: TObject; virtual; abstract; 137 public 138 property TargetFile: TObject read GetTarget; 139 end; 140 141 142 TLinkByID = class(TDatLink) 128 143 function GetChildCount: Integer; override; 129 144 function GetChild(ID: Integer): TTreeElement; override; … … 132 147 FPosExts: String; 133 148 function GetValueAsString: String; override; 149 function GetTarget: TObject; override; 134 150 public 135 151 // ExtraArgs: Pointer auf String: Possible Exts … … 137 153 Name, Description: String; ExtraArgs: array of const); override; 138 154 procedure Update(Offset, Length: Integer); override; 155 procedure WriteData(stream: TStream); override; 139 156 end; 140 157 … … 149 166 Name, Description: String; ExtraArgs: array of const); override; 150 167 procedure Update(Offset, Length: Integer); override; 168 procedure WriteData(stream: TStream); override; 151 169 end; 152 170 … … 168 186 Name, Description: String; ExtraArgs: array of const); override; 169 187 procedure Update(Offset, Length: Integer); override; 188 procedure WriteData(stream: TStream); override; 170 189 171 190 function AddField(fieldtype: TFieldType; Name, Description: String; … … 186 205 Name, Description: String; ExtraArgs: array of const); override; 187 206 procedure Update(Offset, Length: Integer); override; 207 procedure WriteData(stream: TStream); override; 188 208 end; 189 209 … … 197 217 Name, Description: String; ExtraArgs: array of const); override; 198 218 procedure Update(Offset, Length: Integer); override; 219 procedure WriteData(stream: TStream); override; 199 220 end; 200 221 … … 283 304 end; 284 305 306 procedure TString.WriteData(stream: TStream); 307 var 308 temps: String; 309 i: Integer; 310 begin 311 temps := FString; 312 SetLength(temps, FDataLength); 313 for i := Length(FString) + 1 to FDataLength do 314 temps[i] := #0; 315 stream.Write(temps[1], FDataLength); 316 end; 317 285 318 286 319 … … 307 340 fstream.Seek(FOffset, soFromBeginning); 308 341 fstream.Read(FInt, FDataLength); 342 end; 343 344 procedure TInt.WriteData(stream: TStream); 345 begin 346 stream.Write(FInt, FDataLength); 309 347 end; 310 348 … … 418 456 419 457 procedure TArray.Update(Offset, Length: Integer); 458 var 459 i: Integer; 460 field: TDataField; 461 begin 462 if System.Length(FDataFields) > 0 then 463 begin 464 if Length > 0 then 465 begin 466 for i := 0 to High(FDataFields) do 467 begin 468 field := FDataFields[i]; 469 if ((field.Offset < Offset) and (field.Offset + field.DataLength > Offset + Length)) or 470 ((field.Offset > Offset) and (field.Offset < Offset + Length)) or 471 ((field.Offset + field.DataLength > Offset) and (field.Offset+field.DataLength < Offset + Length)) then 472 field.Update(Offset, Length); 473 end; 474 end else begin 475 for i := 0 to High(FDataFields) do 476 FDataFields[i].Update(Offset, Length); 477 end; 478 end; 479 end; 480 481 procedure TArray.UpdateSize; 482 var 483 i: Integer; 484 begin 485 FDataLength := FCounterSize; 486 if Length(FDataFields) > 0 then 487 for i := 0 to High(FDataFields) do 488 FDataLength := FDataLength + FDataFields[i].DataLength; 489 FParentBlock.UpdateSize; 490 end; 491 492 procedure TArray.WriteData(stream: TStream); 493 var 494 i: Integer; 495 begin 496 if FCounterSize > 0 then 497 stream.Write(FBlockCount, FCounterSize); 498 if Length(FDataFields) > 0 then 499 for i := 0 to High(FDataFields) do 500 FDataFields[i].WriteData(stream); 501 end; 502 503 504 505 { TBlock } 506 507 function TBlock.AddField(fieldtype: TFieldType; Name, 508 Description: String; ExtraArgs: array of const): TDataField; 509 begin 510 SetLength(FDataFields, Length(FDataFields) + 1); 511 FDataFields[High(FDataFields)] := TFieldType(fieldtype).Create( 512 FParentFile, Self, Name, Description, ExtraArgs); 513 Result := FDataFields[High(FDataFields)]; 514 FDataLength := FDataLength + Result.DataLength; 515 if Assigned(FParentBlock) then 516 FParentBlock.UpdateSize; 517 end; 518 519 constructor TBlock.Create(ParentFile: TObject; ParentBlock: TContainer; 520 Name, Description: String; ExtraArgs: array of const); 521 begin 522 inherited Create(ParentFile, ParentBlock, Name, Description, ExtraArgs); 523 end; 524 525 function TBlock.GetChild(ID: Integer): TTreeElement; 526 begin 527 Result := FDataFields[ID]; 528 end; 529 530 function TBlock.GetChildCount: Integer; 531 begin 532 Result := Length(FDataFields); 533 end; 534 535 function TBlock.GetFieldByOffset(Offset: Integer): TDataField; 536 begin 537 Exit; 538 end; 539 540 procedure TBlock.Update(Offset, Length: Integer); 420 541 var 421 542 i: Integer; … … 443 564 end; 444 565 445 procedure TArray.UpdateSize;446 var447 i: Integer;448 begin449 FDataLength := FCounterSize;450 if Length(FDataFields) > 0 then451 for i := 0 to High(FDataFields) do452 FDataLength := FDataLength + FDataFields[i].DataLength;453 FParentBlock.UpdateSize;454 end;455 456 457 458 { TBlock }459 460 function TBlock.AddField(fieldtype: TFieldType; Name,461 Description: String; ExtraArgs: array of const): TDataField;462 begin463 SetLength(FDataFields, Length(FDataFields) + 1);464 FDataFields[High(FDataFields)] := TFieldType(fieldtype).Create(465 FParentFile, Self, Name, Description, ExtraArgs);466 Result := FDataFields[High(FDataFields)];467 FDataLength := FDataLength + Result.DataLength;468 if Assigned(FParentBlock) then469 FParentBlock.UpdateSize;470 end;471 472 constructor TBlock.Create(ParentFile: TObject; ParentBlock: TContainer;473 Name, Description: String; ExtraArgs: array of const);474 begin475 inherited Create(ParentFile, ParentBlock, Name, Description, ExtraArgs);476 end;477 478 function TBlock.GetChild(ID: Integer): TTreeElement;479 begin480 Result := FDataFields[ID];481 end;482 483 function TBlock.GetChildCount: Integer;484 begin485 Result := Length(FDataFields);486 end;487 488 function TBlock.GetFieldByOffset(Offset: Integer): TDataField;489 begin490 Exit;491 end;492 493 procedure TBlock.Update(Offset, Length: Integer);494 var495 i: Integer;496 field: TDataField;497 begin498 if System.Length(FDataFields) > 0 then499 begin500 if Length > 0 then501 begin502 for i := 0 to High(FDataFields) do503 begin504 field := FDataFields[i];505 if ((field.Offset < Offset) and (field.Offset + field.DataLength > Offset + Length)) or506 ((field.Offset > Offset) and (field.Offset < Offset + Length)) or507 ((field.Offset + field.DataLength > Offset) and (field.Offset+field.DataLength < Offset + Length)) then508 field.Update(Offset, Length);509 end;510 end else begin511 for i := 0 to High(FDataFields) do512 begin513 FDataFields[i].Update(Offset, Length);514 end;515 end;516 end;517 end;518 519 566 procedure TBlock.UpdateSize; 520 567 var … … 529 576 end; 530 577 578 procedure TBlock.WriteData(stream: TStream); 579 var 580 i: Integer; 581 begin 582 if Length(FDataFields) > 0 then 583 for i := 0 to High(FDataFields) do 584 FDataFields[i].WriteData(stream); 585 end; 531 586 532 587 … … 554 609 fstream.Read(FLevelID, 4); 555 610 FLevelID := FLevelID div 256 div 256 div 256 div 2; 611 end; 612 613 procedure TLevelID.WriteData(stream: TStream); 614 var 615 tempi: Integer; 616 begin 617 tempi := FLevelID * 256 * 256 * 256 * 2 + 1; 618 stream.Write(tempi, 4); 556 619 end; 557 620 … … 586 649 end; 587 650 651 procedure TFileID.WriteData(stream: TStream); 652 var 653 tempi: Integer; 654 begin 655 if FFileID >= 0 then 656 tempi := FFileID * 256 + 1 657 else 658 tempi := 0; 659 stream.Write(tempi, 4); 660 end; 661 588 662 589 663 … … 616 690 else 617 691 Result := 0; 692 end; 693 694 function TLinkByID.GetTarget: TObject; 695 begin 696 if FFileID > 0 then 697 Result := ConManager.Connection[FConnectionID].MetaData.FileById[FFileID] 698 else 699 Result := nil; 618 700 end; 619 701 … … 639 721 end; 640 722 723 procedure TLinkByID.WriteData(stream: TStream); 724 var 725 tempi: Integer; 726 begin 727 if FFileID >= 0 then 728 tempi := FFileID * 256 + 1 729 else 730 tempi := 0; 731 stream.Write(tempi, 4); 732 end; 733 641 734 642 735 … … 667 760 end; 668 761 762 procedure TRawLink.WriteData(stream: TStream); 763 begin 764 stream.Write(FRawAddress, 4); 765 end; 766 669 767 670 768 … … 686 784 begin 687 785 Exit; 786 end; 787 788 procedure TUnused.WriteData(stream: TStream); 789 var 790 i: Integer; 791 tempb: Byte; 792 begin 793 tempb := 0; 794 for i := 1 to FDataLength do 795 stream.Write(tempb, 1); 688 796 end; 689 797 … … 732 840 end; 733 841 842 procedure TBitSet.WriteData(stream: TStream); 843 begin 844 stream.Write(FBits, FDataLength); 845 end; 846 734 847 735 848 … … 758 871 end; 759 872 873 procedure TFloat.WriteData(stream: TStream); 874 begin 875 stream.Write(FFloat, 4); 876 end; 877 760 878 761 879 end.
Note:
See TracChangeset
for help on using the changeset viewer.