Допустим, что необходимо создать настраиваемый пакет,содержащий операции Push и Pop для работы со стеком. Ниже приведен один из возможных путей описания такого стека; мы опишем пакет Stack, который будет хранить элементы некоторого типа Item и свой максимальный размер:
generic Size : Positive; type Item is private; package Generic_Stack is procedure Push(E : in Item); procedure Pop (E : out Item); Overflow, Underflow : exception; end Generic_Stack;
Теперь описанное выше необходимо реализовать, и вот пример такой реализации:
package body Generic_Stack is type Table is array (Positive range <>) of Item; Space : Table(1 .. Size); Index : Natural := 0; procedure Push(E : in Item) is begin if Index >= Size then raise Overflow; end if; Index := Index + 1; Space(Index) := E; end Push; procedure Pop(E : out Item) is begin if Index = 0 then raise Underflow; end if; E := Space(Index); Index := Index - 1; end Pop; end Generic_Stack;
Далее пакет Generic_Stack может быть конкретизирован. Если необходимо конкретизировать новый пакет с именем``Stack_Int'', который содержит 200 элементов Integer, то это можно сделать следующим образом:
package Stack_Int is new Generic_Stack(Size => 200, Item => Integer);
``Size =>'' и ``Item =>'' необязательны; их можно опустить, если это необходимо, хотя если этого не делать, код будет понятнее. Теперь запись ("Push") новой величины типа Integer в стек (Stack_Int) можно осуществить следующим образом:
Stack_Int.Push(7);
Что является формальными параметрами для настраиваемого пакета Stack ?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 11 |
---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s11s3.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк