DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦952aba556⟧ Ada Source

    Length: 10240 (0x2800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Table1, seg_04e8e6

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



with Io;

package body Table1 is

    procedure Create (O : in out Object) is
    begin
        O.Premier := Fin_Liste;
        O.Libre := O.Tab'First;
        for I in O.Tab'First .. O.Tab'Last - 1 loop
            O.Tab (I).Suiv := I + 1;
        end loop;  
        O.Tab (O.Tab'Last).Suiv := Fin_Liste;
    end Create;


    procedure Ajouter (O : in out Object; Element : Item) is
        Indice, Prec : Natural;
        Key : Natural;
    begin
        if O.Libre = Fin_Liste then
            raise Table_Overflow;
        else
            if O.Premier = Fin_Liste then

                Indice := O.Libre;
                O.Libre := O.Tab (Indice).Suiv;

                O.Premier := Indice;
                O.Tab (Indice).Element := Element;
                O.Tab (Indice).Suiv := Fin_Liste;

            else  
                Key := Cle (Element);

                if Key < Cle (O.Tab (O.Premier).Element) then

                    Idice := O.Libre;
                    O.Libre := O.Tab (Indice).Suiv;

                    O.Tab (Indice).Suiv := O.Premier;
                    O.Tab (Indice).Element := Element;
                    O.Premier := Indice;

                else
                    Prec := O.Premier;
                    Indice := O.Tab (O.Premier).Suiv;

                    while Indice /= Fin_Liste loop
                        if Cle (O.Tab (Indice).Element) > Key then
                            exit;
                        end if;
                        Prec := Indice;
                        Indice := O.Tab (Indice).Suiv;
                    end loop;

                    Indice := O.Libre;
                    O.Libre := O.Tab (Indice).Suiv;

                    O.Tab (Indice).Suiv := O.Tab (Prec).Suiv;
                    O.Tab (Indice).Element := Element;

                    O.Tab (Prec).Suiv := Indice;
                end if;

            end if;
        end if;
    end Ajouter;


    procedure Supprimer (O : in out Object; Key : Natural) is
        Indice, Prec : Natural;
    begin  
        Indice := O.Premier;
        if Indice /= Fin_Liste then
            if Cle (O.Tab (Indice).Element) = Key then  
                O.Premier := O.Tab (Indice).Suiv;
                O.Tab (Indice).Suiv := O.Libre;
                O.Libre := Indice;
            else
                Prec := Indice;
                Indice := O.Tab (Indice).Suiv;
                while Indice /= Fin_Liste loop
                    if Cle (O.Tab (Indice).Element) = Key then
                        O.Tab (Prec).Suiv := O.Tab (Indice).Suiv;
                        O.Tab (Indice).Suiv := O.Libre;
                        O.Libre := Indice;
                        exit;
                    end if;
                    Prec := Indice;
                    Indice := O.Tab (Indice).Suiv;
                end loop;
                if Indice = Fin_Liste then
                    raise Item_Not_Found;
                end if;
            end if;
        end if;
    end Supprimer;

    procedure Modifier (O : in out Object; Key : Natural; Element : Item) is
    begin
        Supprimer (O, Key);
        Ajouter (O, Element);
    end Modifier;

    function Position (O : Object; Key : Natural; A_Partir_De : Natural)
                      return Natural is
        Indice : Natural;
        Current_Key : Natural;
    begin  
        Indice := A_Partir_De;
        while Indice /= Fin_Liste loop  
            Current_Key := Cle (O.Tab (Indice).Element);
            if Current_Key = Key then
                return Indice;
            elsif Current_Key > Key then
                return Fin_Liste;
            end if;
        end loop;
        return Fin_Liste;
    end Position;


    function Is_In (O : Object; Key : Natural) return Boolean is
    begin
        return (Position (O => O, Key => Key, A_Partir_De => O.Premier) /=
                Fin_Liste);
    end Is_In;


    function Search (O : Object; Key : Natural) return Item is
        Indice : Natural;
    begin
        Indice := Position (O => O, Key => Key, A_Partir_De => O.Premier);
        if Indice = Fin_Liste then
            raise Item_Not_Found;
        else
            return O.Tab (Indice).Element;
        end if;
    end Search;


    function First_Item (O : Object; Key : Natural) return Iterateur is
        Indice : Natural;
        Iter : Iterateur;
    begin
        Indice := Position (O => O, Key => Key, A_Partir_De => O.Premier);
        Iter.Indice := Indice;
        Iter.Cle := Key;
        Iter.Utilise_Cle := True;
        return Iter;
    end First_Item;

    function First_Item (O : Object) return Iterateur is
        Iter : Iterateur;
    begin  
        Iter.Indice := O.Premier;
        Iter.Utilise_Cle := False;
        return Iter;
    end First_Item;

    function Current_Item (I : Iterateur; O : Object) return Item is
    begin
        if I.Indice = Fin_Liste then
            raise Fin_Iterateur;
        else
            return O.Tab (I.Indice).Element;
        end if;
    end Current_Item;


    procedure Next_Item (I : in out Iterateur; O : Object) is
    begin
        if I.Indice = Fin_Liste then
            raise Fin_Iterateur;
        else
            if I.Utilise_Cle then
                I.Indice := Position
                               (O => O, Key => I.Cle, A_Partir_De => I.Indice);
            else  
                I.Indice := O.Tab (I.Indice).Suiv;
            end if;
        end if;
    end Next_Item;


    function End_Item (I : Iterateur) return Boolean is
    begin
        return I.Indice = Fin_Liste;
    end End_Item;


    procedure Dump (O : Object) is
        Iter : Iterateur;
    begin
        Iter := First_Item (O);
        while not End_Item (Iter) loop
            Io.Put_Line (Image (Current_Item (Iter, O)));
            Next_Item (Iter, O);
        end loop;
    end Dump;

end Table1;

E3 Meta Data

    nblk1=9
    nid=9
    hdr6=10
        [0x00] rec0=26 rec1=00 rec2=01 rec3=02a
        [0x01] rec0=00 rec1=00 rec2=07 rec3=002
        [0x02] rec0=1d rec1=00 rec2=08 rec3=012
        [0x03] rec0=1a rec1=00 rec2=04 rec3=048
        [0x04] rec0=21 rec1=00 rec2=03 rec3=058
        [0x05] rec0=22 rec1=00 rec2=06 rec3=01c
        [0x06] rec0=25 rec1=00 rec2=05 rec3=03c
        [0x07] rec0=07 rec1=00 rec2=02 rec3=000
        [0x08] rec0=14 rec1=f5 rec2=00 rec3=006
    tail 0x2154a25e2876f60eab552 0x42a00088462060003
Free Block Chain:
  0x9: 0000  00 00 00 04 80 01 65 01 02 03 04 40 00 00 7f 78  ┆      e    @   x┆