Previous topic | Next topic | Ada Home Page | Index

Enumeration types

Many things are best described using words, not numbers.

Ada lets you define an enumeration type: a data type whose values are a collection of allowed words.

        type days is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

        type colours is (white, red, yellow, green, brown, blue, pink, black);

        type traffic_colours is (green, yellow, red);

        type suits is (clubs, diamonds, hearts, spades);

The values in an enumeration type are ordered:

        clubs < diamonds

        white < pink

        colours(green) > colours(red)

        traffic_colours(green) < traffic_colours(red)

Note that the same words can be elements in different enumeration types, even in the same program. They are distinguished by reference to the type as well as the element. The last examples show how this is done.

Enumeration types have the following benefits:

An example program shows the use of enumeration types in a program that determines the effect of mixing primary colours.


Attributes of Enumerated Types

Attributes of enumerated types are:
        etype'FIRST     etype'LAST
        etype'PRED(c)   etype'SUCC(c)
        etype'POS(c)    etype'VAL(i)

For example:

        type days is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);

        days'FIRST      is Mon
        days'LAST       is Sun
        days'PRED(Wed)  is Tue
        days'SUCC(Wed)  is Thu
        days'POS(Wed)   is 2
        days'VAL(3)     is Thu

You must ensure the result is legal. A CONSTRAINT_ERROR will occur at run-time otherwise. For example, days'SUCC(Sun) is illegal.


Using Enumerated Types

Can use enumerated types as selectors in case statements.

Can use enumerated types for parameters and result types in functions and procedures:

        function next_day(this_day : week_days) return week_days is

        begin -- next day
            if this_day = sun then
            -- relational comparison of an enumeration type
                return Mon;
            else
                return week_days'SUCC( this_day );
                -- attribute of an enumeration type
            end if;
        end next_day;

Comparisons:

Input/output:


Previous topic | Next topic | Ada Home Page | Index
c-lokan@adfa.oz.au / 21 Feb 96