source: trunk/UMemoryStreamEx.pas

Last change on this file was 1, checked in by george, 15 years ago
  • New: Imported base application with sample docked windows.
File size: 3.3 KB
Line 
1unit UMemoryStreamEx;
2
3interface
4
5uses
6 Classes, DateUtils, SysUtils, Dialogs;
7
8type
9 TMemoryStreamEx = class(TMemoryStream)
10 procedure WriteByte(Data: Byte);
11 procedure WriteWord(Data: Word);
12 procedure WriteCardinal(Data: Cardinal);
13 procedure WriteInt64(Data: Int64);
14 procedure WriteShortString(Data: ShortString);
15 procedure WriteUnixTime(Data: TDateTime);
16 procedure WriteStream(Stream: TStream);
17 function ReadByte: Byte;
18 function ReadWord: Word;
19 function ReadCardinal: Cardinal;
20 function ReadInt64: Int64;
21 function ReadShortString: string;
22 function ReadUnixTime: TDateTime;
23 procedure ReadStream(var Stream: TStream; Count: Integer);
24 procedure Delete(Count: Integer);
25 procedure Show;
26 end;
27
28implementation
29
30{ TMemoryStreamEx }
31
32procedure TMemoryStreamEx.Delete(Count: Integer);
33var
34 TempStream: TMemoryStreamEx;
35 TempPosition: Int64;
36begin
37 TempStream := TMemoryStreamEx.Create;
38 TempPosition := Position;
39 Position := 0;
40 ReadStream(TStream(TempStream), TempPosition);
41 Position := TempPosition + Count;
42 ReadStream(TStream(TempStream), Size - Position);
43 Clear;
44 TempStream.Position := 0;
45 WriteStream(TempStream);
46 TempStream.Free;
47end;
48
49function TMemoryStreamEx.ReadByte: Byte;
50begin
51 Read(Result, 1);
52end;
53
54function TMemoryStreamEx.ReadCardinal: Cardinal;
55begin
56 Read(Result, 4);
57end;
58
59function TMemoryStreamEx.ReadInt64: Int64;
60begin
61 Read(Result, 8);
62end;
63
64function TMemoryStreamEx.ReadShortString: string;
65var
66 Count: Byte;
67begin
68 Read(Count, 1);
69 SetLength(Result, Count);
70 Read(Result[1], Count);
71end;
72
73procedure TMemoryStreamEx.ReadStream(var Stream: TStream; Count: Integer);
74var
75 Buffer: array of Byte;
76begin
77 if Count > 0 then begin
78 SetLength(Buffer, Count);
79 Read(Buffer[0], Count);
80 Stream.Write(Buffer[0], Count);
81 end;
82end;
83
84function TMemoryStreamEx.ReadUnixTime: TDateTime;
85begin
86 Result := UnixToDateTime(ReadCardinal);
87end;
88
89function TMemoryStreamEx.ReadWord: Word;
90begin
91 Read(Result, 2);
92end;
93
94procedure TMemoryStreamEx.Show;
95var
96 Buffer: array of Byte;
97 I: Integer;
98 Output: string;
99begin
100 Position := 0;
101 SetLength(Buffer, Size);
102 Read(Buffer[0], Size);
103 for I := 0 to Length(Buffer) - 1 do
104 Output := Output + IntToHex(Buffer[I], 2) + ' ';
105 ShowMessage(Output);
106 Position := 0;
107end;
108
109procedure TMemoryStreamEx.WriteByte(Data: Byte);
110begin
111 Write(Data, 1);
112end;
113
114procedure TMemoryStreamEx.WriteCardinal(Data: Cardinal);
115begin
116 Write(Data, 4);
117end;
118
119procedure TMemoryStreamEx.WriteInt64(Data: Int64);
120begin
121 Write(Data, 8);
122end;
123
124procedure TMemoryStreamEx.WriteShortString(Data: ShortString);
125begin
126 WriteByte(Length(Data));
127 Write(Data[1], Length(Data))
128end;
129
130procedure TMemoryStreamEx.WriteStream(Stream: TStream);
131var
132 Buffer: array of Byte;
133 ReadCount: Integer;
134begin
135 if Stream.Size > 0 then begin
136 SetLength(Buffer, Stream.Size - Stream.Position);
137 ReadCount := Stream.Read(Buffer[0], Length(Buffer));
138 Write(Buffer[0], ReadCount);
139 end;
140end;
141
142procedure TMemoryStreamEx.WriteUnixTime(Data: TDateTime);
143var
144 DataUnix: Int64;
145begin
146 DataUnix := DateTimeToUnix(Data);
147 Write(DataUnix, 4);
148end;
149
150procedure TMemoryStreamEx.WriteWord(Data: Word);
151begin
152 Write(Data, 2);
153end;
154
155end.
Note: See TracBrowser for help on using the repository browser.