Справочник по Ada 2012
A.10.10 Ввод-вывод для типов перечисления
Статическая семантика
В обобщенном пакете Enumeration_IO определены следующие процедуры, которые необходимо инстанциировать для соответствующего типа перечисления (обозначенного как Enum в спецификации).
Значения выводятся с использованием прописных или строчных букв для идентификаторов. Это определяется параметром Set, который является типом перечисления Type_Set.
type Type_Set is (Lower_Case, Upper_Case);
Формат (включая любые хвостовые пробелы) может быть задан необязательным параметром ширины поля. Значения по умолчанию для ширины поля и регистра букв определяются следующими переменными, объявленными в обобщенном пакете Enumeration_IO:
Default_Width : Field := 0;
Default_Setting : Type_Set := Upper_Case;
Default_Setting : Type_Set := Upper_Case;
Предоставлены следующие процедуры:
procedure Get(File : in File_Type; Item : out Enum);
procedure Get(Item : out Enum);
procedure Get(Item : out Enum);
После пропуска начальных пробелов, разделителей строк или страниц считывает идентификатор в соответствии с синтаксисом этого лексического элемента (строчные и прописные буквы считаются эквивалентными) или строковый литерал в соответствии с синтаксисом этого лексического элемента (включая апострофы). Возвращает в параметре Item значение типа Enum, соответствующее введенной последовательности.
Исключение Data_Error генерируется, если введенная последовательность не соответствует требуемому синтаксису или если идентификатор или строковый литерал не соответствует значению подтипа Enum.
procedure Put(File : in File_Type;
Item : in Enum;
Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting);
procedure Put(Item : in Enum;
Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting);
Item : in Enum;
Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting);
procedure Put(Item : in Enum;
Width : in Field := Default_Width;
Set : in Type_Set := Default_Setting);
Выводит значение параметра Item в виде литерала перечисления (либо идентификатора, либо строкового литерала). Необязательный параметр Set указывает, использовать ли строчные или прописные буквы для идентификаторов; для строковых литералов он не оказывает влияния. Если полученная последовательность символов содержит меньше, чем Width символов, то для доведения до требуемого значения дополнительно выводятся пробелы. Если Enum — тип символов, последовательность символов формируется как Enum.Image(Item) и модифицируется параметрами Width и Set.
procedure Get(From : in String; Item : out Enum; Last : out Positive);
Считывает значение перечисления из начала заданной строки, следуя тем же правилам, что и процедура Get для считывания значения перечисления из файла, но рассматривая конец строки как терминатор файла. Возвращает в параметре Item значение типа Enum, соответствующее введенной последовательности. Возвращает в Last индекс символа, являющегося последним прочитанным символом.
Исключение Data_Error генерируется, если введенная последовательность не соответствует требуемому синтаксису или если идентификатор или строковый литерал не соответствует значению подтипа Enum.
procedure Put(To : out String;
Item : in Enum;
Set : in Type_Set := Default_Setting);
Item : in Enum;
Set : in Type_Set := Default_Setting);
Выводит значение параметра Item в заданную строку, следуя тем же правилам, что и для вывода в файл, используя длину заданной строки в качестве значения Width.
Хотя спецификация обобщенного пакета Enumeration_IO позволяет инстанциировать его для целочисленного типа, это не предназначено для такого использования, и эффект таких инстанциаций не определен языком.
ПРИМЕЧАНИЯ
36 Существует различие между процедурой Put для символов и для значений перечисления. Таким образом
Ada.Text_IO.Put('A'); -- выводит символ A
package Char_IO is new Ada.Text_IO.Enumeration_IO(Character);
Char_IO.Put('A'); -- выводит символ 'A', заключённый в апострофы
Char_IO.Put('A'); -- выводит символ 'A', заключённый в апострофы
37 Тип Boolean является типом перечисления, поэтому Enumeration_IO может быть инстанциирован для этого типа.