public void Free(MyPackedPoolHandle handle) { // swap with last m_entities[m_indexer.GetIndex(handle)] = m_entities[m_indexer.Size - 1]; m_entities[m_indexer.Size - 1] = new T(); m_indexer.Free(handle); }
public MyPackedPoolHandle Allocate() { var handle = new MyPackedPoolHandle(m_free); m_backref[Size] = m_free; m_indirection[m_free] = Size; m_free = m_nextFree[m_free]; Size += 1; return(handle); }
public void Free(MyPackedPoolHandle handle) { var handleIndex = handle.INDEX; m_nextFree[handleIndex] = m_free; m_free = handleIndex; // update indirection m_indirection[m_backref[Size - 1]] = m_indirection[handleIndex]; m_backref[m_indirection[handleIndex]] = m_backref[Size - 1]; m_indirection[handleIndex] = m_sizeLimit; Size -= 1; }
public MyPackedPoolHandle Allocate() { if (Size == m_sizeLimit) { var newSize = m_sizeLimit * (m_sizeLimit > 1024 ? 2 : 1.5f); Extend((int)Math.Ceiling(newSize)); } var handle = new MyPackedPoolHandle(m_free); m_backref[Size] = m_free; m_indirection[m_free] = Size; m_free = m_nextFree[m_free]; Size += 1; return(handle); }
public int GetIndex(MyPackedPoolHandle handle) { return(m_indirection[handle.INDEX]); }
public int AsIndex(MyPackedPoolHandle handle) { return(m_indexer.GetIndex(handle)); }
public T GetByHandle(MyPackedPoolHandle handle) { return(m_entities[m_indexer.GetIndex(handle)]); }