comp.lang.ada
 help / color / mirror / Atom feed
From: Adam Beneschan <adam@irvine.com>
Subject: Re: Generic Zero Length Array
Date: Fri, 22 Feb 2008 15:01:02 -0800 (PST)
Date: 2008-02-22T15:01:02-08:00	[thread overview]
Message-ID: <7cd05c2a-d67a-4623-a9dc-67e357877f48@e6g2000prf.googlegroups.com> (raw)
In-Reply-To: fpndva$q2f$1@jacob-sparre.dk

On Feb 22, 11:25 am, "Randy Brukardt" <ra...@rrsoftware.com> wrote:
> "Egil Høvik" <egilho...@hotmail.com> wrote in message
>
> news:2446841a-8bb0-46bc-94ed-099e4e0ca74c@k2g2000hse.googlegroups.com...
>
>
>
> >On Feb 22, 2:31 pm, shaunpatter...@gmail.com wrote:
> >> I have a bit of legacy code in my system that I am trying to remove
> >> all warnings from.
>
> >> The package is a generic -- with:
>
> >> type Element is (<>);
> >> type Element_List is array (Indexing range <>) of Element;
>
> >> I have been stumped by one compiler warning where one of the functions
> >> needs to return a zero-length empty generic array:
> ...
> >A new generic parameter Null_Element would do the trick, but
> >that means changing code wherever the generic is used...
>
> >type Element is (<>);
> >type Element_List is array (Indexing range <>) of Element;
> >Null_Element : Element;
>
> >then you could rewrite the above code to
>
> >if Error_Condition then
> >  return Element_List'(Indexing'First..Indexing'First-1 => Null_Element);
> >end if;
>
> If you are not limited to Ada 95, you can use the <> here, and then you
> don't need the extra generic parameter:
>
> if Error_Condition then
>   return Element_List'(Indexing'First..Indexing'First-1 => <>);
> end if;

Drat, I wish I'd thought of that.  Yes, this seems best.

Way back before Ada 95, someone made a proposed language array to add
a "null array" aggregate to the language, so that you could write an
aggregate to represent a zero-element array without needing a fake
value for the elements.  I thought this was a great idea and could
never understand why it wasn't adopted.  It would have solved the
problem here.  But the <> syntax of Ada 2005 obviates the need for
something like that.  I don't think we need "null record" (i.e. in
aggregates) any more either, although certainly nobody is going to
suggest removing it.

[Actually, there's one case where you still can't specify a null array
aggregate, and that's where the index type is either "mod 1" or an
enumeration type with one value:

         type Enum is (This_One);
         type Arr is array (Enum range <>) of Anything;

Now go ahead and try to specify a zero-element array aggregate of type
Arr.  You can't.  But this is a pretty pathological case so it's not
worth trying to change the language for it.]

                                  -- Adam




  reply	other threads:[~2008-02-22 23:01 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-22 13:31 Generic Zero Length Array shaunpatterson
2008-02-22 13:53 ` Egil Høvik
2008-02-22 13:55   ` shaunpatterson
2008-02-22 14:11     ` Georg Bauhaus
2008-02-22 19:25   ` Randy Brukardt
2008-02-22 19:25   ` Randy Brukardt
2008-02-22 19:25   ` Randy Brukardt
2008-02-22 23:01     ` Adam Beneschan [this message]
2008-02-23  9:30       ` Dmitry A. Kazakov
2008-02-23 14:27       ` Robert A Duff
2008-02-23 16:16         ` Dmitry A. Kazakov
2008-02-25 16:41         ` Adam Beneschan
2008-02-25 19:14           ` Robert A Duff
2008-02-22 14:23 ` Stefan Lucks
2008-02-22 16:52   ` Adam Beneschan
2008-02-22 14:26 ` Robert A Duff
2008-02-22 15:22 ` Stefan Bellon
2008-02-22 23:03   ` Adam Beneschan
2008-02-23 10:19     ` Stefan Bellon
replies disabled

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