tags:

views:

77

answers:

2

Hi all,

Can anyone please tell me the usage of the following declarations shown below.I am a beginner in ada language.I had tried the internet but that was not clear enough.

            type Unsigned_4 is mod 2 ** 4;
            for Unsigned_4'Size use 4;
+3  A: 

Unsigned_4 is a "modular type" taking the values 0, 1, .. 14, 15, and wrapping round.

   U : Unsigned_4;
begin
   U := Unsigned_4'Last;      -- 15
   U := U + 1;                -- 0

You only need 4 bits to implement the type, so it's OK to specify that as its Size (I think this may be simply a confirming spec, since the compiler clearly knows that already; if you were hoping to fit it into 3 bits and said for Unsigned_4'Size use 3; the compiler would tell you that you were wrong).

Most compilers will want to store values of the type in at least a byte, for efficient access. The minimum size comes into its own when you use the type in a packed record (pragma Pack).

Simon Wright
+1  A: 

The "is mod" is Ada's way of saying that this is a modular type. Modular types work a bit like unsigned types in C: They don't have negative values, and once you reach the largest representable value, if you add one you will get 0.

If you were to try the same with a normal (non-modular) integer in Ada, you'd get constraint_error

T.E.D.