comp.lang.ada
 help / color / mirror / Atom feed
From: "Hibou57 (Yannick Duchêne)" <yannick_duchene@yahoo.fr>
Subject: Re: Indirect visibility of private part in child packages
Date: Thu, 4 Jun 2009 04:47:26 -0700 (PDT)
Date: 2009-06-04T04:47:26-07:00	[thread overview]
Message-ID: <bc225421-978e-41f8-8a01-d370e5236673@h11g2000yqb.googlegroups.com> (raw)
In-Reply-To: 5854cebc-55a9-469d-88bd-86b4704f8689@c19g2000yqc.googlegroups.com

Bonjour Ludovic, and thanks for your reply :)

On 4 juin, 09:50, Ludovic Brenta <ludo...@ludovic-brenta.org> wrote:
> Maybe you can solve your problem like this:
>
> package body P1.P3 is
>    procedure A_Primitive (Item : out T3_Type) is
>    begin
>       T1_Type (Item).Low_Level_Data := ...;
>    end A_Primitive;
> end P1.P3;

I've just tried it, and it does not work better. The compiler
complains there are not selector Low_Level_Data for T1_Type.


> I am undecided whether the compiler is correct or wrong about the
> visibility of Low_Level_Data. On the one hand, P1.P3 cannot see the
> full declaration of T2_Type; on the other hand, it can see that
> T2_Type publicly inherits from T1_Type and can also see the full
> declaration of T1_Type.
This is exactly the same think in my mind. Perhaps the semantic is
ambigous here.

> It seems that the public (partial) view of T2_Type hides the full
> declaration of T1_Type. So, I think my solution would work by removing
> T2_Type out of the way.

T2_Type is required ;) The purpose is to have T2_Type and T3_Type, and
may be later some others, beside of each other.

> Another solution, which enforces encapsulation better, would be:
>
> package P1 is
>    type T1_Type is tagged private;
> private
>    type Some_Type is ...;
>    type T1_Type is tagged record
>      Low_Level_Data : Some_Type;
>    end record;
>    procedure Set (Item : out T1_Type; Data : in Some_Type);
> end P1;
>
> package body P1.P3 is
>    procedure A_Primitive (Item : out T3_Type) is
>    begin
>       Set (Item, Data => ...); -- OK, calls inherited primitive
> operation
>    end A_Primitive;
> end P1.P3;
>
> HTH

I will try it soon and tell about the result. But at first sight, I
think that the compiler gonna complain that Set is a primitive of
T1_Type and thus that it must be defined in the public part. Further
more, I think Set would habe to be redefined for each T2_Type, T3_Type
and etc.

Will try and tell later

Have a nice day



  reply	other threads:[~2009-06-04 11:47 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-04  5:45 Indirect visibility of private part in child packages Hibou57 (Yannick Duchêne)
2009-06-04  7:50 ` Ludovic Brenta
2009-06-04 11:47   ` Hibou57 (Yannick Duchêne) [this message]
2009-06-04 13:22     ` Robert A Duff
2009-06-04 14:04       ` Hibou57 (Yannick Duchêne)
2009-06-04 16:06 ` Adam Beneschan
2009-06-04 16:33   ` Hibou57 (Yannick Duchêne)
replies disabled

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