comp.lang.ada
 help / color / mirror / Atom feed
From: Bernd.Specht@gmx.com (Bernd Specht)
Subject: Re: Bitmanipulation in Ada
Date: 18 Aug 2004 21:10:30 GMT
Date: 2004-08-18T23:10:30+02:00	[thread overview]
Message-ID: <Xns9549EB926B2CBBerndSpechgmxcom@151.189.20.10> (raw)
In-Reply-To: 87k6vwrwym.fsf@insalien.org

Ludovic Brenta <ludovic.brenta@insalien.org> wrote in
news:87k6vwrwym.fsf@insalien.org: 

>  (Bernd Specht) writes:
>> Hi, 

Thanks.

>> 2. I did not found shift and rotate operations. Did I miss something
>> or are there really none? 
> 
> These operations are usually carried out in hardware for certain sizes
> of modular integers only.  Consequently, these operations are defined
> in package Interfaces (see RM 3.5.4(31) and B.2).  Package Interfaces
> defines the following subprograms:
> 
>    function Shift_Left  (Value  : Unsigned_n;
>                          Amount : Natural) return Unsigned_n;
>    function Shift_Right (Value  : Unsigned_n;
>                          Amount : Natural) return Unsigned_n;
>    function Shift_Right_Arithmetic (Value  : Unsigned_n;
>                                     Amount : Natural)
>      return Unsigned_n;
>    function Rotate_Left  (Value  : Unsigned_n;
>                           Amount : Natural) return Unsigned_n;
>    function Rotate_Right (Value  : Unsigned_n;
>                           Amount : Natural) return Unsigned_n;


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?
 
>> 3. When I want treat a value both as an integer and as a boolean
>> array, how can i do this? In pascal I would use a tagless record like 
>> Such overlay structures are not valid with Ada, so what do instead?
> 
> Have you considered a variant record?
> 
> type Ov (T : Boolean) is record
>    case T is
>       when True => I : Integer;
>       when False => B : Byte_Array;
>    end T;
> end record;

I found, that (at least GNAT) different storage locations are used for i and 
b.
 
> 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.
 



  reply	other threads:[~2004-08-18 21:10 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 [this message]
2004-08-18 21:16     ` Ludovic Brenta
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