ringbuf.hpp

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· HPP 代码 · 共 98 行

HPP
98
字号
/* -*-C-*-
 *
 * $Revision: 1.2 $
 *   $Author: kwelton $
 *     $Date: 2000/06/14 03:38:23 $
 *
 * ringbuf:
 * 
 * Class implementing a simple ring buffer
 *
 * Copyright (c) 2000 ARM Limited
 * All Rights Reserved
 */
#ifndef ringbuf_hpp
#define ringbuf_hpp

class RingBuf
{
  public:
    RingBuf(void)
    {
        fillindex = drainindex = 0;
        indexmask = 0x07;
        buffer = new unsigned int[8];
    }

    ~RingBuf(void)
    {
        delete[] buffer;
    }

    inline bool add(unsigned int value)
    {
        if (fillindex != ((drainindex - 1) & indexmask))
        {
            buffer[fillindex] = value;

            ++fillindex;
            fillindex &= indexmask;

            return true;
        }
        else
            return false;
    }

    inline bool extract(unsigned int *value)
    {
        if (drainindex != fillindex)
        {
            *value = buffer[drainindex];

            ++drainindex;
            drainindex &= indexmask;

            return true;
        }
        else
            return false;
    }

    inline bool peek(unsigned int *value)
    {
        if (drainindex != fillindex)
        {
            *value = buffer[drainindex];

            return true;
        }
        else
            return false;
    }

    inline void advancedrain(void)
    {
        if (drainindex != fillindex)
        {
            ++drainindex;
            drainindex &= indexmask;
        }
    }

    inline bool empty(void)
    {
        return fillindex == drainindex;
    }

  private:
    unsigned int fillindex;
    unsigned int drainindex;
    unsigned int *buffer;
    unsigned int indexmask;
};

#endif /* ndef ringbuf_hpp */

/* EOF ringbuf.hpp */

⌨️ 快捷键说明

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