comp.lang.ada
 help / color / mirror / Atom feed
From: L Dries <bertus.dries@planet.nl>
To: joakimds@kth.se
Subject: Re: Anonymous array not allowed as components
Date: Fri, 1 Nov 2019 11:00:21 +0100
Date: 2019-11-01T11:00:21+01:00	[thread overview]
Message-ID: <f029d95e-76ee-72e2-62ea-2a72ab8d886b@planet.nl> (raw)
In-Reply-To: <1a0b573e-11af-4e4c-9ccf-9a757ad8d970@googlegroups.com>

Op 1-11-2019 om 10:34 schreef joakimds@kth.se:
> Den fredag 1 november 2019 kl. 09:32:42 UTC+1 skrev L Dries:
>> I have an need for an array of Unbounded_Strings in which i define the
>> elements.
>>
>> I declared it as:
>>
>>         Debug_Proc   : array (1 .. nr_Proc) of Unbounded_String :=
>>           (Debug_Proc(Lan),
>>            To_Unbounded_String("Only"),
>>            To_Unbounded_String("Empty_Buffer"),
>>            ...
>>            etc.
>>
>> Then I got the message:
>>
>> 65:22 Anonymous array not allowed as components
>> This results i a position just before "array"
>>
>> The value nr_Proc is defined in another package.
>> Debug_Proc(Lan) is an Unbounded String
>> I tried to replace nr_Proc by a value. The same result.
>> I tried to replave the value of the first Unbounded String by "--",
>> again no result
>> I tried set it as an constant array, also no result.
>>
>> What do I do wrong?
>> -- 
>> L. Dries
> 
> Hello L. Dries,
> 
> Unbounded_String is well-known for being "slow" because it does unnecessary heap-allocations. To avoid performance penalty the XString type has been defined in the GNATColl library. The point is that one should have very good reasons to use Unbound_String in one's application and not use it needlessly.
> 
> In your case what you want is to map each integer in an interval to a specific String. If that's the case I recommend taking advantage of expression functions and case statements introduced in Ada 2012:
> 
> type Index is new Integer range 1 .. nr_Proc;
> 
> function Debug_Proc (I : Index) return String is
> (case I is
>    when 1 => "Only",
>    when 2 => "Empty_Buffer", ...);
> 
> or maybe it is:
> 
> function Debug_Proc (I : Index) return String is
> ((case I is
>    when 1 => "Only",
>    when 2 => "Empty_Buffer", ...));
> 
> The compiler will tell you.
> 
> Best regards,
> Joakim
> 

I will look nto that possibility, but for this project it is too late 
because changing would mean almost completely rewriting the program.

-- 
L. Dries

  reply	other threads:[~2019-11-01 10:00 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-01  8:32 Anonymous array not allowed as components L Dries
2019-11-01  9:34 ` joakimds
2019-11-01 10:00   ` L Dries [this message]
2019-11-01 10:47   ` Jeffrey R. Carter
2019-11-01  9:34 ` AdaMagica
2019-11-01  9:56   ` L Dries
2019-11-01 10:33   ` L Dries
2019-11-01 15:55     ` AdaMagica
2019-11-01 10:41 ` Jeffrey R. Carter
replies disabled

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