From: Keith Thompson <kst-u@mib.org>
Subject: Re: How can I create an empty array of a generic type?
Date: Fri, 12 Jul 2019 21:11:13 -0700
Date: 2019-07-12T21:11:13-07:00 [thread overview]
Message-ID: <lnftnaa80u.fsf@kst-u.example.com> (raw)
In-Reply-To: 5f53e122-6b99-48ca-b6cc-4ae43c0a2221@googlegroups.com
b.mcguinness747@gmail.com writes:
> I have a generic package
>
> generic
> type Element_Type is private;
> type Key_Component_Type is private;
> with function "<" (Left, Right : Key_Component_Type) return Boolean is <>;
> with function "=" (Left, Right : Element_Type) return Boolean is <>;
> package Ternary_Trees is
> ...
> private
> ...
> Empty_Key : constant Key_Type(1..0) := (others => Key_Component_Type'First);
> ...
> end Ternary_Trees;
>
> When I try to compile the package, I get an error message:
>
> ternary_trees.ads:77:54: prefix for "First" attribute may not be private type
You haven't shown us the declaration for Key_Type. Presumably it's an
array of Key_Component_Type.
This compiles:
generic
type Element_Type is private;
type Key_Component_Type is private;
with function "<" (Left, Right : Key_Component_Type) return Boolean is <>;
with function "=" (Left, Right : Element_Type) return Boolean is <>;
package Ternary_Trees is
type Key_Type is array(Positive range <>) of Key_Component_Type;
private
Dummy: Key_Component_Type;
Empty_Key : constant Key_Type(1..0) := (others => Dummy);
end Ternary_Trees;
The Dummy value is a bit ugly. An alternative is to require the
instantiator to provide a value:
generic
type Element_Type is private;
type Key_Component_Type is private;
Default_Key_Component: Key_Component_Type;
with function "<" (Left, Right : Key_Component_Type) return Boolean is <>;
with function "=" (Left, Right : Element_Type) return Boolean is <>;
package Ternary_Trees is
type Key_Type is array(Positive range <>) of Key_Component_Type;
private
Dummy: Key_Component_Type;
Empty_Key : constant Key_Type(1..0) := (others => Default_Key_Component);
end Ternary_Trees;
--
Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.net/~kst>
Will write code for food.
void Void(void) { Void(); } /* The recursive call of the void */
next prev parent reply other threads:[~2019-07-13 4:11 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-13 3:36 How can I create an empty array of a generic type? b.mcguinness747
2019-07-13 4:11 ` Keith Thompson [this message]
2019-07-13 5:24 ` J-P. Rosen
2019-07-13 21:19 ` Keith Thompson
2019-07-14 11:09 ` reinert
2019-07-14 11:15 ` reinert
2019-07-14 11:27 ` Jeffrey R. Carter
2019-07-14 12:49 ` J-P. Rosen
2019-07-13 21:02 ` b.mcguinness747
2019-07-14 16:41 ` bj.mooremr
2019-10-16 2:03 ` Andrew Shvets
2019-10-16 4:49 ` Egil H H
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox