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
next prev parent 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