comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: generic function and overloading
Date: Thu, 18 Oct 2007 11:58:48 -0400
Date: 2007-10-18T11:58:48-04:00	[thread overview]
Message-ID: <wccabqgl8hz.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 1192688972.967825.31130@t8g2000prg.googlegroups.com

eliben <eliben@gmail.com> writes:

> Hello,
>
> I have a few "hardware" types, for example uint16 and uint32. And I
> want to write a functions that will set or clear bits of such types.
> For example:
>
> function Bit_Set(word: uint16; bitn: natural) return uint16;
>
> function Bit_Set(word: uint16; bitn: natural) return uint16 is
>   mask: uint16 := 2**bitn;
> begin
>   return word or mask;
> end Bit_Set;
>
> However, I realize that such a function would be almost completely
> duplicated for the uint32 type. In C++ I would probably define it as a
> template on the type of the word, and the compiler would do the job
> for me. In Ada, however, when using generics it doesn't seem I can
> leave the same function name for all types (as I would do in
> overloading). I can define a generic Bit_Set, but then I have to
> specialize it for uin16 and uint32 with different function names. Is
> there any way I could combine the effects of generics and overloading
> and get a single Bit_Set for all my types without writing the code N
> times ?

Others answered your main question.

But do you really want to do arithmetic on these types,
as well as setting/clearing bits?  If all you want to
do is set/clear bits, you might want to consider using
a packed array of Boolean.  Then to set the Nth bit you
can say:

    X (N) := True;

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.

- Bob



  parent reply	other threads:[~2007-10-18 15:58 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 [this message]
2007-10-18 20:20   ` Simon Wright
2007-10-18 21:23     ` Robert A Duff
2007-10-19  5:19       ` Simon Wright
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