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=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 2002:a37:a88e:: with SMTP id r136mr1388871qke.12.1585685159191; Tue, 31 Mar 2020 13:05:59 -0700 (PDT) X-Received: by 2002:a9d:82a:: with SMTP id 39mr4464109oty.82.1585685158910; Tue, 31 Mar 2020 13:05:58 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!feeder.eternal-september.org!news.gegeweb.eu!gegeweb.org!usenet-fr.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Tue, 31 Mar 2020 13:05:58 -0700 (PDT) In-Reply-To: <6c2c0e35-af07-4169-8be5-464ec7fd0fd5@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=146.5.2.231; posting-account=lJ3JNwoAAAAQfH3VV9vttJLkThaxtTfC NNTP-Posting-Host: 146.5.2.231 References: <6c2c0e35-af07-4169-8be5-464ec7fd0fd5@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <920be1a1-0b55-433b-8d9d-c9737198fb8f@googlegroups.com> Subject: Re: GNAT vs Matlab - operation on multidimensional complex matrices From: Shark8 Injection-Date: Tue, 31 Mar 2020 20:05:59 +0000 Content-Type: text/plain; charset="UTF-8" Xref: reader01.eternal-september.org comp.lang.ada:58263 Date: 2020-03-31T13:05:58-07:00 List-Id: IIRC, one method to ensure proper cleanup w/o using Unchecked Deallocation is to use Generics: Generic Type T is private; Type IndexA is (<>); Type IndexB is (<>); Type IndexC is (<>); Type Cubic is Array(IndexA, IndexB, indexC) of T; Default : in T; Package Test_Data is Type Access_Cubic is not null access all Cubic; Access_Data : Constant Access_Cubic := new Cubic'(others => (others => (others => Default))); Data : Cubic renames Access_Data.all; End Test_Data; Now you can do something like: COMPLEX_CUBE_TEST: Declare Package Test_Set is new Test_Data( T => Complex, IndexA => Channel, IndexB => Angle, IndexC => Range_T, Cubic => tCubeComplex, Default => (Re => 1.0, Im => 1.0) ); Complex_Cube : tCubeComplex renames Test_Set.Data; SComplex : Complex; Begin TIO.Put_Line("Complex cube"); TIO.Put_Line("Complex type size is:" & Integer'Image(Complex'Size)); SpeedSumComplexCube( Mtx => Complex_Cube, S => SComplex, Iterations => NumIteration ); TIO.Put("Sum is:"); CTIO.Put(SComplex); TIO.New_Line; End COMPLEX_CUBE_TEST; and upon exit of the COMPLEX_CUBE_TEST block your test-data is cleaned up when Test_Set is destroyed.