in Networked Physics/Assets/Scripts/Network.cs [925:1038]
public class SequenceBuffer32<T> where T : new()
{
public T[] m_entries;
uint[] m_entry_sequence;
int m_size;
uint m_sequence;
public T[] Entries
{
get
{
return m_entries;
}
}
public SequenceBuffer32( int size )
{
Assert.IsTrue( size > 0 );
m_size = size;
m_sequence = 0;
m_entry_sequence = new uint[size];
m_entries = new T[size];
for ( int i = 0; i < size; ++i )
m_entries[i] = new T();
Reset();
}
public void Reset()
{
m_sequence = 0;
for ( int i = 0; i < m_size; ++i )
{
m_entry_sequence[i] = 0xFFFFFFFF;
}
}
public int Insert( uint sequence )
{
Assert.IsTrue( sequence != 0xFFFFFFFF );
if ( sequence + 1 > m_sequence )
{
RemoveEntries( m_sequence, sequence );
m_sequence = sequence + 1;
}
else if ( sequence < m_sequence - m_size )
{
return -1;
}
int index = (int) ( sequence % m_size );
m_entry_sequence[index] = sequence;
return index;
}
public void Remove( uint sequence )
{
Assert.IsTrue( sequence != 0xFFFFFFFF );
m_entry_sequence[sequence % m_size] = 0xFFFFFFFF;
}
public bool Available( uint sequence )
{
Assert.IsTrue( sequence != 0xFFFFFFFF );
return m_entry_sequence[sequence % m_size] == 0xFFFFFFFF;
}
public bool Exists( uint sequence )
{
Assert.IsTrue( sequence != 0xFFFFFFFF );
return m_entry_sequence[sequence % m_size] == sequence;
}
public int Find( uint sequence )
{
Assert.IsTrue( sequence != 0xFFFFFFFF );
int index = (int) ( sequence % m_size );
if ( m_entry_sequence[index] == sequence )
return index;
else
return -1;
}
public uint GetSequence()
{
return m_sequence;
}
public int GetSize()
{
return m_size;
}
public void RemoveEntries( uint start_sequence, uint finish_sequence )
{
Assert.IsTrue( start_sequence <= finish_sequence );
if ( finish_sequence - start_sequence < m_size )
{
for ( uint sequence = start_sequence; sequence <= finish_sequence; ++sequence )
m_entry_sequence[sequence % m_size] = 0xFFFFFFFF;
}
else
{
for ( int i = 0; i < m_size; ++i )
{
m_entry_sequence[i] = 0xFFFFFFFF;
}
}
}
}