From: Jeff Carter <jrcarter@acm.org>
Subject: Re: Variable length raw-byte data
Date: Wed, 13 Dec 2000 23:10:46 GMT
Date: 2000-12-13T23:10:46+00:00 [thread overview]
Message-ID: <3A37F5FE.E6E2CBB4@acm.org> (raw)
In-Reply-To: 00d101c0651c$24e3ea60$f8ffa8c0@dbdell2000
David Botton wrote:
>
> Since Byte_List is unconstrained is there not a potential for problem here
> with additional data associated with the type for bounds?
>
> > type Byte_List is array (Positive range <>) of Unsigned_8;
This shouldn't cause a problem, because in
Thing : Byte_List (1 .. Length);
for Thing'Address use Pointer;
Thing'Address is defined to be the address of Thing (Thing'First). If
the compiler needs to store any additional information, it has to put
that information elsewhere.
>
> Would this be a better solution:
>
> C_Thing (Length, Pointer)
>
> declare
> type Byte_List is array (1 .. Length) of Unsigned_8;
> Thing : Byte_List;
> for Thing'Address use Pointer;
>
> begin
> ...
> end;
This is certainly OK, too.
>
> I frequently code the above as:
>
> C_Thing (Length, Pointer)
>
> declare
> type Byte_List is array (1 .. Length) of Unsigned_8;
> type Pointer_To_Byte_List is access all Byte_List;
>
> function To_Pointer_To_Byte_List is
> new Ada.Unchecked_Conversion (System.Address, Pointer_To_Byte_List);
>
> Thing : Pointer_To_Byte_List := To_Pointer_To_Byte_List
> (Pointer'Address);
> begin
> ...
> end;
>
> Is there a reason that using the for Thing'Address would be a better
> solution then the second method?
Yes, the second method is not portable. While Unchecked_Conversion
between System.Address and an access type may work with some compilers,
it definitely does NOT work with all compilers.
Since you have a constrained type here, you could use
System.Address_To_Access_Conversions to obtain a valid access value, but
why add the added baggage of access-type semantics when you can make
Thing a Byte_List?
--
Jeff Carter
"You tiny-brained wipers of other people's bottoms!"
Monty Python & the Holy Grail
next prev parent reply other threads:[~2000-12-13 23:10 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-12-12 21:00 Variable length raw-byte data Beard, Frank
2000-12-13 15:48 ` David Botton
2000-12-13 15:51 ` Lutz Donnerhacke
2000-12-13 19:34 ` Robert Dewar
2000-12-14 8:54 ` Lutz Donnerhacke
2000-12-13 23:10 ` Jeff Carter [this message]
-- strict thread matches above, loose matches on Subject: below --
2000-12-13 20:39 Beard, Frank
2000-12-14 13:30 ` Robert Dewar
2000-12-13 2:56 Beard, Frank
2000-12-13 15:52 ` Robert Dewar
2000-12-13 18:23 ` Larry Kilgallen
2000-12-13 19:26 ` Robert Dewar
2000-12-12 21:11 Beard, Frank
2000-12-12 3:30 Beard, Frank
2000-12-12 5:54 ` tmoran
2000-12-11 19:38 Julian Morrison
2000-12-12 5:19 ` Jeff Carter
2000-12-13 0:50 ` Robert Dewar
2000-12-13 8:56 ` Tristan Gingold
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox