source: ObjectBaseTypes/Level 2/UBitStream.pas

Last change on this file was 34, checked in by george, 14 years ago
  • Přidáno: Bitový proud v základních objektových třídách.
File size: 3.5 KB
Line 
1unit UBitStream;
2
3{$mode delphi}{$H+}
4
5interface
6
7uses
8 Classes, DateUtils, syncobjs, UObjectTypeBase, UObjectBoolean;
9
10type
11 { TMemoryBitStream }
12
13 TMemoryBitStream = class(TInterfacedObject, IAssignable, IComparable)
14 private
15 FMemoryStream: TMemoryStream;
16 FPositionOffset: Byte;
17 FSizeOffset: Byte;
18 function GetBit(Bit: Longint): TBoolean;
19 function GetPosition:Int64;
20 function GetSize:Int64;
21 procedure SetBit(Bit: Longint;const AValue: TBoolean);
22 procedure SetPosition(const AValue: Int64);
23 procedure SetSize(const AValue: Int64);
24 public
25 procedure ReadBits(Bits: TMemoryBitStream; Count: Integer);
26 procedure WriteBits(Bits: TMemoryBitStream);
27
28 procedure AndBy(Bits: TMemoryBitStream);
29 procedure OrBy(Bits: TMemoryBitStream);
30 procedure XorBy(Bits: TMemoryBitStream);
31 procedure NotBy(Bits: TMemoryBitStream);
32
33 function Lookup(Bit: TBoolean): Integer;
34 procedure Reverse;
35 procedure Clear;
36 procedure Assign(Source: TInterfacedObject);
37 function EqualTo(Operand: IComparable): TBoolean;
38
39 constructor Create;
40 destructor Destroy; override;
41
42 property Position: Int64 read GetPosition write SetPosition;
43 property Size: Int64 read GetSize write SetSize;
44 property Bits[Bit: Longint]: TBoolean read GetBit write SetBit; default;
45 end;
46
47implementation
48
49
50{ TMemoryBitStream }
51
52function TMemoryBitStream.GetBit(Bit: Longint): TBoolean;
53begin
54
55end;
56
57function TMemoryBitStream.GetPosition:Int64;
58begin
59 Result := FMemoryStream.Position + FPositionOffset;
60end;
61
62function TMemoryBitStream.GetSize:Int64;
63begin
64
65end;
66
67procedure TMemoryBitStream.SetBit(Bit: Longint;const AValue: TBoolean);
68begin
69end;
70
71procedure TMemoryBitStream.SetPosition(const AValue: Int64);
72begin
73 FMemoryStream.Position := AValue shr 3;
74 FPositionOffset := AValue and 7;
75end;
76
77procedure TMemoryBitStream.SetSize(const AValue: Int64);
78begin
79 FSizeOffset := AValue and 7;
80 if FSizeOffset = 0 then FMemoryStream.Size := (AValue shr 3)
81 else FMemoryStream.Size := (AValue shr 3) + 1;
82end;
83
84procedure TMemoryBitStream.ReadBits(Bits:TMemoryBitStream;Count:Integer);
85begin
86
87end;
88
89procedure TMemoryBitStream.WriteBits(Bits:TMemoryBitStream);
90begin
91
92end;
93
94procedure TMemoryBitStream.AndBy(Bits:TMemoryBitStream);
95begin
96
97end;
98
99procedure TMemoryBitStream.OrBy(Bits:TMemoryBitStream);
100begin
101
102end;
103
104procedure TMemoryBitStream.XorBy(Bits:TMemoryBitStream);
105begin
106
107end;
108
109procedure TMemoryBitStream.NotBy(Bits:TMemoryBitStream);
110begin
111
112end;
113
114function TMemoryBitStream.Lookup(Bit:TBoolean):Integer;
115begin
116 while (Position < Size) and (Bits[Position] <> Bit) do
117 Position := Position + 1;
118 if Position < Size then Result := Position
119 else Result := -1;
120end;
121
122procedure TMemoryBitStream.Reverse;
123begin
124
125end;
126
127procedure TMemoryBitStream.Clear;
128begin
129 Size := 0;
130 Position := 0;
131end;
132
133procedure TMemoryBitStream.Assign(Source:TInterfacedObject);
134begin
135 if Assigned(Source) and (Source is TMemoryBitStream) then begin
136 FMemoryStream.LoadFromStream(TMemoryBitStream(Source).FMemoryStream);
137 FPositionOffset := TMemoryBitStream(Source).FPositionOffset;
138 FSizeOffset := TMemoryBitStream(Source).FSizeOffset;
139 end;
140end;
141
142function TMemoryBitStream.EqualTo(Operand:IComparable):TBoolean;
143begin
144
145end;
146
147constructor TMemoryBitStream.Create;
148begin
149 FMemoryStream := TMemoryStream.Create;
150end;
151
152destructor TMemoryBitStream.Destroy;
153begin
154 FMemoryStream.Destroy;
155 inherited Destroy;
156end;
157
158end.
Note: See TracBrowser for help on using the repository browser.