Programación en Ada/Cláusulas de representación

← Interfaz con otros lenguajes Cláusulas de representación Diseño y programación de sistemas grandes →


Una de las características de Ada que facilitan la programación de bajo nivel es la posibilidad de definir a nivel de bit la representación de nuestros tipos. Es posible definir el tamaño y los valores internos de los tipos enumerados, por ejemplo:

 type Estado_T is (Desconectado, Conectado, Desconocido);
 -- Especificamos que el compilador ha de usar dos bits
 for Estado_T'Size use 2;
 -- Especificamos los valores que se usarán en memoria para cada valor
 for Estado_T use (Desconectado => 0, Conectado => 1, Desconocido => 3);

También es posible definir la estructura en memoria de los registros:

 type Estructura_Estado_T is
   record
     Estado            : Estado_T;
     Numero_Reintentos : Integer;
   end record;
 
 for Estructura_Estado_T use
   record
      Estado            at 0 range 0 .. 2; -- Primer y 2º bit de la 1ª palabra
      Numero_Reintentos at 1 range 0 .. 31; -- 32 bits en la 2ª palabra
   end record;

Otra manera de controlar la representación es con el pragma Pack, que indica al compilador que use la mínima representación para los componentes de un array o de un registro, sin dejar espacios vacíos entre los elementos.

 type Array_Bits_T is array (Positive range <>) of Boolean;
 
 -- Indicamos que se use un único bit para el tipo Boolean (dos valores, un
 -- bit es suficiente) y de este modo tenemos un array de bits sobre el 
 -- que podemos aplicar operadores booleanos:
 pragma Pack (Array_Bits_T);

Manual de Referencia de Ada

editar