comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@stephe-leake.org>
Subject: Re: Null Range in Unconstrasined Array
Date: Wed, 09 Sep 2009 04:35:19 -0400
Date: 2009-09-09T04:35:19-04:00	[thread overview]
Message-ID: <uk5088qig.fsf@stephe-leake.org> (raw)
In-Reply-To: 68f49a20-2142-46ee-bed8-e5b3cad398e0@l35g2000pra.googlegroups.com

Adam Beneschan <adam@irvine.com> writes:

> To elaborate on this a bit further: Suppose you define a record type
> for reading a file with Ada.Direct_IO, that looks something like this:
>
>   type Employee_Data is record
>       Name     : String (1 .. 50);
>       Address1 : String (1 .. 40);
>       Address2 : String (1 .. 40);
>       City     : String (1 .. 30);
>       State    : String (1 .. 2);
>       ...
>   end record;
>
> (Reminds me of my COBOL programming days...)  Anyway, it would be very
> unexpected for the compiler to put two extra integers in the record
> for each of these strings, and it would mess up your file I/O.  

If you expect the layout of this record to match your file, you must
provide a representation clause.

> But you have to have the ability to pass any of those fields to a
> subprogram with a parameter type "String", and the bounds have to be
> passed to the subprogram somehow. I think it's most likely that the
> bounds will be passed separately, as Bob suggested, either by
> passing them in separate registers, creating a three-word temporary
> structure that contains the bounds and a pointer to the data and
> passing the address of that structure (with that structure
> disappearing after the subprogram returns), creating a two-word
> structure with the bounds and passing the address of that in a
> register, etc. Something along those lines. But I'd actually be
> surprised if *any* implementation allocated extra space in an
> Employee_Data record to hold the bounds of each field.

It _could_ depend on whether there's a pragma Pack, or a
representation clause, for the record. In the absence of such, I would
expect the compiler to treat these components the same way it treats
separate objects. Which means I would expect the bounds to be stored
with the object.

But that's just my expectations; compilers are free to do whatever they
want, as long as it meets the standard.

-- 
-- Stephe



  reply	other threads:[~2009-09-09  8:35 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-01  1:28 Null Range in Unconstrasined Array Rick
2009-09-01  3:11 ` Randy Brukardt
2009-09-01 14:50 ` Adam Beneschan
2009-09-01 15:34   ` Robert A Duff
2009-09-06 12:11     ` Peter C. Chapin
2009-09-06 12:41       ` Robert A Duff
2009-09-08 17:54         ` Adam Beneschan
2009-09-09  8:35           ` Stephen Leake [this message]
2009-09-09 13:00             ` Robert A Duff
2009-09-09 19:22             ` sjw
2009-09-10 23:24               ` Stephen Leake
replies disabled

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