From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00,LOTS_OF_MONEY, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,602b7f606b0d64e2 X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2003-01-10 18:34:44 PST Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!logbridge.uoregon.edu!arclight.uoregon.edu!wn14feed!wn12feed!worldnet.att.net!bgtnsc05-news.ops.worldnet.att.net.POSTED!not-for-mail Reply-To: "James S. Rogers" From: "James S. Rogers" Newsgroups: comp.lang.ada References: Subject: Re: Private discrete type as index X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 Message-ID: <8pLT9.105190$hK4.8530896@bgtnsc05-news.ops.worldnet.att.net> Date: Sat, 11 Jan 2003 02:34:44 GMT NNTP-Posting-Host: 12.86.33.89 X-Complaints-To: abuse@worldnet.att.net X-Trace: bgtnsc05-news.ops.worldnet.att.net 1042252484 12.86.33.89 (Sat, 11 Jan 2003 02:34:44 GMT) NNTP-Posting-Date: Sat, 11 Jan 2003 02:34:44 GMT Organization: AT&T Worldnet Xref: archiver1.google.com comp.lang.ada:32900 Date: 2003-01-11T02:34:44+00:00 List-Id: "AG" 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