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

⟦9560c0730⟧ Ada Source

    Length: 13312 (0x3400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package Generic_Fact_Base, seg_02ced1

Derivation

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

E3 Source Code



with Constant_String;
with Output_Stream;
generic

    type Class_Names is (<>);
    Null_Class_Name : Class_Names := Class_Names'Last;

    Max_Slots : Natural := 20;

    type Predicate_Object is private;
    Null_Predicate : Predicate_Object;

    with function Predicate_Match (Value : Integer; Against : Predicate_Object)
                                  return Boolean is <>;

    with procedure Predicate_Put (The_Expression : Predicate_Object;
                                  Where          : Output_Stream.Object) is <>;

package Generic_Fact_Base is

    package Query is
        subtype Query_Size      is Natural range 0 .. Max_Slots;
        type    Query_Qualifier is (Find, Check_No);

        subtype Slot_Names is Query_Size range 1 .. Max_Slots;
        type    Patterns   is array (Slot_Names range <>) of Predicate_Object;

        type Object (Size : Query_Size := 0) is
            record
                Kind  : Query_Qualifier;
                Class : Class_Names;
                Value : Patterns (1 .. Size);
            end record;

        type Objects is array (Positive range <>) of Object;

        Null_Query   : constant Object  :=
           Query.Object'(Size  => 0,
                         Kind  => Find,
                         Class => Null_Class_Name,
                         Value => (1 .. 0 => Null_Predicate));
        Null_Queries : constant Objects := (1 .. 0 => Null_Query);

        procedure Put (The_Query : Object; Where : Output_Stream.Object);
        procedure Put (The_Queries : Objects; Where : Output_Stream.Object);
    end Query;


    package Class is

        type Object is private;
        Null_Class : constant Object;

        type User_Object is private;
        Null_User_Object : constant User_Object;

        type User_Objects is array (Positive range <>) of User_Object;
        function No_User_Objects return User_Objects;

        type    Instance_Name     is new Natural;
        subtype Instance_Size     is Natural range 0 .. Max_Slots;
        subtype Slot_Names        is Instance_Size range 1 .. Max_Slots;
        type    Slots             is array (Slot_Names range <>) of Integer;
        type    Slot_Names_Images is
              array (Slot_Names range <>) of Constant_String.Object;

        function As_User_Object
                    (The_Instance : Instance_Name; For_Class : Class.Object)
                    return User_Object;

        function Class_Of      (The_Object : User_Object) return Class.Object;
        function Class_Name_Of (The_Object : User_Object) return Class_Names;
        function Class_Name_Of (The_Object : Object)      return Class_Names;
        function Last_Instance (Of_Class : Object)        return Instance_Name;

        function  Make       (Name       : Class_Names;
                              Class_Size : Natural;
                              Names      : Slot_Names_Images) return Object;
        procedure Make_Empty (The_Class : in out Class.Object);

        function Slot_Name_Image
                    (From_Class : Class.Object; For_Slot : Slot_Names)
                    return String;
        function Match (The_Instance     : Instance_Name;
                        Against_Patterns : Query.Patterns;
                        Using_Class      : Class.Object) return Boolean;

        function Get (The_Object : User_Object) return Slots;
        function Get (The_Object : User_Object; Slot : Slot_Names)
                     return Integer;

        procedure Add (To_Class : Class.Object; The_Instance : Slots);

        procedure Delete (The_Object : User_Object);

        procedure Change (The_Object : User_Object; To_Value : Slots);
        procedure Change (The_Object : User_Object;
                          Slot       : Slot_Names;
                          To_Value   : Integer);

        procedure Default_Put (The_Object : User_Object;
                               Where      : Output_Stream.Object);  
        procedure Default_Put (The_Collection : User_Objects;
                               Where          : Output_Stream.Object);
        procedure Default_Put (The_Class : Class.Object;
                               Where     : Output_Stream.Object);
        generic
            with procedure Put (The_Object : User_Object;
                                Where : Output_Stream.Object) is Default_Put;
        procedure Generic_Put (The_Class : Class.Object;
                               Where     : Output_Stream.Object);
        Overflow : exception;

    private

        Null_Instance_Name : constant Instance_Name := 0;

        type Object_Structure (Class_Size : Instance_Name);
        type Object is access Object_Structure;
        Null_Class : constant Object := null;
        type User_Object is
            record
                Isa  : Class.Object        := Class.Null_Class;
                Name : Class.Instance_Name := Class.Null_Instance_Name;
            end record;

        Null_User_Object : constant User_Object :=
           (Isa => Class.Null_Class, Name => Class.Null_Instance_Name);
    end Class;


    generic
        Class_Name : Class_Names;
        Class_Size : Natural;
        type Slot_Names is (<>);
    package Generic_Class is

        type Slots    is array (Slot_Names) of Integer;
        type Patterns is array (Slot_Names) of Predicate_Object;

        function Class_Object              return Class.Object;
        function Exist   (What : Patterns) return Query.Object;
        function Not_Any (What : Patterns) return Query.Object;
        function Absent  (What : Patterns) return Query.Object renames Not_Any;

        function Get (The_Fact : Class.User_Object) return Slots;
        function Get (The_Fact : Class.User_Object; Slot : Slot_Names)
                     return Integer;

        procedure Add    (The_Fact : Slots);
        procedure Delete (The_Fact : Class.User_Object);
        procedure Change (The_Fact : Class.User_Object; Value : Slots);
        procedure Change (The_Fact : Class.User_Object;
                          The_Slot : Slot_Names;
                          To_Value : Integer);
        generic
            with function Image (For_Slot : Slot_Names; Value : Integer)
                                return String;
        procedure Generic_Put (The_Fact : Class.User_Object;
                               Where    : Output_Stream.Object);

        Illegal_Access : exception;
    end Generic_Class;


    package Working_Memory is

        procedure Make_Empty;

        procedure Register (The_Class : Class.Object);
        function  Get      (Using : Class_Names)    return Class.Object;
        function  Retrieve (Filter : Query.Objects) return Class.User_Objects;

        generic
            with procedure Put (The_Fact : Class.User_Object;
                                Where    : Output_Stream.Object) is
               Class.Default_Put;
        procedure Generic_Put (Where : Output_Stream.Object);

        procedure Default_Put (Where : Output_Stream.Object);

    end Working_Memory;
end Generic_Fact_Base;

E3 Meta Data

    nblk1=c
    nid=6
    hdr6=12
        [0x00] rec0=1f rec1=00 rec2=01 rec3=050
        [0x01] rec0=1e rec1=00 rec2=09 rec3=01a
        [0x02] rec0=00 rec1=00 rec2=0b rec3=006
        [0x03] rec0=12 rec1=00 rec2=07 rec3=062
        [0x04] rec0=17 rec1=00 rec2=05 rec3=01e
        [0x05] rec0=16 rec1=00 rec2=03 rec3=036
        [0x06] rec0=19 rec1=00 rec2=04 rec3=02c
        [0x07] rec0=1b rec1=00 rec2=08 rec3=016
        [0x08] rec0=09 rec1=00 rec2=0a rec3=000
        [0x09] rec0=0e rec1=00 rec2=0a rec3=000
        [0x0a] rec0=15 rec1=00 rec2=07 rec3=000
        [0x0b] rec0=0e rec1=00 rec2=0a rec3=000
    tail 0x21525bbf2841254722466 0x42a00088462063c03
Free Block Chain:
  0x6: 0000  00 02 03 fc 80 23 65 72 65 20 20 20 20 20 20 3a  ┆     #ere      :┆
  0x2: 0000  00 0c 03 fc 80 2c 68 65 5f 43 6c 61 73 73 20 3a  ┆     ,he_Class :┆
  0xc: 0000  00 00 00 28 80 25 61 73 73 20 3a 20 43 6c 61 73  ┆   ( %ass : Clas┆