Programación en Ada/Cláusulas de representación
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);