comp.lang.ada
 help / color / mirror / Atom feed
From: Richard Riehle <richard@adaworks.com>
Subject: Re: HELP !  Problems with  Get and Put in Generic Procedure
Date: Mon, 14 Jul 2003 18:40:11 -0700
Date: 2003-07-15T01:36:45+00:00	[thread overview]
Message-ID: <3F135B7B.AE51E991@adaworks.com> (raw)
In-Reply-To: 9f383bcd.0307101401.60625c77@posting.google.com

I am including Tanya's message at the end of this reply.

It is usually a design error to include the I/O capabilities in
a generic  component.  It is a matter of loose coupling.   Separate
out the I/O portion of your design from the generic component.  Add
iterators to the component if you to traverse the entire entity.  You
can also add a current_item indicator to your component so you will
be able to write a method to fill and clear the array one item at a
time with an external procedure.

Richard Riehle

----------------------------------------------------------------------------

Tanya wrote:

> I am having problems compiling a program that uses a generic GetData
> procedure.  Inside this procedure I try to Get data from the keyboard
> and store into an array.  My generic specification and body both
> compile fine...but when I try to instantiate the generic procedure in
> the main driver, I get errors:
> "procedure or entry name expected" and "expect valid subprogram name
> in renaming".  What am I doing wrong ??  I can't find any examples of
> how to do this.  Any help would be greatly appreciated !!!  Thanks !
>
> Here is my program:
>
> (generic spec file)  ******************************************
>
>  GENERIC
>
>       TYPE ElementType IS PRIVATE;         -- any nonlimited type
>       TYPE IndexType IS ( <> );            -- any discrete type for
>                                            -- index value
>       TYPE ArrayType IS ARRAY (IndexType RANGE <>) OF ElementType;
>
>       WITH PROCEDURE Read (Item : IN ElementType);
>
>    PROCEDURE Get_Array_Generic (List : IN OUT ArrayType);
>    -- Input : Array type and input file stream.
>    -- Action: Will read in elements and store in array.
>    -- Output: Array filled with elements.
>
> (generic body file)  ********************************************
>
> PROCEDURE Get_Array_Generic (List : IN OUT ArrayType) IS
>    -------------------------------------------------------------------
>    -- Input : Array type and input file stream.
>    -- Action: Will read in elements and store in array.
>    -- Output: Array filled with elements.
>    -------------------------------------------------------------------
>
>       Index : IndexType;
>       Element : ElementType;
>
>    BEGIN  -- Get_Array_Generic
>
>       Index := List'Last;               -- initialize array index to
>                                         -- first subscript
>
>       FOR Index IN List'RANGE LOOP
>
>             Read (Item => Element);        -- read elements into array
>
>          -- store data into the array
>
>             List (Index) := Element;
>
>          END LOOP;
>
>    END Get_Array_Generic;
>
> (Main driver )  ********************************************
>
> WITH Ada.Text_IO;
> USE Ada.Text_IO;
> WITH Ada.Integer_Text_IO;
> USE Ada.Integer_Text_IO;
>
> PROCEDURE Generic_Test IS
> ----------------------------------------------------------------------
> -- Input : None
> -- Action:
> -- Output: None
> ----------------------------------------------------------------------
>
>    MaxInt : CONSTANT Integer := 10;
>    SUBTYPE IntegerRange IS Integer RANGE 1..MaxInt;
>    TYPE Integer_Array IS ARRAY (IntegerRange RANGE <>) OF Integer;
>
>
>   ***  This is where I am having problems (in the instantiation)  ***
>
>    PROCEDURE GetIntegers IS NEW Get_Array_Generic
>       (ElementType => Integer,
>        IndexType => IntegerRange,
>        ArrayType => Integer_Array,
>        Read => Ada.Integer_Text_IO);
>
>
>    IntArray : Integer_Array(IntegerRange);
>
>    TargetInteger : Integer;
>
> BEGIN  -- Generic_Test
>
>    Ada.Text_IO.Put (Item => "Please enter ");
>    Ada.Integer_Text_IO.Put (Item => MaxInt, Width => 2);
>    Ada.Text_IO.Put (Item => " integer values: ");
>    Ada.Text_IO.New_Line;
>
>    GetIntegers (List => IntArray);
>
> END Generic_Test;







      parent reply	other threads:[~2003-07-15  1:40 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-10 22:01 HELP ! Problems with Get and Put in Generic Procedure Tanya
2003-07-10 22:37 ` Robert I. Eachus
2003-07-11  1:59 ` Jeffrey Carter
2003-07-15  1:40 ` Richard Riehle [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox