|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 5120 (0x1400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Discrete_Hole_Manager, seg_004624
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
package body Discrete_Hole_Manager is
One : constant Long_Integer := 1;
procedure Init_Holes (Holes : out Hole_List; Lo, Hi : Long_Integer) is
begin
Holes := new Hole_Descriptor'(Lo => Lo, Hi => Hi, Next => null);
end Init_Holes;
procedure Delete_Hole (Holes : in out Hole_List;
Lo, Hi : Long_Integer;
Success : out Boolean) is
H : Hole_List := Holes;
Prev : Hole_List := null;
Temp : Hole_List;
begin
Success := True;
if Lo > Hi then
return;
end if;
-- H may be null, which raises constraint error
-- exception is caught and success set to false
while Lo > H.Hi loop
Prev := H;
H := H.Next;
end loop;
pragma Assert (H.Lo <= Lo and Hi <= H.Hi);
-- may fail and raise assertion error
-- exception is caught and success set to false
-- H.Lo <= Lo <= Hi <= H.Hi
if Lo = H.Lo and Hi = H.Hi then
-- evaporate hole
if Prev = null then
Holes := H.Next;
else
Prev.Next := H.Next;
end if;
elsif Lo = H.Lo then
-- contract hole
H.Lo := Hi + One;
elsif Hi = H.Hi then
-- contract hole
H.Hi := Lo - One;
else
-- split hole
Temp := H.Next;
H.Next := new Hole_Descriptor'
(Lo => Hi + One, Hi => H.Hi, Next => null);
H.Next.Next := Temp;
H.Hi := Lo - One;
end if;
exception
when others =>
Success := False;
end Delete_Hole;
procedure Next_Hole (Holes : in out Hole_List; Lo, Hi : out Long_Integer) is
begin
Lo := Holes.Lo;
Hi := Holes.Hi;
Holes := Holes.Next;
end Next_Hole;
function More_Holes (Holes : Hole_List) return Boolean is
begin
return Holes /= null;
end More_Holes;
end Discrete_Hole_Manager;
nblk1=4
nid=0
hdr6=8
[0x00] rec0=22 rec1=00 rec2=01 rec3=02e
[0x01] rec0=00 rec1=00 rec2=04 rec3=00c
[0x02] rec0=22 rec1=00 rec2=02 rec3=028
[0x03] rec0=0a rec1=00 rec2=03 rec3=001
tail 0x21700246c815c65db8abe 0x42a00088462061e03