comp.lang.ada
 help / color / mirror / Atom feed
* RE: Generic Formal Parameter for a Task Type
@ 2001-03-09  4:20 Beard, Frank
  2001-03-09  5:24 ` James Rogers
  0 siblings, 1 reply; 18+ messages in thread
From: Beard, Frank @ 2001-03-09  4:20 UTC (permalink / raw)
  To: 'comp.lang.ada@ada.eu.org'

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.

Frank

-----Original Message-----
From: James Rogers [mailto:jimmaureenrogers@worldnet.att.net]
Sent: Thursday, March 08, 2001 10:35 PM
To: comp.lang.ada@ada.eu.org
Subject: Re: Generic Formal Parameter for a Task Type


The problem with using a formal limited private type is in the
need to determine if one of the tasks being monitored has terminated.

The 'Terminated attribute only applies to Task objects, either
directly, or implicitly through an access to the task object.

A limited private type is too general. It is not viewed within the
generic as a task type. I know. I tried this first.

The only way to make such a system work is to creat a limited record
type containing an access to task type. You could then create a
function taking a parameter of the record type, returning the proper
response from the 'Terminated attribute.

Although this is easily done, it is not what I wanted. I had hoped
to be able to create a generic package directly usable with most
any task type.

This appears to be one problem not solvable in Ada, yet easily
solved in Java. 

I would like to add a generic task type formal parameter to the
list of improvements for the next version of Ada.

Jim Rogers
Colorado Springs, Colorado USA

Pat Rogers wrote:
> 
> "James Rogers" <jimmaureenrogers@worldnet.att.net> wrote in message
> news:3AA80A68.A2C8B042@worldnet.att.net...
> > I have looked through "Ada as a Second Language" and the Ada Reference
> > manual. I cannot find any proper form to pass a task type as a
> > generic formal parameter.
> >
> > Is there a generic formal parameter form for this purpose?
> >
> > I wanted to create a generic package I call Task_Governor. This
> > package would control the number of tasks one could create at once.
> > The idea is that task resources may be limited. This package would
> > allow someone to limit the number of tasks to a maximum specified.
> > An instantiation of the package would monitor the tasks it started
> > and allow another to be started when one of the tasks terminated.
> >
> > My problem is that I cannot figure out how to specify a task type
> > as a generic formal parameter.
> 
> There is no generic formal task type; you have to use a limited private
> formal.
> 
> ---
> Patrick Rogers                       Consulting and Training in:
> http://www.classwide.com        Real-Time/OO Languages
> progers@classwide.com          Hard Deadline Schedulability Analysis
> (281)648-3165                          Software Fault Tolerance
_______________________________________________
comp.lang.ada mailing list
comp.lang.ada@ada.eu.org
http://ada.eu.org/mailman/listinfo/comp.lang.ada




^ permalink raw reply	[flat|nested] 18+ messages in thread
* RE: Generic Formal Parameter for a Task Type
@ 2001-03-09 22:53 Beard, Frank
  0 siblings, 0 replies; 18+ messages in thread
From: Beard, Frank @ 2001-03-09 22:53 UTC (permalink / raw)
  To: 'comp.lang.ada@ada.eu.org'


-----Original Message-----
From: Tucker Taft [mailto:stt@averstar.com]

> 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...

Good idea.  It didn't cross my mind. I still think too much in Ada 83 terms.

> 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;".

Yeah!  Whatever you said.




^ permalink raw reply	[flat|nested] 18+ messages in thread
* Generic Formal Parameter for a Task Type
@ 2001-03-08 22:38 James Rogers
  2001-03-08 23:27 ` Marin David Condic
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: James Rogers @ 2001-03-08 22:38 UTC (permalink / raw)


I have looked through "Ada as a Second Language" and the Ada Reference
manual. I cannot find any proper form to pass a task type as a
generic formal parameter.

Is there a generic formal parameter form for this purpose?

I wanted to create a generic package I call Task_Governor. This
package would control the number of tasks one could create at once.
The idea is that task resources may be limited. This package would
allow someone to limit the number of tasks to a maximum specified.
An instantiation of the package would monitor the tasks it started
and allow another to be started when one of the tasks terminated.

My problem is that I cannot figure out how to specify a task type
as a generic formal parameter.

Any hints?

Jim Rogers
Colorado Springs, Colorado USA



^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2001-03-12 16:14 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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.
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

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