From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: generic function and overloading
Date: Thu, 18 Oct 2007 11:31:15 +0200
Date: 2007-10-18T11:25:00+02:00 [thread overview]
Message-ID: <14bfr1ubkvtjt.1rm8b553g3fke.dlg@40tude.net> (raw)
In-Reply-To: 1192688972.967825.31130@t8g2000prg.googlegroups.com
On 18 Oct 2007 00:28:38 -0700, eliben wrote:
> 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;
Bit_Set (X, Natural'Last)?
> 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.
You can overload generic instances in exactly same way as you would other
subprograms:
generic
type Data is mod <>;
type Bit_No is range <>;
function Generic_Set_Bit (Word : Data; No : Bit_No) return Data;
function Generic_Set_Bit (Word : Data; No : Bit_No) return Data is
pragma Assert (Data'Last = 2 ** Integer (Bit_No'Last + 1) - 1);
begin
return Word or 2 ** Integer (No);
end Generic_Set_Bit;
subtype Word_Index is Natural range 0..15;
function Set_Bit is
new Generic_Set_Bit (Unsigned_16, Word_Index);
subtype Double_Word_Index is Natural range 0..31;
function Set_Bit is
new Generic_Set_Bit (Unsigned_32, Double_Word_Index);
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2007-10-18 9:31 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 [this message]
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
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