comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon@pogner.demon.co.uk>
Subject: Re: GNAT's internal format for Discriminant Records?
Date: 1998/06/19
Date: 1998-06-19T00:00:00+00:00	[thread overview]
Message-ID: <x7v1zsl88x1.fsf@pogner.demon.co.uk> (raw)
In-Reply-To: 6meah3$3b$1@cronkite.sp.trw.com


"Rick Flower" <Rick.Flower@trw.com> writes:

> We're trying to do some fixed format record layouts and are
> looking into using discriminants.. These record formats will be
> used to send data to hardware boxes, so the overhead of
> what Ada might add when using some of the slick OO features
> of the language are being checked into.  Now, we've already
> found that GNAT (3.10p under Solaris 2.6) adds the size of the
> discriminant to the overall record size (i.e. if the discriminant is
> 4 bits, then 4 bits are added to the overall record size).  We
> tried the same under GHS Adamulti (1.8.8D) and found that it
> did NOT add that overhead.  Now, for a few reasons, it would
> appear that if there are multiple platforms/compilers involved
> perhaps the use of discriminants should be avoided -- am I
> correct in this theory?

If your hardware target needs to know what sort of record you are
passing to it then it must need the discriminant somehow?

If not, you could check out the GNAT pragma Unchecked_Union (see the
GNAT RM for 3.10):

pragma Unchecked_Union (first_subtype_local_name)

      This pragma is used to declare that first_subtype_local_name
should be equivalent to a C union type, and is intended only for use
in interfacing with C code that uses union types. In Ada terms, the
named type must obey the following rules:

            It is a non-tagged non-limited record type. 

            It has a single discrete discriminant with a default value. 

            The component list consists of a single variant part. 

            Each variant has a component list with a single component. 

            No nested variants are allowed. 

            No component has an explicit default value. 

            No component has a non-static constraint. 

      In addition, given a type that meets the above requirements, the
following restrictions apply to its use throughout the program:

            The discriminant name can be mentioned only in an aggregate. 

            No subtypes may be created of this type. 

            The type may not be constrained by giving a discriminant value. 

            The type cannot be passed as the actual for a generic formal
            with a discriminant. 

[...]




  reply	other threads:[~1998-06-19  0:00 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-06-19  0:00 GNAT's internal format for Discriminant Records? Rick Flower
1998-06-19  0:00 ` Simon Wright [this message]
1998-06-20  0:00 ` Tom Moran
1998-06-21  0:00   ` Robert Dewar
1998-06-21  0:00 ` Robert Dewar
replies disabled

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