comp.lang.ada
 help / color / mirror / Atom feed
From: Tucker Taft <stt@averstar.com>
Subject: Re: Types, subtypes and ranges
Date: Mon, 12 Mar 2001 11:06:04 -0500
Date: 2001-03-12T16:06:04+00:00	[thread overview]
Message-ID: <3AACF3EC.6F85DE6C@averstar.com> (raw)
In-Reply-To: 98idi9$66g$1@hobbes2.crc.com

"David C. Hoos, Sr." wrote:
> 
> Because TTT'Image is inherited from its base type T.
> 
> If you had declared TT and TTT as new T types, the constraint
> error would have occurred, but then you wouldn't have been
> able to add anders to banders without type conversion, because
> the types would have been distinct.

This isn't quite right.  The 'Image and 'Value attributes deal
with all values in the "base range" of the type, even if the
prefix (e.g., the "S" in S'Image) is a subtype with a more constrained
range.  The "base range" of a scalar type is chosen by the implementation
so that it is, if signed, symmetric around zero (+/- 1 value in negative
direction), and generally corresponds to a range that is directly
supported by the hardware.  And of course, the base range must cover
all the values specified in the original type definition.

So don't expect 'Image or 'Value to do any useful constraint checking.
Of course, when you assign the result of 'Value you will get constraint
checking.  The same goes for the 'Pos and 'Val attributes, FWIW.

To answer your first question, declaring a subtype vs. declaring
a new type -- all subtypes of the same type are freely interconvertible,
whereas converting between distinct types requires an explicit
conversion.  Furthermore, all subtypes of the same type share the
same set of operators/operations, and you can mix and match between
subtypes for operands.  In fact, "values" or "expressions" of an 
elementary type don't really have a subtype, they only have a "type."
Subtypes are essentially subsets of types, whereas derived types
represent a completely new universe of values, that happens to have the 
same number of values as the parent "universe," but the values are
distinguishable because they have a different type.

If you remember "Venn" diagrams from math class, subtypes are potentially
overlapping circles on the Venn diagram representing a "universe" of
the values of a type.  On the other hand, a derived type gets its
own separate Venn diagram, with its own possibly overlapping circles
representing different subtypes.


> 
> "Anders Wirzenius" <anders.wirzenius@pp.qnet.fi> wrote in message
> news:V4%q6.26$OG2.2999@read2.inet.fi...
> >
> > Mark Lundquist wrote in message ...
> > >Sorry for the late response (I lost access to news for a while...)
> > >
> > >WM <wwminirl@hotmail.com> wrote in message
> > >news:97pfmt$ll30@tech.port.ac.uk...
> > >> Hi, I am an ada beginner. Can anyone kindly tell me what's the
> difference
> > >> between TYPE and SUBTYPE?
> > >
> > ...
> > >    subtype S is T;
> > >
> > >declares a new subtype S of the type of subtype T.  This is also an
> example
> > >of a subtype declaration that does not include a constraint, so the
> > >constraint of S is the same as the constraint of T.  (This is how you
> > >"rename" or create an alias for a type).  What a subtype declaration
> looks
> > >like that adds a constraint depends on the type of the subtypes, e.g. for
> > an
> > >integer type you might have
> >
> > May I continue with two more questions:
> > 1.
> > given
> > >
> > >    subtype S is T range 1 .. 10;
> >
> > what is the the difference between the above declaration and
> > type S is new T range 1..10;
> >
> > 2.
> > Why don't I get a constraint_error in the following code where I violate
> the
> > range of type TTT in the Put statement?
> >
> > with Ada.Text_IO;
> > procedure Why_Not_Constraint_Error is
> >    type T is new Integer;
> >    subtype TT is T range -2..-1;
> >    subtype TTT is T range -1..-1;
> >    anders : TT := -2;
> >    bnders : TTT := -1;
> >    use Ada.Text_IO;
> > begin
> >    Put ( TTT'Image ( anders+bnders ) );
> > end Why_Not_Constraint_Error;
> >
> > Anders
> > another beginner
> >
> >
> >

-- 
-Tucker Taft   stt@avercom.net   http://www.averstar.com/~stt/
Chief Technology Officer, AverCom Corporation (A Titan Company) 
Burlington, MA  USA (AverCom was formerly the Commercial Division of AverStar:
http://www.averstar.com/services/ebusiness_applications.html)



  reply	other threads:[~2001-03-12 16:06 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-03-03  1:00 Questions: WM
2001-03-03  3:30 ` Questions: Robert Love
2001-03-03 11:09 ` Questions: David C. Hoos, Sr.
2001-03-07 23:05 ` Questions: Mark Lundquist
2001-03-08  1:14   ` Questions: Robert A Duff
2001-03-12  7:41   ` Types, subtypes and ranges Anders Wirzenius
2001-03-12 11:57     ` David C. Hoos, Sr.
2001-03-12 16:06       ` Tucker Taft [this message]
2001-03-13  6:40       ` Anders Wirzenius
2001-03-12 16:57     ` Scott Ingram
2001-03-18 22:28     ` Lao Xiao Hai
2001-03-19 13:22       ` Marc A. Criley
2001-03-20 16:57         ` Lao Xiao Hai
  -- strict thread matches above, loose matches on Subject: below --
2001-03-14 13:50 Christoph Grein
replies disabled

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