with Singly_Linked_List;
package Schema is
    ---------------------------------------------------------------------
    -- exports 7 basic types describing test units:
    --  Architecture_Category_Type  -- the benchmarks category of the test
    --  Description_Type            -- a string describing the test
    --  E_and_V_Criterion_Type      -- the E and V team category of the
    --                                 test.  May be more than one, which
    --                                 is the reason for the List types
    --  Language_Feature_Type       -- the Ada language category of the
    --                                 test.  May also be more than one.
    --  Name_Type                   -- the short name (also file name).
    --  Statistics_Type             -- the priciple kind of statistics
    --                                 measured by the test.
    --  Version_Type                -- the benchmark version of the test.
    --
    -- the rest is there for implementation reasons
    ---------------------------------------------------------------------
    type Architecture_Category_Type is
       (Normative_Performance, Normative_Capacity,
        Optional_Feature, Optional_Algorithm, Every);
    --
    Description_Length : constant := 120;  -- see User's Manual
    subtype Description_Type is String (1 .. Description_Length);
    --
    Criterion_Length : constant := 36;
    subtype E_And_V_Criterion_Type is String (1 .. Criterion_Length);
    --
    Feature_Length : constant := 51;
    subtype Language_Feature_Type is String (1 .. Feature_Length);
    --
    Name_Length : constant := 6;
    subtype Name_Type is String (1 .. Name_Length);
    --
    type Statistics_Type is (Compilation, Execution, Both);
    --
    type Version_Type is (Control, Test, Optimize,
                          Suppress, Other, All_Versions);
    ---------------------------------------------------------------------
    -- Lists of E and V Criteria
    ---------------------------------------------------------------------
    type E_And_V_Criterion_Abbreviation_Type is
       (Effcy01, Effcy06, Effcy13, Effcy18, Effcy21,
        Effcy22, Effcy26, Effcy29, Effcy32);
    --
    package Criterion_Lists is new Singly_Linked_List
                                      (E_And_V_Criterion_Abbreviation_Type);
    use Criterion_Lists;
    type E_And_V_Criteria_List is new Criterion_Lists.List_Type;
    function Expand (Key : E_And_V_Criterion_Abbreviation_Type)
                    return E_And_V_Criterion_Type;
    ---------------------------------------------------------------------
    -- Lists of Language Features
    ---------------------------------------------------------------------
    type Language_Feature_Abbreviation_Type is
       (Identifiers, Literals, Derived_Types, Scalar_Types, Array_Types,
        Record_Types, Access_Types, Local_Names, Non_Local_Names, Indexed_Comps,
        Slices, Selected_Comps, Attributes, Aggregates, Record_Aggs, Array_Aggs,
        Expressions, Logical_Operators, Relational_Operators, Binary_Adds,
        Unary_Adds, Multiplying_Ops, Hi_Precedence_Ops, Type_Conversions,
        Qualified_Expressions, Allocators, Static_Exprs_Subtypes, Assignment,
        Array_Assign, If_Stmts, Case_Stmts, Loop_Stmts, Block_Stmts, Exit_Stmts,
        Return_Stmts, Goto_Stmts, Subprogram_Decls, Subprogram_Calls,
        Parameter_Assns, Default_Parms, Overloading, Package_Specs_Decls,
        Package_Bodies, Private_Types, References_To_Objects, Use_Clauses,
        Renaming_Decls, Task_Types_Objects, Task_Execution, Task_Dependence,
        Entries_Accepts, Delay_Stmts, Select_Stmts, Selective_Waits,
        Conditional_Entries, Timed_Entries, Task_Entry_Attribs, Abort_Stmts,
        Context_Clauses, Subunits, Exception_Decls, Exception_Handlers,
        Raise_Stmts, Exception_Propagation, Generic_Decls, Generic_Bodies,
        Generic_Insts, Uses_Of_Generic_Insts, Representation_Clauses,
        Length_Clauses, Enum_Rep_Clauses, Record_Rep_Clauses,
        Address_Clauses, Change_Of_Rep, Machine_Code_Inserts,
        Unchecked_Pgming, Seq_Dir_Files, Text_Input_Output, Pragma_Inline,
        Pragma_Optimize, Pragma_Pack, Pragma_Shared, Pragma_Suppress);
    --
    package Feature_Lists is new Singly_Linked_List
                                    (Language_Feature_Abbreviation_Type);
    use Feature_Lists;
    type Language_Features_List is new Feature_Lists.List_Type;
    function Expand (Key : Language_Feature_Abbreviation_Type)
                    return Language_Feature_Type;
    ---------------------------------------------------------------------
    -- Lists of Test Unit Names
    ---------------------------------------------------------------------
    package Name_Lists is new Singly_Linked_List (Name_Type);
    use Name_Lists;
    type Name_List is new Name_Lists.List_Type;

end Schema;
--**********************************************************************