Справочник по Ada 95
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 значение индекса, такое что From(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 позволила бы инстанциацию для целочисленного типа, это не является предназначением данного обобщенного пакета, и влияние таких инстанциаций не определено языком.
ПРИМЕЧАНИЯ
32 Существует разница между 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' в апострофах
33 Тип Boolean является типом перечисления, поэтому Enumeration_IO может быть инстанцирован для этого типа.