Дополнительно отметим, что Input и Output
существуют также для определенного подтипа, и их значения просто вызывают Read и Write.
Для взаимодействия с надклассовыми типами предназначены атрибуты T'Class'Output и T'Class'Input.
Для вывода значения надклассового типа, сначала производится вывод внешнего представления тэга, после чего с помощю механизма диспетчеризации (перенаправления) вызывается процедура 'Output которая соответствующим образом выводит специфические значения (вызывая 'Write).
Подобным образом, для ввода значения такого типа, сначала производится чтение тэга, а затем, в соответствии со значением тэга, с помощю механизма диспетчеризации (перенаправления) вызывается функция Input.
Для полноты, также описаны атрибуты T'Class'Write и T'Class'Read
которые выполняют диспетчеризацию (перенаправление) вызовов к подпрограммам определяемых атрибутами 'Write и 'Read
специфического типа, который идентифицируется тэгом.
Из рассмотренных нами примеров следует основной принцип работы с потоками: то что сначала было записано, то и должно быть прочитано, при выполнении подходящей обратной операции.
Теперь можно продолжить рассмотрение структуры которая лежит в основе всех этих механизмов.
Все потоки являются производными от абстрактного типа Streams.Root_Stream_Type
который имеет две абстрактных операции Read и Write
описанные следующим образом:
procedure Read(Stream : in out Root_Stream_Type; Item : out Stream_Element_Array; Last : out Stream_Element_Offset) is abstract; procedure Write(Stream : in out Root_Stream_Type; Item : in Stream_Element_Array) is abstract; |
Организацию работы этих механизмов лучше рассматривать в терминах потоковых элементов, а не значений какого-либо типа.
Следует обратить внимание на разницу между потоковыми элементами (stream elements) и элементами памяти (storage elements) (элементы памяти будут рассмотрены при рассмотрении пулов памяти).
Элементы памяти (storage elements) затрагивают внутреннюю память (storage) в то время как потоковые элементы (stream elements) затрагивают внешнюю информацию и, таким образом, подходят для распределенных систем.