comp.lang.ada
 help / color / mirror / Atom feed
From: Ludovic Brenta <ludovic.brenta@insalien.org>
Subject: Re: Bitmanipulation in Ada
Date: Wed, 18 Aug 2004 23:16:06 +0200
Date: 2004-08-18T23:16:43+02:00	[thread overview]
Message-ID: <87ekm4rvu1.fsf@insalien.org> (raw)
In-Reply-To: Xns9549EB926B2CBBerndSpechgmxcom@151.189.20.10

 (Bernd Specht) writes:
> Ok. Is there a reason why it is not (directly) available in the language 
> itself like the and/or/xor or the >> and << in C?

Yes.  As I said, in Ada, modular types do not necessarily have a power
of two as their modulo; nor do they necessarily have a "natural" size.
You could have for example:

type T is mod 17;
for T'Size use 43;

Since C only has modular types, and since all types in C have
"natural" sizes, it makes sense to provide the shift and rotate
operations in the language.

>> If what you really want is to convert an integer to a byte array, use
>> Unchecked_Conversion:
>
> OK, but this would result in an assignment operation (a memory move on 
> maschine code level). What I want is a real "overlay" (same storage location 
> used for both), so reading the value would not need extra instructions.

Ah, OK.

procedure P is
   type Byte_Array is array (1 .. Integer'Size) of Boolean;
   pragma Pack (Byte_Array);
   for Byte_Array'Size use Integer'Size;
   I : Integer := 42;
   B : Byte_Array;

   -- Specify that B and I are at the same address
   for B'Address use I'Address;
begin
   for J in B'Range loop
      Ada.Text_IO.Put_Line (Boolean'Image (B (J)));
   end loop;
end P;

HTH

-- 
Ludovic Brenta.



  reply	other threads:[~2004-08-18 21:16 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-18 20:37 Bitmanipulation in Ada Bernd Specht
2004-08-18 20:51 ` Ludovic Brenta
2004-08-18 21:10   ` Bernd Specht
2004-08-18 21:16     ` Ludovic Brenta [this message]
2004-08-18 21:18     ` Ed Falis
2004-08-19 17:30       ` Bernd Specht
2004-08-19 17:44         ` Ed Falis
2004-08-19  0:53     ` Jeffrey Carter
2004-08-19 17:44       ` Bernd Specht
2004-08-19 18:09         ` Martin Dowie
2004-08-19 18:28           ` Bernd Specht
2004-08-19 19:31             ` Martin Dowie
2004-08-19 20:29             ` Martin Dowie
2004-08-20 21:31               ` Bernd Specht
2004-08-19 19:17         ` Jeffrey Carter
2004-08-19 19:57           ` Björn Persson
2004-08-20  0:52             ` Jeffrey Carter
2004-08-19 21:24         ` Francois G. Dorais
2004-08-20  8:55           ` Pascal Obry
2004-08-20  7:26         ` Jean-Pierre Rosen
2004-08-20 21:20           ` Bernd Specht
2004-08-20 21:39             ` Ed Falis
2004-08-18 21:14 ` (see below)
2004-08-18 21:56   ` Martin Dowie
2004-08-19 15:25     ` (see below)
2004-08-19 15:50       ` Martin Dowie
2004-08-18 21:53 ` Martin Dowie
2004-08-18 22:59   ` Björn Persson
2004-08-19  8:08   ` Egil H. H�vik
2004-08-19 17:46   ` Bernd Specht
2004-08-20 20:57 ` Bitordering? was " Alfred Hilscher
2004-08-21 11:34   ` Nick Roberts
2004-08-21 14:00     ` Jim Rogers
2004-08-21 16:54       ` Simon Wright
2004-08-21 16:55     ` Georg Bauhaus
2004-08-23 18:36       ` Alfred Hilscher
2004-08-23 18:47     ` Alfred Hilscher
2004-08-23 22:39       ` Nick Roberts
replies disabled

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