From: Jeffrey Carter <spam@spam.com>
Subject: Re: generics in Ada 83
Date: Tue, 13 Sep 2005 15:16:04 -0700
Date: 2005-09-13T15:16:04-07:00 [thread overview]
Message-ID: <FcIVe.5$Fv6.3@dfw-service2.ext.ray.com> (raw)
In-Reply-To: <1126637616.954302.85630@f14g2000cwb.googlegroups.com>
REH wrote:
>
> Well I guess there is always a better way. Here is my actual problem.
> My team maintains a set of middleware services for various
> applications. We have a Client/Server package as part of this. It
> defines a header type for transmitting messages across TCP/IP. One
> application group has requested the ability to define their own header.
> There are certain pieces of information our software needs to know
> from the header, such as the message length. So I re-defined the
> package thus:
>
> generic
> type Header_Type is private;
>
> with function Get_Length(Header : in Header_Type) return Integer;
>
> with procedure Set_Length(Header : in out Header_Type;
> Length : in Integer);
> package Client_Server;
>
> This works fine for using most of the services in the package. But the
> thorn is the package provides a "synchronous send" feature that does a
> request/response type of transaction over a network. This requires
> several more fields to be present in the header and accessed at various
> times. Thus, I have added get and set subprograms for those. But I
> don't want a client application that does not use this feature to have
> to define stubs for all these. Which is where I am tried to find a way
> to "default" them.
Then you're in good shape. 1st, define your complete generic for using
the synchronous send feature:
generic -- Client_Server_With_Synchronous_Send
type Header_Type is private;
-- many formal subprograms
package Client_Server_With_Synchronous_Send is
procedure Op (Header : in out Header_Type);
...
end Client_Server_With_Synchronous_Send;
then define your shorter generic:
generic -- Client_Server
type Header_Type is private;
with function Get_Length(Header : in Header_Type) return Integer;
with procedure Set_Length(Header : in out Header_Type;
Length : in Integer);
package Client_Server is
-- presumably a smaller set of operations than
-- Client_Server_With_Synchronous_Send
procedure Op (Header : in out Header_Type);
...
end Client_Server;
Now, the body of Client_Server instantiates
Client_Server_With_Synchronous_Send and implements its operations in
terms of Client_Server_With_Synchronous_Send's operations:
with Client_Server_With_Synchronous_Send;
package body Client_Server is
-- Define stub subprograms for instantiation here.
package Synchronous is new Client_Server_With_Synchronous_Send
(Header_Type => Header_Type,
Get_Length => Get_Length,
Set_Length => Set_Length, ...);
procedure Op (Header : in out Header_Type) renames Synchronous.Op;
...
end Client_Server;
--
Jeffrey Carter
"Now go away or I shall taunt you a second time."
Monty Python and the Holy Grail
E-mail: jeffrey_r_carter-nr [commercial-at]
raytheon [period | full stop] com
next prev parent reply other threads:[~2005-09-13 22:16 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-13 13:26 generics in Ada 83 REH
2005-09-13 13:30 ` Georg Bauhaus
2005-09-13 16:25 ` REH
2005-09-13 19:23 ` Georg Bauhaus
2005-09-13 13:50 ` Martin Dowie
2005-09-13 16:30 ` REH
2005-09-13 16:41 ` Martin Dowie
2005-09-13 18:43 ` REH
2005-09-13 19:37 ` Ludovic Brenta
2005-09-13 19:53 ` REH
2005-09-13 16:56 ` Jeffrey Carter
2005-09-13 18:53 ` REH
2005-09-13 22:16 ` Jeffrey Carter [this message]
2005-09-13 22:44 ` REH
2005-09-14 8:14 ` Jean-Pierre Rosen
2005-09-14 12:40 ` REH
2005-09-14 13:15 ` Hyman Rosen
2005-09-14 14:08 ` Jean-Pierre Rosen
2005-09-14 15:23 ` Hyman Rosen
2005-09-14 15:41 ` Robert A Duff
2005-09-19 17:58 ` REH
2005-09-20 4:58 ` Hyman Rosen
2005-09-20 12:36 ` REH
2005-09-20 1:34 ` adaworks
2005-09-20 4:14 ` Jim Rogers
2005-09-21 22:58 ` Robert A Duff
2005-09-22 15:18 ` adaworks
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox