[Mono-list] [PATCH] BitVector32

Piers Haken piersh@friskit.com
Mon, 24 Jun 2002 11:05:03 -0700


Ah, bit twiddling ;-)

Try this:

private static int NumberOfSetBits (uint i)
{
	i = (i & 0x55555555) + ((i & 0xaaaaaaaa) >>  1);
	i = (i & 0x33333333) + ((i & 0xcccccccc) >>  2);
	i = (i & 0x0f0f0f0f) + ((i & 0xf0f0f0f0) >>  4);
	i = (i & 0x00ff00ff) + ((i & 0xff00ff00) >>  8);
	i = (i & 0x0000ffff) + ((i & 0xffff0000) >> 16);	return
(int) i;
}

Piers.

-----Original Message-----
From: Andrew Birkett [mailto:adb@tardis.ed.ac.uk] 
Sent: Monday, June 24, 2002 4:21 AM
To: mono-list@ximian.com
Subject: Re: [Mono-list] [PATCH] BitVector32


Hi,

I've got a few mono patches lined up today.  I did a big cycle ride on
Saturday and didn't want to move on Sunday so I got lots of coding done!

I've attached a further patch for BitVector32, created against the
current cvs version.  The patch contains:

 - Unit test for section indexers
 - Check for >32 bits when creating sections
 - Factored out helper methods for bit twiddling operations.
 - Removed ^M's from BitVector32Test.cs

Unit tests pass, except those which were already broken prior to my
changes.  The failures are all in date/time classes, due to me being in
the GMT time zone.  I'll have a look at fixing those later.

Andrew

- www.tardis.ed.ac.uk/~adb -