1
0
mirror of https://github.com/lidgren/lidgren-network-gen3.git synced 2026-05-15 14:46:29 +09:00

transferred from trunk/Generation3 of lidgren-network

This commit is contained in:
lidgren
2010-05-06 18:30:27 +00:00
commit fbcd550a2a
145 changed files with 17306 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
using System;
namespace Lidgren.Network
{
public sealed class NetBitVector
{
private int m_capacity;
private uint[] m_data;
public int Capacity { get { return m_capacity; } }
public NetBitVector(int bitsCapacity)
{
m_capacity = bitsCapacity;
m_data = new uint[(bitsCapacity + 31) / 32];
}
public bool IsEmpty()
{
foreach (uint v in m_data)
if (v != 0)
return false;
return true;
}
public int GetFirstSetIndex()
{
int idx = 0;
uint data = m_data[0];
while (data == 0)
{
idx++;
data = m_data[idx];
}
int a = 0;
while (((data >> a) & 1) == 0)
a++;
return (idx * 32) + a;
}
public bool Get(int bitIndex)
{
int idx = bitIndex / 32;
uint data = m_data[idx];
int bitNr = bitIndex - (idx * 32);
return (data & (1 << bitNr)) != 0;
}
public void Set(int bitIndex, bool value)
{
int idx = bitIndex / 32;
int bitNr = bitIndex - (idx * 32);
if (value)
m_data[idx] |= (uint)(1 << bitNr);
else
m_data[idx] &= (uint)(~(1 << bitNr));
}
public bool this [int index]
{
get { return Get(index); }
set { Set(index, value); }
}
public void Clear()
{
Array.Clear(m_data, 0, m_data.Length);
}
}
}