Programación en Ada / Cláusulas de representación
De Wikilibros, la colección de libros de texto de contenido libre.
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);

