comp.lang.ada
 help / color / mirror / Atom feed
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?
 




  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