comp.lang.ada
 help / color / mirror / Atom feed
From: "James S. Rogers" <jimmaureenrogers@worldnet.att.net>
Subject: Re: Private discrete type as index
Date: Sat, 11 Jan 2003 02:34:44 GMT
Date: 2003-01-11T02:34:44+00:00	[thread overview]
Message-ID: <8pLT9.105190$hK4.8530896@bgtnsc05-news.ops.worldnet.att.net> (raw)
In-Reply-To: RKJT9.21144$F63.395685@news.xtra.co.nz

"AG" <ang@xtra.co.nz> wrote in message
news:RKJT9.21144$F63.395685@news.xtra.co.nz...
> Hi all,
>
> Guess I have a question that I'm a bit puzzled about.
> Consider the boiled-down code snippet:
>
> package test is
>   type x is limited private;
>   type test is array(x) of boolean;
> private
>     type x is new boolean;
> end test;
>
> Trying to compile that fails on GNAT
> with "Discrete type required" error.
> Can't blame it, of course, since it's
> correct according to LRM. But...
>
> the obvious intention was to provide
> a set of "+/-" operations etc on the
> limited type (which are not trivial)
> and prevent the out-of-package clients
> from messing with the index.
>
> Since the compiler obviously knows
> the implementation details, why not?
>
> Of course, it can be implemented as
> an iterator, but what's wrong with
> the example as written? After all,
> the client modules can't use that
> index other than through the type
> and operation provided by the
> package. Compiler/linker sure knows
> what the type is. So, why not?

At the point of declaration of the array type the index type
is not specified as a discrete type. The array type is not private.
The nature of the index type must be visible within the scope of
the declaration of the array type.

You can try an approach like the following, which does compile:

package Type_Definition is
   type Index_Type is limited private;
private
   type Index_Type is new Integer range 1..10;
end Type_Definition;

package Type_Definition.Collection is
   type Collection is limited private;
private
   type Collection is array(Index_Type) of Boolean;
end Type_Definition.Collection;

Of course, each package would also have primitive subprograms
to manipulate the values.

Note in the example above, the array is defined in the private
part of the child package, which has visibility to the private part
of the parent package.

Jim Rogers





  reply	other threads:[~2003-01-11  2:34 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-01-11 21:42 Private discrete type as index AG
2003-01-11  2:34 ` James S. Rogers [this message]
2003-01-12  0:09   ` AG
2003-01-11  7:16     ` James S. Rogers
2003-01-12  5:47       ` AG
2003-01-11 12:22         ` Dmitry A. Kazakov
2003-01-11 14:36         ` Charles H. Sampson
2003-01-12 19:23 ` Keith Thompson
2003-01-12 19:48   ` tmoran
2003-01-15 16:45     ` Dmitry A. Kazakov
2003-01-18  6:24       ` AG
2003-01-17 14:14         ` tmoran
2003-01-19  1:38           ` AG
2003-01-18  8:36             ` tmoran
2003-01-19  6:06               ` AG
2003-01-17 16:28         ` Dmitry A. Kazakov
replies disabled

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