comp.lang.ada
 help / color / mirror / Atom feed
From: Ludovic Brenta <ludovic@ludovic-brenta.org>
Subject: Re: Indirect visibility of private part in child packages
Date: Thu, 4 Jun 2009 00:50:10 -0700 (PDT)
Date: 2009-06-04T00:50:10-07:00	[thread overview]
Message-ID: <5854cebc-55a9-469d-88bd-86b4704f8689@c19g2000yqc.googlegroups.com> (raw)
In-Reply-To: 77683561-2b21-42c3-8c90-6c08a0c16b99@n21g2000vba.googlegroups.com

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 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.

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.

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

--
Ludovic Brenta.



  reply	other threads:[~2009-06-04  7:50 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 [this message]
2009-06-04 11:47   ` Hibou57 (Yannick Duchêne)
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