甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション11.3 ジェネリック・パッケージの例

Adaチュートリアル セクション11.3 ジェネリック・パッケージの例

E-mail Print PDF

セクション 11.3 - ジェネリック・パッケージの例

では、ジェネリック・パッケージの例を見ていきましょう。ジェネリック・パッケージのこの例は、Ada 95 RM section 12.8からそのまま持ってきたものです。

ここでは、プッシュとポップの操作をするスタックのためのジェネリック・パッケージを作成したい場合を考えてみましょう。ここでは、このようなスタックを定義するための一つの方法を掲載します。私たちはいくつかの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パッケージを実体化することが可能となります。もしプログラマーが200の整数を持つ「Stack_Int」という名前の新しいパッケージを実体化したいのなら、次のようにします。

  package Stack_Int is new Generic_Stack(Size => 200, Item => Integer);

「Size =>」と「Item =>」はオプションです。必要ならばプログラマーはこれらを省略することが出来ますが、これらを含めておいたほうがコードが明確になります。 そこの宣言が有効となった後に、プログラマーは新しい整数をStack_Intにプッシュすることが出来るようになります。

  Stack_Int.Push(7);

出典: http://www.adahome.com/Tutorials/Lovelace/s11s3.htm

Last Updated on Sunday, 01 April 2012 15:17  

ニュース速報

さっきの件だが、資料の候補をあげて、増田さんに依頼メールを送った。

うまく、話がつながるとよいのだが。さて、どうなることやら。