comp.lang.ada
 help / color / mirror / Atom feed
From: Jeffrey Carter <spam@spam.com>
Subject: Re: Private area and child packages
Date: Wed, 29 Dec 2004 04:49:10 GMT
Date: 2004-12-29T04:49:10+00:00	[thread overview]
Message-ID: <aHqAd.11670$RH4.11125@newsread1.news.pas.earthlink.net> (raw)
In-Reply-To: <1104293158.276241.42640@f14g2000cwb.googlegroups.com>

danmcleran@hotmail.com wrote:

> Is there any way to hide implementation detail from child packages? An
> example, say I have a parent package like this:
> 
> package Some_Package is
> type Secret_Type is private;
> private
> type Secret_Type is record
> Secret_Value : Integer := 0;
> end record;
> end Some_Package;
> 
> I don't want any other component to be able to manipulate the
> Secret_Value record component, not even a child package of
> Some_Package.

If you don't need to make the type visible at all, you can simply 
declare it in the package body. Items in package bodies are hidden from 
all other scopes.

If you want the type to be visible, but its implementation to be hidden, 
you can use a pointer:

package P is
    type Something is [limited] private;

    -- operations on Something
private -- P
    type Implementation;
    type Something is access [all] Implementation;
end P;

The full view of Implementation must then be given in the body of P. If 
you do this, you're responsible for the memory management of Something. 
This is usually easier if you make Something limited, since the client 
cannot then make copies of the access values, eliminating opportunities 
for dangling references.

-- 
Jeff Carter
"Beyond 100,000 lines of code you
should probably be coding in Ada."
P. J. Plauger
26



  parent reply	other threads:[~2004-12-29  4:49 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-12-29  4:05 Private area and child packages danmcleran
2004-12-29  4:47 ` tmoran
2004-12-29 15:10   ` danmcleran
2004-12-30 18:51     ` tmoran
2005-01-01  3:45       ` danmcleran
2004-12-29  4:49 ` Jeffrey Carter [this message]
2004-12-29 15:27   ` danmcleran
2004-12-29 16:53     ` Samuel Tardieu
2004-12-30  4:07       ` Jeffrey Carter
2004-12-30 15:31   ` danmcleran
2004-12-30 18:14     ` Jeffrey Carter
2004-12-31 17:55   ` danmcleran
     [not found]   ` <1104515735.052116.248180@c13g2000cwb.googlegroups.com>
2004-12-31 19:02     ` Jeffrey Carter
2004-12-29 19:05 ` Martin Krischik
2004-12-29 21:44 ` Stephen Leake
replies disabled

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