Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 public int GetIndex(MyPackedPoolHandle handle)
 {
     return(m_indirection[handle.INDEX]);
 }
Beispiel #6
0
 public int AsIndex(MyPackedPoolHandle handle)
 {
     return(m_indexer.GetIndex(handle));
 }
Beispiel #7
0
 public T GetByHandle(MyPackedPoolHandle handle)
 {
     return(m_entities[m_indexer.GetIndex(handle)]);
 }