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

git-svn-id: trunk@23050 -
This commit is contained in:
marco 2012-11-23 17:17:16 +00:00
parent 9e17ba4102
commit d4ac343e3a

View File

@ -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.