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