From: lutz@iks-jena.de (Lutz Donnerhacke)
Subject: Re: AdaYY wish list from current projects
Date: 23 Feb 2001 14:16:21 GMT
Date: 2001-02-23T14:16:21+00:00 [thread overview]
Message-ID: <slrn99cs08.ju.lutz@taranis.iks-jena.de> (raw)
In-Reply-To: 87lmqx1p47.fsf@deneb.enyo.de
* Florian Weimer wrote:
>lutz@iks-jena.de (Lutz Donnerhacke) writes:
>> >You need the conversion package anyway, at least that's my experience.
>> >Otherwise, your code is quite unportable, as you're passing around
>> >invalid values.
>>
>> If my suggestion is part of the AdaYY specification, it would be perfectly
>> portable.
>
>I think you've missed the point.
Yep. I talk about values crossing a storage_element boundary and you talk
about invalid values.
>If you use enumeration representation clauses which are sparse (i.e. not
>every representation has a corresponding enumeration literal), you're
>dealing with invalid representations.
The same is true for all subtypes I use:
subtype Header_Length is Integer range 5 .. 15;
>If you never, ever copy any such values and always check using the Valid
>attribute that the representation is not invalid before using it in
>computations, you might actually have portable code.
Full ACK. But it's a difference between:
if not data'Valid then ...
and
declare
data1 : Component_Type_1 := Endianess_Conversion_1 (data.f1);
data2 : Component_Type_2 := Endianess_Conversion_2 (data.f2);
data3 : Component_Type_3 := Endianess_Conversion_3 (data.f3);
data4 : Component_Type_4 := Endianess_Conversion_4 (data.f4);
begin
if not data1'Valid or else not data2'Valid or else
not data3'Valid or else not data4'Valid then
...
end if;
end;
>So I still claim that little endian/big endian integers are sufficient
>for most (almost all?) applications and it's not necessary to an
>endian property to enumeration types, or to add even more complexity
>to representation clauses.
I do not talk about endianess of enumeration types but of repesentation
issues of record types.
>Sorry, I still do not understand what you mean by 'derivates the type
>from a pointer'.
procedure t is
type pstring(len : Integer) is record
data : String (1 .. len);
end record;
pragma Pack (pstring); -- record representation clause not possible
ex : pstring; -- Won't work;
for ex'Address use 16#00000#;
begin
Put_Line (Integer'Image (ex.len) & " => " & ex.data);
end t;
Using Address_To_Access_Conversions does solve the problem but is really ugly.
>> The problem escaped from a 'multiprotocol router'. Please try to map a IPv4
>> header incl. payload and IP-header options.
>
>Ah. Well, obviously, you can't use a single record in this case.
So I'm stuck to implement gather-scatter from the beginning. ;-/
next prev parent reply other threads:[~2001-02-23 14:16 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-20 20:50 AdaYY wish list from current projects Lutz Donnerhacke
2001-02-22 11:08 ` Florian Weimer
2001-02-22 13:02 ` Lutz Donnerhacke
2001-02-23 9:30 ` Florian Weimer
2001-02-23 10:12 ` Lutz Donnerhacke
2001-02-23 13:54 ` Florian Weimer
2001-02-23 14:16 ` Lutz Donnerhacke [this message]
2001-02-23 15:04 ` Florian Weimer
2001-02-23 15:15 ` Lutz Donnerhacke
2001-02-23 16:21 ` Florian Weimer
2001-02-23 16:31 ` Lutz Donnerhacke
2001-02-23 17:25 ` Florian Weimer
2001-02-26 11:22 ` Lutz Donnerhacke
2001-02-23 19:06 ` tmoran
2001-02-26 11:20 ` Lutz Donnerhacke
2001-02-23 19:06 ` tmoran
2001-02-26 11:21 ` Lutz Donnerhacke
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox