comp.lang.ada
 help / color / mirror / Atom feed
From: jduarte@liege.ICS.UCI.EDU (J o s e D u a r t e)
Subject: Re: Types defining h/w r/o or w/o registers
Date: 31 May 91 17:26:39 GMT	[thread overview]
Message-ID: <9105311025.aa04299@PARIS.ICS.UCI.EDU> (raw)
In-Reply-To: <3949@titan.tsd.arlut.utexas.edu>

> Is there some way to define a type such that all variables of that
> type can be only read or only written?  For instance, I have a type that
> defines the status register of some peripheral which can only be
> read.  It would be best if the compiler could flag any assignments
> to variables of such a type as errors.

> Is there some other means for commonly handling this problem?  The
> compiler being used is VADSWorks, if an implementation-defined solution
> is required.


Well...Ada is "the" language which explicitly allows you
to name variables which can ONLY be read/written/read-write using
the procedure syntax:


with REGISTERS; use REGISTERS;
procedure XYZ(Reg1: in REGISTER; Reg2: out REGISTER; Reg3: in out REGISTER) is
begin
  -- Reg1 can only be used effectively as a constant in this scope
  -- Reg2 can only be assigned to in this scope
  -- Reg3 can be assigned to or read from in this scope
  null;
end XYZ;

.
.
.

Alternatively, you can define a "type" and then define a constant variable
of that type for read only variables...

subtype XYZ is INTEGER;
NY_REG: constant XYZ := 0; -- define a  variable that can only be read

.
.
.

to define a type in a package that does not have ":="
implicitly defined...use a "limited private" syntax:
package REGS is

type XYZ is limited private;

-- insert your procedures/functions here

private
type XYZ is NEW WHATEVER;
end REGS;

--- This would not allow other programmers that use your package to assign
--- to a variable of type "XYZ" unless you also specified an "Assign" procedure.
--- Look up "limited private" types for more details. I believe that "limited
--- private" means that "=" (and thus "/=") and  ":=" are not implicitly
--- allowed for that type unless the  package also explicitly defines
--- "Assign" and "Read-From" procedures

Jose' D.

  parent reply	other threads:[~1991-05-31 17:26 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1991-05-30 13:03 Types defining h/w r/o or w/o registers Don Gardner
1991-05-31 17:03 ` david.c.willett
1991-05-31 17:10   ` david.c.willett
1991-05-31 17:26 ` J o s e D u a r t e [this message]
1991-06-01  8:34   ` Orville R. Weyrich
1991-06-01 10:01 ` Types defining h/w r/o or w/o regis stt
1991-06-02 16:54 ` Types defining h/w r/o or w/o registers rharwood
1991-06-03  7:57   ` Orville R. Weyrich
1991-06-04 14:08     ` John Goodenough
1991-06-04 14:48     ` Anthony Shipman
1991-06-05 13:59       ` John Goodenough
  -- strict thread matches above, loose matches on Subject: below --
1991-06-05 18:59 John Goodenough
1991-06-06  3:02 Steven V. Case
1991-06-09  0:15 ` rharwood
replies disabled

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