⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cyclicbuf.h

📁 此程序为分布式坦克游戏
💻 H
字号:
/*****************************************************************************
*                                                                             
*   CyclicBuf.h
*                                                                             
*   Electrical Engineering Faculty - Software Lab                             
*   Spring semester 1998                                                      
*                                                                             
*   Tanks game                                                                
*                                                                             
*   Module description: Template implementing a cyclic buffer.
*                       
*                                                                             
*   Authors: Eran Yariv - 28484475                                           
*            Moshe Zur  - 24070856                                           
*                                                                            
*                                                                            
*   Date: 23/09/98                                                           
*                                                                            
******************************************************************************/
#ifndef _CYCLIC_BUFFER_H
#define _CYCLIC_BUFFER_H

template <class T, UINT uInitialSize> 
class CCyclicBuffer
{
public:

    CCyclicBuffer ();
    CCyclicBuffer (const T val);
    virtual ~CCyclicBuffer() {}

    void Clear (const T val);           // Sets all elements to val
    T AddHead (const T val);            // Returns previous value (removed)

    T& operator[] (UINT i);             // Access the i'th element 
    T  operator[] (UINT i) const;       // Access the i'th element 

private:
    T       m_Buff[uInitialSize];
    UINT    m_uCurInd;
};

template <class T, UINT uInitialSize> 
inline 
CCyclicBuffer<T, uInitialSize>::CCyclicBuffer () :
    m_uCurInd (0)
{
    ASSERT (uInitialSize > 1);
}

template <class T, UINT uInitialSize> 
inline 
CCyclicBuffer<T, uInitialSize>::CCyclicBuffer (const T val) :
    m_uCurInd (0)
{
    ASSERT (uInitialSize > 1);
    Clear (val);
}

template <class T, UINT uInitialSize> 
inline 
void CCyclicBuffer<T, uInitialSize>::Clear (const T val) 
{
    for (UINT u=0; u<uInitialSize; u++)
        m_Buff[u] = val;        // Requires operator = from T
}

template <class T, UINT uInitialSize> 
inline 
T& CCyclicBuffer<T, uInitialSize>::operator [] (UINT i)
{
    ASSERT (i < uInitialSize);
    return m_Buff[(i + m_uCurInd) % uInitialSize];
}

template <class T, UINT uInitialSize> 
inline 
T CCyclicBuffer<T, uInitialSize>::operator [] (UINT i) const
{
    ASSERT (i < uInitialSize);
    return m_Buff[(i + m_uCurInd) % uInitialSize];
}


template <class T, UINT uInitialSize> 
T CCyclicBuffer<T, uInitialSize>::AddHead (const T val) 
{
    if (0 == m_uCurInd)
        m_uCurInd = uInitialSize - 1;
    else
        m_uCurInd--;
    T prevVal = m_Buff[m_uCurInd];
    m_Buff[m_uCurInd] = val;
    return prevVal;
}

#endif // _CYCLIC_BUFFER_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -