You've already forked lidgren-network-gen3
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:
73
Lidgren.Network/NetBitVector.cs
Normal file
73
Lidgren.Network/NetBitVector.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user