mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-15 22:51:06 +02:00
* 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:
parent
9e17ba4102
commit
d4ac343e3a
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user