Seaside/SpyCustom/sdk/utlqueue.h
2021-06-16 18:49:07 +03:00

95 lines
1.7 KiB
C++

#ifndef UTLQUEUE_H
#define UTLQUEUE_H
#ifdef _WIN32
#pragma once
#endif
#include "utlvector.h"
template< class T >
class CUtlQueue
{
public:
CUtlQueue(int growSize = 0, int initSize = 0);
CUtlQueue(T* pMemory, int numElements);
T const& RemoveAtHead();
T const& RemoveAtTail();
T const& Head();
T const& Tail();
void Insert(T const& element);
bool Check(T const element);
int Count() const { return m_heap.Count(); }
void RemoveAll() { m_heap.RemoveAll(); }
void Purge() { m_heap.Purge(); }
protected:
CUtlVector<T> m_heap;
T m_current;
};
template< class T >
inline CUtlQueue<T>::CUtlQueue(int growSize, int initSize) :
m_heap(growSize, initSize)
{
}
template< class T >
inline CUtlQueue<T>::CUtlQueue(T* pMemory, int numElements) :
m_heap(pMemory, numElements)
{
}
template <class T>
inline T const& CUtlQueue<T>::RemoveAtHead()
{
m_current = m_heap[0];
m_heap.Remove((int)0);
return m_current;
}
template <class T>
inline T const& CUtlQueue<T>::RemoveAtTail()
{
m_current = m_heap[m_heap.Count() - 1];
m_heap.Remove((int)(m_heap.Count() - 1));
return m_current;
}
template <class T>
inline T const& CUtlQueue<T>::Head()
{
m_current = m_heap[0];
return m_current;
}
template <class T>
inline T const& CUtlQueue<T>::Tail()
{
m_current = m_heap[m_heap.Count() - 1];
return m_current;
}
template <class T>
void CUtlQueue<T>::Insert(T const& element)
{
int index = m_heap.AddToTail();
m_heap[index] = element;
}
template <class T>
bool CUtlQueue<T>::Check(T const element)
{
int index = m_heap.Find(element);
return (index != -1);
}
#endif