source: ProtocolBuffers/UMemoryStreamEx.pas

Last change on this file was 6, checked in by george, 15 years ago
  • Přidáno: Generování hlavičky položek se značkou Tag a Wire typem.
File size: 2.5 KB
Line 
1unit UMemoryStreamEx;
2
3{$mode delphi}{$H+}
4
5interface
6
7uses
8 Classes, DateUtils;
9
10type
11 TMemoryStreamEx = class(TMemoryStream)
12 procedure WriteByte(Data: Byte);
13 procedure WriteWord(Data: Word);
14 procedure WriteCardinal(Data: Cardinal);
15 procedure WriteInt64(Data: Int64);
16 procedure WriteShortString(Data: ShortString);
17 procedure WriteUnixTime(Data: TDateTime);
18 procedure WriteStream(Stream: TStream);
19 function ReadByte: Byte;
20 function ReadWord: Word;
21 function ReadCardinal: Cardinal;
22 function ReadInt64: Int64;
23 function ReadShortString: string;
24 function ReadUnixTime: TDateTime;
25 procedure ReadStream(var Stream: TStream; Count: Integer);
26 end;
27
28implementation
29
30{ TMemoryStreamEx }
31
32function TMemoryStreamEx.ReadByte: Byte;
33begin
34 Read(Result, 1);
35end;
36
37function TMemoryStreamEx.ReadCardinal: Cardinal;
38begin
39 Read(Result, 4);
40end;
41
42function TMemoryStreamEx.ReadInt64: Int64;
43begin
44 Read(Result, 8);
45end;
46
47function TMemoryStreamEx.ReadShortString: string;
48var
49 Count: Byte;
50begin
51 Read(Count, 1);
52 SetLength(Result, Count);
53 Read(Result[1], Count);
54end;
55
56procedure TMemoryStreamEx.ReadStream(var Stream: TStream; Count: Integer);
57var
58 Buffer: array of Byte;
59begin
60 if Count > 0 then begin
61 SetLength(Buffer, Count);
62 Read(Buffer[0], Count);
63 Stream.Size := Count;
64 Stream.Position := 0;
65 Stream.Write(Buffer[0], Count);
66 end;
67end;
68
69function TMemoryStreamEx.ReadUnixTime: TDateTime;
70begin
71 Result := UnixToDateTime(ReadCardinal);
72end;
73
74function TMemoryStreamEx.ReadWord: Word;
75begin
76 Read(Result, 2);
77end;
78
79procedure TMemoryStreamEx.WriteByte(Data: Byte);
80begin
81 Write(Data, 1);
82end;
83
84procedure TMemoryStreamEx.WriteCardinal(Data: Cardinal);
85begin
86 Write(Data, 4);
87end;
88
89procedure TMemoryStreamEx.WriteInt64(Data: Int64);
90begin
91 Write(Data, 8);
92end;
93
94procedure TMemoryStreamEx.WriteShortString(Data: ShortString);
95begin
96 WriteByte(Length(Data));
97 Write(Data[1], Length(Data))
98end;
99
100procedure TMemoryStreamEx.WriteStream(Stream: TStream);
101var
102 Buffer: array of Byte;
103begin
104 Stream.Position := 0;
105 SetLength(Buffer, Stream.Size);
106 Stream.Read(Buffer[0], Stream.Size);
107 Write(Buffer[0], Stream.Size);
108end;
109
110procedure TMemoryStreamEx.WriteUnixTime(Data: TDateTime);
111var
112 DataUnix: Int64;
113begin
114 DataUnix := DateTimeToUnix(Data);
115 Write(DataUnix, 4);
116end;
117
118procedure TMemoryStreamEx.WriteWord(Data: Word);
119begin
120 Write(Data, 2);
121end;
122
123end.
Note: See TracBrowser for help on using the repository browser.