亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nringbuffer.h

?? 奇跡世界公用文件源代碼,研究網絡游戲的朋友可以研究下
?? H
字號:
#ifndef N_RINGBUFFER_H
#define N_RINGBUFFER_H

//------------------------------------------------------------------------------
/**
    @brief A ring buffer class.

    @author
    - RadonLabs GmbH 

    @since
    - 2005.6.30
    @remarks
    - 瘤肯 眠啊 
*/

#include <memory.h>
#include "../ProgramCommon/Define.h"
//------------------------------------------------------------------------------
template<class TYPE> class nRingBuffer
{
public:
    /// constructor 1
    nRingBuffer(int capacity);
    /// default constructor
    nRingBuffer();
    /// destructor
    ~nRingBuffer();
    /// assignment operator
    nRingBuffer<TYPE>& operator=(const nRingBuffer<TYPE>& src);
    /// initialize, only use when default constructor has been used
    void Initialize(int capacity);
    /// returns true if ringbuffer is valid
    bool IsValid() const;
    /// return true if ringbuffer is empty
    bool IsEmpty() const;
    /// return true if ringbuffer is full
    bool IsFull() const;
    /// add unitialized element to buffer
    TYPE* Add();
    /// deletes the oldest element
    void DeleteTail();
    /// return pointer to head element
    TYPE* GetHead() const;
    /// return pointer to tail element
    TYPE* GetTail() const;
    /// return pointer to next element
    TYPE* GetNext(TYPE* e) const;
    /// return pointer to previous element
    TYPE* GetPrev(TYPE* e) const;
    /// return pointer to start of ringbuffer array
    TYPE* GetStart() const;
    /// return pointer to end of ringbuffer array
    TYPE *GetEnd() const;

private:
    /// copy content
    void Copy(const nRingBuffer<TYPE>& src);
    /// delete all content
    void Delete();

    TYPE *start;                        // start of ring buffer array
    TYPE *end;                          // last element of ring buffer array
    TYPE *tail;                         // oldest valid element
    TYPE *head;                         // youngest element+1
};

//------------------------------------------------------------------------------
/**
*/
template<class TYPE>
nRingBuffer<TYPE>::nRingBuffer<TYPE>(int capacity)
{
    //_num++; // there is always 1 empty element in buffer
    this->start = new TYPE[capacity+1];
    this->end   = this->start + capacity;
    this->tail  = this->start;
    this->head  = this->start;
}

//------------------------------------------------------------------------------
/**
    NOTE: you must call Initialize() when using the default constructor!
*/
template<class TYPE>
nRingBuffer<TYPE>::nRingBuffer<TYPE>() :
    start(0),
    end(0),
    tail(0),
    head(0)
{
    // empty
}

//---------------------------------------------------------------
/**
*/
template<class TYPE>
nRingBuffer<TYPE>::~nRingBuffer<TYPE>()
{
    this->Delete();
}

//---------------------------------------------------------------
/**
*/
template<class TYPE>
void
nRingBuffer<TYPE>::Delete()
{
    if (this->start)
    {
        delete[] this->start;
    }
    start = 0;
    end = 0;
    tail = 0;
    head = 0;
}

//------------------------------------------------------------------------------
/**
*/
template<class TYPE>
void
nRingBuffer<TYPE>::Copy(const nRingBuffer<TYPE>& src)
{
    if(0 != this->start)
    {
        int capacity = src.end - src.start;
        this->start = new TYPE[capacity+1];
        this->end   = this->start + capacity;
        this->tail  = this->start;
        this->head  = this->start;

        memcpy(src.start, this->start, capacity+1);
    }
}

//------------------------------------------------------------------------------
/**
    Initialize with n elements, may only be called when
    default constructor has been used.
*/
template<class TYPE>
void
nRingBuffer<TYPE>::Initialize(int capacity)
{
    ASSERT(!this->start);
    //_num++; // there is always 1 empty element in buffer
    this->start = new TYPE[capacity+1];
    this->end   = this->start + capacity;
    this->tail  = this->start;
    this->head  = this->start;
}

//------------------------------------------------------------------------------
/**
*/
template<class TYPE>
nRingBuffer<TYPE>&
nRingBuffer<TYPE>::operator=(const nRingBuffer<TYPE>& src)
{
    this->Delete();
    this->Copy(src);
    return *this;
}

//------------------------------------------------------------------------------
/**
    Return true if ring buffer is valid.
*/
template<class TYPE>
bool
nRingBuffer<TYPE>::IsValid() const
{
    return (0 != this->start);
}

//------------------------------------------------------------------------------
/**
    Checks if ring buffer is empty

    Returns true if head and tail are in the same position otherwise
    false.
*/
template<class TYPE>
bool
nRingBuffer<TYPE>::IsEmpty() const
{
    return (this->head == this->tail);
}

//------------------------------------------------------------------------------
/**
    Checks if ring buffer is full
*/
template<class TYPE>
bool
nRingBuffer<TYPE>::IsFull() const
{
    TYPE* e = this->head;
    if (e == this->end)
    {
        e = this->start;
    }
    else
    {
        e++;
    }

    return (e == this->tail);
}

//------------------------------------------------------------------------------
/**
    Add new unitialized head element to ringbuffer.
*/
template<class TYPE>
TYPE*
nRingBuffer<TYPE>::Add()
{
    ASSERT(this->start);
    ASSERT(!this->IsFull());
    TYPE *e = this->head;
    if (this->head == this->end)
    {
        this->head = this->start;
    }
    else
    {
        this->head++;
    }
    return e;
}

//------------------------------------------------------------------------------
/**
    Delete the oldest element
*/
template<class TYPE>
void
nRingBuffer<TYPE>::DeleteTail()
{
    ASSERT(this->start);
    ASSERT(!this->IsEmpty());
    if (this->tail == this->end)
    {
        this->tail = this->start;
    } else
    {
        this->tail++;
    }
}

//------------------------------------------------------------------------------
/**
    Return head element (youngest element).
*/
template<class TYPE>
TYPE*
nRingBuffer<TYPE>::GetHead() const
{
    if (this->head == this->tail)
    {
        // empty ringbuffer
        return 0;
    }
    TYPE *e = this->head - 1;
    if (e < this->start)
    {
        e = this->end;
    }
    return e;
}

//------------------------------------------------------------------------------
/**
    Return tail element (oldest element).
*/
template<class TYPE>
TYPE*
nRingBuffer<TYPE>::GetTail() const
{
    if (this->head == this->tail)
    {
        // empty ringbuffer
        return 0;
    }
    return this->tail;
};

//------------------------------------------------------------------------------
/**
    Get next element (from tail to head).
*/
template<class TYPE>
TYPE*
nRingBuffer<TYPE>::GetNext(TYPE* e) const
{
    ASSERT(e);
    ASSERT(this->start);
    if (e == this->end)
    {
        e = this->start;
    } else
    {
        e++;
    }
    if (e == this->head)
    {
        return 0;
    } else
    {
        return e;
    }
}

//------------------------------------------------------------------------------
/**
    Get previous element (from head to tail).
*/
template<class TYPE>
TYPE*
nRingBuffer<TYPE>::GetPrev(TYPE* e) const
{
    ASSERT(e);
    if (e == tail)
    {
        return 0;
    }

    if (e == start)
    {
        return end;
    }
    else
    {
        return e-1;
    }
}

//------------------------------------------------------------------------------
/**
    Return physical start of ringbuffer array.
    Only useful for accessing the ringbuffer array elements directly.
*/
template<class TYPE>
TYPE*
nRingBuffer<TYPE>::GetStart() const
{
    return this->start;
}

//------------------------------------------------------------------------------
/**
    Return physical end of ringbuffer array.
    Only useful for accessing the ringbuffer array elements directly.
*/
template<class TYPE>
TYPE*
nRingBuffer<TYPE>::GetEnd() const
{
    return this->end;
}

//------------------------------------------------------------------------------
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级黄色片| 欧美主播一区二区三区| 夜夜嗨av一区二区三区中文字幕| 欧美三级乱人伦电影| 国产成人免费视频| 偷拍与自拍一区| 亚洲欧美国产77777| 久久综合av免费| 日韩一级高清毛片| 欧洲一区在线观看| 99精品黄色片免费大全| 久久精品国产免费看久久精品| 日本女人一区二区三区| 欧美激情一区不卡| 久久夜色精品一区| 日韩精品一区二区三区在线观看 | av一区二区三区在线| 激情另类小说区图片区视频区| 天堂午夜影视日韩欧美一区二区| 亚洲日本va在线观看| 国产精品毛片久久久久久| 精品国产污污免费网站入口| 欧美怡红院视频| 美女一区二区久久| 日本欧美一区二区三区乱码 | 国产精品高潮呻吟久久| 久久精品人人做人人爽97| 亚洲一级二级在线| 国产精品免费视频一区| 国产欧美一区在线| 国产精品国产三级国产普通话蜜臀| 久久久精品免费网站| 亚洲国产精品国自产拍av| 中文字幕永久在线不卡| 亚洲卡通动漫在线| 蜜桃av一区二区| 国产精品资源网| 99国产精品久久久久久久久久 | 91精品综合久久久久久| 日韩一区二区三区四区| 国产午夜精品福利| 亚洲一区二区在线播放相泽| 日本91福利区| 99精品视频一区| 91精品国产欧美一区二区18| wwww国产精品欧美| 亚洲电影中文字幕在线观看| 国产一区二区三区黄视频 | 中文子幕无线码一区tr| 亚洲成人激情社区| 国产一区二区三区| 欧美日韩中文另类| 国产精品全国免费观看高清| 天堂成人免费av电影一区| 国产成都精品91一区二区三| 777精品伊人久久久久大香线蕉| 另类综合日韩欧美亚洲| 亚洲一区二区欧美| 蜜臀av亚洲一区中文字幕| 日本精品裸体写真集在线观看 | 国产精品久线观看视频| 日韩在线一二三区| 欧美日韩在线播放一区| 亚洲欧美另类图片小说| 国产福利91精品一区| 日韩欧美在线综合网| 午夜欧美视频在线观看| 日本电影亚洲天堂一区| 综合欧美亚洲日本| 波多野结衣中文一区| 国产欧美日韩综合| 国产成a人亚洲精| 久久免费电影网| 国产在线乱码一区二区三区| 精品久久久久一区二区国产| 久久99精品国产.久久久久久| 在线91免费看| 精品综合免费视频观看| www精品美女久久久tv| 福利一区二区在线| 亚洲手机成人高清视频| 欧美在线短视频| 日韩成人免费电影| 久久久久久久久久久久久久久99| 国产成人一区二区精品非洲| 欧美高清在线视频| 欧美日韩一区二区在线观看视频| 午夜国产不卡在线观看视频| 亚洲精品高清在线| 色综合天天天天做夜夜夜夜做| 亚洲第一狼人社区| 久久亚洲免费视频| 欧美影院午夜播放| 韩国v欧美v日本v亚洲v| 亚洲免费在线看| 亚洲精品在线网站| 91在线精品一区二区| 婷婷一区二区三区| 欧美高清视频不卡网| 日韩avvvv在线播放| 亚洲婷婷综合久久一本伊一区| 欧美日韩小视频| 成人a级免费电影| 免费三级欧美电影| 亚洲小说欧美激情另类| 久久久久99精品国产片| 欧美欧美欧美欧美| 91在线看国产| 粉嫩av一区二区三区粉嫩| 日韩精品乱码av一区二区| 日韩精品一级二级 | 日韩一级黄色大片| 欧洲精品中文字幕| av影院午夜一区| 国产成人免费xxxxxxxx| 精品午夜一区二区三区在线观看| 亚洲高清免费观看 | 日韩欧美一二三区| 欧美精品色综合| 欧美三级中文字| 欧美美女视频在线观看| 欧美少妇xxx| 精品视频999| 6080国产精品一区二区| 欧美日韩精品一区视频| 在线播放欧美女士性生活| 欧美日韩在线播放| 7777精品伊人久久久大香线蕉超级流畅| 99久久99久久久精品齐齐| 色婷婷综合久色| 欧美亚洲综合色| 欧美片在线播放| 欧美mv日韩mv国产| 一区二区在线电影| 日韩国产欧美三级| 久久国产精品72免费观看| 国产成人免费视频精品含羞草妖精| 粉嫩欧美一区二区三区高清影视 | 欧美精品高清视频| 一道本成人在线| 欧美午夜精品电影| 欧美成人免费网站| 欧美激情一区二区在线| 中文字幕人成不卡一区| 亚洲欧美日韩国产一区二区三区| 亚洲小说春色综合另类电影| 麻豆成人免费电影| av网站一区二区三区| 欧美精选午夜久久久乱码6080| 精品伦理精品一区| 亚洲欧美日韩人成在线播放| 日韩福利视频网| 91片黄在线观看| 日韩午夜中文字幕| 亚洲手机成人高清视频| 精品一区二区三区av| 欧美日韩卡一卡二| 国产精品天干天干在观线| 欧美aaa在线| 日本精品视频一区二区| 国产精品三级av| 精品夜夜嗨av一区二区三区| 欧美在线高清视频| 国产精品乱人伦中文| 黄色日韩三级电影| 欧美一区二区三区精品| 亚洲综合清纯丝袜自拍| 色呦呦一区二区三区| 国产精品日日摸夜夜摸av| 国产成人在线视频播放| 精品久久久久久久久久久久包黑料 | 欧美成人vps| 日本不卡1234视频| 欧美日韩久久久一区| 亚洲成人一二三| 中文字幕日本不卡| 春色校园综合激情亚洲| 日本一区二区免费在线观看视频| 久久国产精品99久久久久久老狼 | 肉色丝袜一区二区| 欧美日韩激情一区| 日本一区二区三区电影| 成人一区二区三区视频| 国产视频亚洲色图| 99热精品国产| 亚洲第一二三四区| 日韩欧美国产小视频| 处破女av一区二区| 亚洲精品写真福利| 欧美日韩视频专区在线播放| 麻豆视频一区二区| 亚洲国产精品国自产拍av| 在线观看网站黄不卡| 蜜臀久久99精品久久久久宅男| 精品国产三级a在线观看| 国产成人免费视频一区| 亚洲欧美另类小说| 精品国产一区二区国模嫣然| 成人av在线观| 97精品超碰一区二区三区|