comp.lang.ada
 help / color / mirror / Atom feed
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. ;-/



  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