comp.lang.ada
 help / color / mirror / Atom feed
From: "Robert C. Leif, Ph.D." <rleif@rleif.com>
To: <comp.lang.ada@ada.eu.org>
Subject: RE: Generic Formal Parameter for a Task Type
Date: Fri, 9 Mar 2001 16:14:49 -0800
Date: 2001-03-09T16:14:49-08:00	[thread overview]
Message-ID: <mailman.984183487.31444.comp.lang.ada@ada.eu.org> (raw)
In-Reply-To: <3AA95037.77EFEBFA@averstar.com>

From: Bob Leif
To: Tucker Taft et al.
You wrote:
"If you wanted to avoid generics, you could define an abstract limited
tagged type (say "Has_Task") which had various (abstract) primitive
operations, including  at least a "Task_ID" function.  You would then
extend from this type by adding a component of the task type of interest
(and of course override the abstract primitives as appropriate)."

Can you include the "Has_Task" in a generic package; or are the two
approaches mutually exclusive for tasks?

-----Original Message-----
From: comp.lang.ada-admin@ada.eu.org
[mailto:comp.lang.ada-admin@ada.eu.org]On Behalf Of Tucker Taft
Sent: Friday, March 09, 2001 1:51 PM
To: comp.lang.ada@ada.eu.org
Subject: Re: Generic Formal Parameter for a Task Type


James Rogers wrote:
>
> "Beard, Frank" wrote:
> >
> > Why can't you have something like the following:
> >
> >    generic
> >
> >       type Item is limited private;
> >       with function Terminated(the_Item : Item) return boolean;
> >
> >    package Xyz is
> >
> >       procedure Monitor(the_Item : Item);
> >       ...
> >
> >    end Xyz;
> >
> > You instantiate the package with the task type and supply the
> > Terminated function, which would look something like:
> >
> >    function Terminated(the_Task : Task_Type) return boolean is
> >    begin
> >       return the_Task'terminated;
> >    end Terminated;
> >
> > So, inside your generic where you are monitoring the task, you
> > call the supplied function.  Of course, you would have to supply
> > a function for every task attribute you wanted to check.  I know
> > it's not as clean as using the attribute directly, but it's not
> > that bad.
> >
> > I haven't tried to test this but the spec part compiles and it
> > seems like it should work, but I might be missing something.
>
> Yep. That works. Thanks for the inspiration.
>
> This is still a bit nastier than I hoped for. As you say, it requires
> a function for each attribute. ...

Why not have a formal function that returns the Task_ID, rather
than 'Terminated?  That way, you can use the Ada.Task_Identification
and Ada.Task_Attributes packages to get whatever else you need from the
task, including task attributes...

If you wanted to avoid generics, you could define an abstract limited
tagged type (say "Has_Task") which had various (abstract) primitive
operations, including  at least a "Task_ID" function.  You would then
extend from this type by adding a component of the task type of interest
(and of course override the abstract primitives as appropriate).
You could then manipulate objects of type Has_Task'Class, or references
there-to, in a "Java"-like way ;-).  You could also pass in any
extension of Has_Task to a generic with a formal tagged derived type
of "type My_Task is new Has_Task with private;".

The possibilities are endless...


> Jim Rogers
> Colorado Springs, Colorado USA

--
-Tucker Taft   stt@avercom.net   http://www.averstar.com/~stt/
Chief Technology Officer, AverCom Corporation (A Titan Company)
Burlington, MA  USA (AverCom was formerly the Commercial Division of
AverStar:
http://www.averstar.com/services/ebusiness_applications.html)





  reply	other threads:[~2001-03-10  0:14 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-03-09  4:20 Generic Formal Parameter for a Task Type Beard, Frank
2001-03-09  5:24 ` James Rogers
2001-03-09 21:50   ` Tucker Taft
2001-03-10  0:14     ` Robert C. Leif, Ph.D. [this message]
2001-03-12 16:14       ` Tucker Taft
2001-03-10  3:25     ` James Rogers
2001-03-12 15:33       ` Stephen Leake
2001-03-12 16:11       ` Tucker Taft
  -- strict thread matches above, loose matches on Subject: below --
2001-03-09 22:53 Beard, Frank
2001-03-08 22:38 James Rogers
2001-03-08 23:27 ` Marin David Condic
2001-03-09  0:00 ` Robert A Duff
2001-03-09  0:16 ` Pat Rogers
2001-03-09  3:34   ` James Rogers
2001-03-09  4:26     ` Pat Rogers
2001-03-09  4:58       ` James Rogers
2001-03-09 15:50     ` Stephen Leake
2001-03-10  3:15       ` James Rogers
replies disabled

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