From: Matthew Heaney <matt@mheaney.ni.net>
Subject: Re: Protected Objects: Scoping problem.
Date: 1998/06/15
Date: 1998-06-15T00:00:00+00:00 [thread overview]
Message-ID: <m3vhq2xwer.fsf@mheaney.ni.net> (raw)
In-Reply-To: 6m3kj4$ev0@nntp02.primenet.com
Robert Worne <rworne@primenet.com> writes:
> I am working on a package that has a protected object that
> communicates to other packages via a "read". A "write" in that object
> should be visible only as an internal subprogram, and not visible to the
> outside world. A simplified version from the Ada documents on-line is:
>
> package Protected_Variable is
>
> type T is new integer;
>
> protected Variable is
> function Read return T;
> procedure Write(Value: T); -- I do NOT want this accessible to outside
> -- packages!
> private
> Data: T;
> end Variable;
> end Protected_Variable;
>
> package body Protected_Variable is
> protected body Variable is
> function Read return T is
> begin
> return Data;
> end Read;
>
> procedure Write(Value: T) is
> begin
> Data := Value;
> end Write is separate;
> end Variable;
> end Protected_Variable;
>
I'm not sure what you're trying to do here.
If you have only one object, then why not hide the protected object in
the body?
package Protected_Variable is
function Get_Value return Integer;
end;
package body Protected_Variable is
protected Variable is
function Read return Integer;
procedure Write (V : in Integer);
private
V : Integer;
end;
protected body Variable is
function Read return Integer is
begin
return V;
end;
procedure Write (V : Integer) is
begin
Variable.V := V;
end;
end Variable;
end Protected_Variable;
You could declare the protected object in the private part of the
spec, if you wish.
You could even declare a "protected variable" ADT (limited private, of
course), and implement the type as a protected type.
I don't know what you're trying to do.
> What I want is for the procedure "Write" to not be externally visible,
> as if it were commented out of the spec file. However, that makes it not
> visible to the package body (at least during elaboration).
Well, if it's not visible, then who calls it???
> How can I accomplish this seemingly simple task? Am I going about it in a
> totally incorrect fashion? I need the mutual exclusion a protected object
> will provide, but in a read-only fashion to the outside.
Then just export a selector in the spec, and declare the protected
object in the body. What's the problem?
next prev parent reply other threads:[~1998-06-15 0:00 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
1998-06-15 0:00 Protected Objects: Scoping problem Robert Worne
1998-06-15 0:00 ` Matthew Heaney [this message]
1998-06-17 0:00 ` Stephen Leake
1998-06-17 0:00 ` Robert A Duff
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox