source: branches/Z80/UDynamicNumber.pas

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