source: DynamicNumber/UDynamicNumber.pas

Last change on this file was 15, checked in by george, 15 years ago
File size: 3.9 KB
Line 
1unit UDynamicNumber;
2
3{$mode Delphi}{$H+}
4
5interface
6
7uses
8 Classes, SysUtils;
9
10type
11
12 { TDynamicNumber }
13
14 TDynamicNumber = class
15 private
16 function GetSize: Integer;
17 procedure SetSize(const AValue: Integer);
18 procedure CheckSize(Source: TDynamicNumber);
19 public
20 Value: array of Byte;
21 procedure Assign(AValue: Integer); overload;
22 procedure Assign(AValue: Byte); overload;
23
24 function BitwiseAnd(AValue: TDynamicNumber): TDynamicNumber;
25 function BitwiseOr(AValue: TDynamicNumber): TDynamicNumber;
26 function BitwiseXor(AValue: TDynamicNumber): TDynamicNumber;
27 function BitwiseNot: TDynamicNumber;
28
29 function Add(AValue: TDynamicNumber): TDynamicNumber;
30 function Subtract(AValue: TDynamicNumber): TDynamicNumber;
31 function Divide(AValue: TDynamicNumber): TDynamicNumber;
32 function Multiply(AValue: TDynamicNumber): TDynamicNumber;
33
34 function EqualTo(AValue: TDynamicNumber): Boolean;
35 function HigerThen(AValue: TDynamicNumber): Boolean;
36 function LowerThen(AValue: TDynamicNumber): Boolean;
37
38 procedure Shift(Direction: Integer);
39 property Size: Integer read GetSize write SetSize;
40 end;
41
42implementation
43
44{ TDynamicNumber }
45
46function TDynamicNumber.GetSize: Integer;
47begin
48 Result := Length(Value);
49end;
50
51procedure TDynamicNumber.SetSize(const AValue: Integer);
52begin
53 SetLength(Value, AValue);
54end;
55
56procedure TDynamicNumber.CheckSize(Source: TDynamicNumber);
57begin
58 if Source.Size <> Size then
59 raise Exception.Create('Size mismatch.');
60end;
61
62procedure TDynamicNumber.Assign(AValue: Integer);
63begin
64 Size := 4;
65 Value[0] := AValue;
66 Value[1] := AValue shr 8;
67 Value[2] := AValue shr 16;
68 Value[3] := AValue shr 24;
69end;
70
71procedure TDynamicNumber.Assign(aValue: Byte);
72begin
73 Size := 1;
74 Value[0] := AValue;
75end;
76
77function TDynamicNumber.BitwiseAnd(AValue: TDynamicNumber): TDynamicNumber;
78var
79 I: Integer;
80begin
81 CheckSize(AValue);
82 for I := 0 to Length(Value) - 1 do
83 Value[I] := Value[I] and AValue.Value[I];
84 Result := Self;
85end;
86
87function TDynamicNumber.BitwiseOr(AValue: TDynamicNumber): TDynamicNumber;
88var
89 I: Integer;
90begin
91 CheckSize(AValue);
92 for I := 0 to Length(Value) - 1 do
93 Value[I] := Value[I] or AValue.Value[I];
94 Result := Self;
95end;
96
97function TDynamicNumber.BitwiseXor(AValue: TDynamicNumber): TDynamicNumber;
98var
99 I: Integer;
100begin
101 CheckSize(AValue);
102 for I := 0 to Length(Value) - 1 do
103 Value[I] := Value[I] xor AValue.Value[I];
104 Result := Self;
105end;
106
107function TDynamicNumber.BitwiseNot: TDynamicNumber;
108var
109 I: Integer;
110begin
111 for I := 0 to Length(Value) - 1 do
112 Value[I] := not Value[I];
113 Result := Self;
114end;
115
116function TDynamicNumber.Add(AValue: TDynamicNumber): TDynamicNumber;
117begin
118 raise Exception.Create('Not implemented');
119end;
120
121function TDynamicNumber.Subtract(AValue: TDynamicNumber): TDynamicNumber;
122begin
123 raise Exception.Create('Not implemented');
124end;
125
126function TDynamicNumber.Divide(AValue: TDynamicNumber): TDynamicNumber;
127begin
128 raise Exception.Create('Not implemented');
129end;
130
131function TDynamicNumber.Multiply(AValue: TDynamicNumber): TDynamicNumber;
132begin
133 raise Exception.Create('Not implemented');
134end;
135
136function TDynamicNumber.EqualTo(AValue: TDynamicNumber): Boolean;
137var
138 I: Integer;
139begin
140 CheckSize(AValue);
141 Result := True;
142 for I := 0 to Length(Value) - 1 do
143 if Value[I] <> Value[I] then begin
144 Result := False;
145 Break;
146 end;
147end;
148
149function TDynamicNumber.HigerThen(AValue: TDynamicNumber): Boolean;
150begin
151 raise Exception.Create('Not implemented');
152end;
153
154function TDynamicNumber.LowerThen(AValue: TDynamicNumber): Boolean;
155begin
156 raise Exception.Create('Not implemented');
157end;
158
159procedure TDynamicNumber.Shift(Direction: Integer);
160begin
161 raise Exception.Create('Not implemented');
162end;
163
164
165end.
166
Note: See TracBrowser for help on using the repository browser.