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.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!news.glorb.com!peer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!post01.iad.highwinds-media.com!fx27.iad.POSTED!not-for-mail From: Shark8 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:30.0) Gecko/20100101 Thunderbird/30.0a1 MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: Pointer to instance of indefinite array? References: <892c6798-489d-400a-bb9a-7a14605c493f@googlegroups.com> <58a951df-217b-48ee-bd0b-f9953f5b622b@googlegroups.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Message-ID: X-Complaints-To: abuse@teranews.com NNTP-Posting-Date: Wed, 13 Aug 2014 17:58:41 UTC Organization: TeraNews.com Date: Wed, 13 Aug 2014 11:58:37 -0600 X-Received-Bytes: 2955 X-Received-Body-CRC: 1563829215 Xref: news.eternal-september.org comp.lang.ada:21724 Date: 2014-08-13T11:58:37-06:00 List-Id: On 13-Aug-14 10:06, NiGHTS wrote: > Of course this will be via an entry to a protected object but > those details aside how can I construct a constrained array > of indefinite arrays? For that you *do* need accesses, this is because the compiler needs to know the size of the elements. Of course this implementation detail can be hidden away from clients: Package Test_UCA is Type Positive_Array is Array (Positive Range <>) of Positive; Type Array_Array(Len : Positive) is Private; -- Obj's Entries should be used as follows: -- O.Test( P ); -- Saves P into J. -- ... -- O.Result_Length( Temp ); -- Gets the length of J. -- declare -- New_Array : Positive_Array(1..Temp); -- begin -- O.Result( New_Array ); -- Copies J into New_Array & clears J. -- --... (Whatever processing you need.) -- end; Protected type Obj(Len : Positive) is Entry Test ( P : Positive_Array ); Entry Result_Length ( Len : out Positive ); Entry Result ( R : out Positive_Array ); Private J : access Positive_Array; K : Array_Array(Len); End Obj; Private Type Internal_Array_Array is Array (Positive Range <>) of not null access Positive_Array; Type Array_Array(Len : Positive) is record Data : Internal_Array_Array(1..Len); end record; Default : Constant Internal_Array_Array:= ( 1..0 => New Positive_Array'(1,1) ); End Test_UCA; Package Body Test_UCA is Protected Body Obj is Entry Test ( P : Positive_Array ) when True is Begin J:= new Positive_Array'(P); End Test; Entry Result_Length ( Len : out Positive ) when J /= null is Begin Len:= J'Length; End Result_Length; Entry Result ( R : out Positive_Array ) when J /= null is Begin R:= J.All; J:= Null; End Result; End Obj; End Test_UCA;