فهرست منبع

* LE and BE streamhelpers for tstream. Simplifies writing stream formats in a different endianness. (mostly CHM)

git-svn-id: trunk@23050 -
marco 12 سال پیش
والد
کامیت
d4ac343e3a
1فایلهای تغییر یافته به همراه121 افزوده شده و 0 حذف شده
  1. 121 0
      packages/fcl-base/src/streamex.pp

+ 121 - 0
packages/fcl-base/src/streamex.pp

@@ -58,6 +58,32 @@ type
       property Position: LongInt read GetPosition write SetPosition;
    end;
 
+
+  TStreamHelper = class helper for TStream
+                     function  ReadWordLE :word;
+                     function  ReadDWordLE:dword;
+                     function  ReadQWordLE:qword;
+                     procedure WriteWordLE (w:word);
+  		     procedure WriteDWordLE(dw:dword);
+	             procedure WriteQWordLE(dq:qword);
+                     function  ReadWordBE :word;
+                     function  ReadDWordBE:dword;
+                     function  ReadQWordBE:qword;
+                     procedure WriteWordBE (w:word);
+  		     procedure WriteDWordBE(dw:dword);
+	             procedure WriteQWordBE(dq:qword);
+                     {$ifndef FPC}
+                      function ReadByte  : Byte;
+                      function ReadWord  : Word;
+                      function ReadDWord : DWord;
+                      function ReadQWord : QWord;
+                      procedure WriteByte  (b : Byte);
+                      procedure WriteWord  (b : word);
+                      procedure WriteDWord (b : DWord);
+                      procedure WriteQWord (b : QWord);
+                     {$endif}
+                     end;
+
 Implementation
 
 { TBidirBinaryObjectReader }
@@ -166,4 +192,99 @@ begin
    GetDriver.WriteValue(Value);
 end;
 
+
+
+function TStreamHelper.readwordLE:word;
+begin
+  result:=LEtoN(readword);
+end;
+
+function TStreamHelper.readdwordLE:dword;
+begin
+  result:=LEtoN(readdword);
+end;
+
+function TStreamHelper.readqwordLE:qword;
+begin
+  result:=LEtoN(readqword);
+end;
+
+function TStreamHelper.readwordBE:word;
+begin
+  result:=BEtoN(readword);
+end;
+
+function TStreamHelper.readdwordBE:dword;
+begin
+  result:=BEtoN(readdword);
+end;
+
+function TStreamHelper.readqwordBE:qword;
+begin
+  result:=BEtoN(readqword);
+end;
+
+procedure TStreamHelper.WriteWordBE(w:word);
+begin
+  WriteWord(NtoBE(w));
+end;
+
+procedure TStreamHelper.WriteDWordBE(dw:dword);
+begin
+  WriteDWord(NtoBE(dw));
+end;
+
+procedure TStreamHelper.WriteQWordBE(dq:qword);
+begin
+  WriteQWord(NtoBE(dq));
+end;
+
+procedure TStreamHelper.WriteWordLE(w:word);
+begin
+  WriteWord(NtoLE(w));
+end;
+
+procedure TStreamHelper.WriteDWordLE(dw:dword);
+begin
+  WriteDWord(NtoLE(dw));
+end;
+
+procedure TStreamHelper.WriteQWordLE(dq:qword);
+begin
+  WriteQWord(NtoLE(dq));
+end;
+
+{$ifndef FPC}
+// there can only be one helper per class, and I use these in Delphi for FPC compatibility.
+function TStreamHelper.ReadByte: Byte;
+begin
+ self.Read(result,sizeof(result));
+end;
+
+function TStreamHelper.ReadDWord: DWord;
+begin
+ self.Read(result,sizeof(result));
+end;
+
+function TStreamHelper.ReadWord: Word;
+begin
+ self.Read(result,sizeof(result));
+end;
+
+procedure TStreamHelper.WriteByte(b: Byte);
+begin
+ self.Write(b,sizeof(b));
+end;
+
+procedure TStreamHelper.WriteDWord(b: DWord);
+begin
+ self.Write(b,sizeof(b));
+end;
+
+procedure TStreamHelper.WriteWord(b: Word);
+begin
+ self.Write(b,sizeof(b));
+end;
+{$endif}
+
 end.