comp.lang.ada
 help / color / mirror / Atom feed
From: Simon Wright <simon.j.wright@mac.com>
Subject: Re: generic function and overloading
Date: Fri, 19 Oct 2007 06:19:01 +0100
Date: 2007-10-19T06:19:01+01:00	[thread overview]
Message-ID: <m27ilj7kca.fsf@mac.com> (raw)
In-Reply-To: wcck5pk86cz.fsf@shell01.TheWorld.com

Robert A Duff <bobduff@shell01.TheWorld.com> writes:

> Simon Wright <simon.j.wright@mac.com> writes:
>
>> Robert A Duff <bobduff@shell01.TheWorld.com> writes:

>>> Alternatively, a packed array of type Bit, where:
>>>
>>>     type Bit is range 0..1;
>>>
>>> If the individual bit numbers have some specific meaning,
>>> the index type could be an enumeration type.
>>
>> Will give surprising results on a big-endian machine.
>
> Only if you're doing something that exposes endianness.
> Endianness should be completely invisible to most code.
> (E.g., if you set the N'th bit of an array of Boolean,
> and get the N'th bit, you get back what you set.
> The same is true with masking modular integers.)

As Adam said, this will likwly be hardware-related -- or, a near
equivalent, dealing with a C peer, possibly over a network.

>>... At least code
>> using shifts and masks is portable if gruesome
>
> Well, it can be portable, but you can still get into endianness
> trouble if you do things like splitting the integer into
> individual bytes (e.g. to transmit them across a network).

We have used GNAT's XDR-based streams on eg Interfaces.Unsigned_32 and
done the bit-twiddling afterwards (when we are reading, of course).

>>... -- and no more gruesome
>> than code I've written which says
>>
>>    type Unrepresented is ..
>>    Internal : Unrepresented;
>>    ...
>>
>>    if System.Default_Bit_Order = System.High_Order_First then
>>       declare
>>          type Represented is ..
>>          for Represented use ..
>>             -- record rep with big-endian usage
>>          External : constant Represented := Internal;
>
> Do you mean "type Represented is new Unrepresented;"?
> Then you need a type conversion in the line above.

Yes, I was writing from memory.

> Nitpick: I'd use a case statement rather than an if statement, here.

Is this for symmetry or in case some later Ada standard allows a third
option? (I could buy the symmetry/clarity argument, good point).



  reply	other threads:[~2007-10-19  5:19 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-18  7:28 generic function and overloading eliben
2007-10-18  8:18 ` Jean-Pierre Rosen
2007-10-18  9:31 ` Dmitry A. Kazakov
2007-10-18  9:33   ` Dmitry A. Kazakov
2007-10-18 10:32 ` Georg Bauhaus
2007-10-18 11:07 ` Stephen Leake
2007-10-18 11:30 ` Stefan Lucks
2007-10-18 15:58 ` Robert A Duff
2007-10-18 20:20   ` Simon Wright
2007-10-18 21:23     ` Robert A Duff
2007-10-19  5:19       ` Simon Wright [this message]
2007-10-19 13:59         ` Robert A Duff
2007-10-18 18:58 ` Dr. Adrian Wrigley
2007-10-18 22:30   ` Adam Beneschan
replies disabled

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