| 
 Date: 05/04/05 (C Sharp) Keywords: no keywords Remember some time ago I asked for the collection that has Add() and Contains() methods and a least possible overhead? Here we are. This is a specialized collection of this kind that will work for positive integers. 
    public class BitSet
    {
        private const int BIT_COUNT = 64;
        private ulong[] data;
        private int count = 0;
        public int Count { get { return count; } }
        public int[] Values
        {
            get
            {
                int index = 0;
                int[] values = new int[count];
                for (int i = 0; i < data.Length * BIT_COUNT; i++)
                    if (Contains(i))
                        values[index++] = i;
                return values;
            }
        }
        public BitSet(int max_value)
        {
            data = new ulong[max_value / BIT_COUNT + 1];
        }
        public bool Contains(int value)
        {
            ulong bit_mask = (ulong)1 << (value % BIT_COUNT);
            return bit_mask == (data[value / BIT_COUNT] & bit_mask);
        }
        public void Add(int value)
        {
            if (!Contains(value))
            {
                data[value / BIT_COUNT] |= (ulong)1 << (value % BIT_COUNT);
                count++;
            }
        }
        public void Remove(int value)
        {
            if (Contains(value))
            {
                data[value / BIT_COUNT] ^= (ulong)1 << (value % BIT_COUNT);
                count--;
            }
        }
        public void Clear()
        {
            for (int i = 0; i < data.Length; i++)
                data[i] = 0;
        }
    }
Source: http://www.livejournal.com/community/csharp/28738.html 
 |