📄 circbuf.cpp
字号:
/********************************************************************** * * Filename: circbuf.cpp * * Description: An easy-to-use circular buffer class. * * Notes: Relies on the Mutex class to protect buffer contents. * * * Copyright (c) 1998 by Michael Barr. This software is placed into * the public domain and may be used for any purpose. However, this * notice must not be changed or removed and no warranty is either * expressed or implied by its publication or distribution. **********************************************************************/#include "adeos.h"#include "circbuf.h"/********************************************************************** * * Method: CircBuf() * * Description: Create a circular buffer. * * Notes: * * Returns: None defined. * **********************************************************************/CircBuf::CircBuf(int nItems){ size = nItems; array = new item[size]; head = 0; tail = 0; count = 0;} /* CircBuf() *//********************************************************************** * * Method: ~CircBuf() * * Description: Destroy a circular buffer. * * Notes: * * Returns: None defined. * **********************************************************************/CircBuf::~CircBuf(void){ delete array;} /* ~CircBuf() *//********************************************************************** * * Method: add() * * Description: Add an item to the buffer. * * Notes: It is up to the caller to check isFull() first, since * there is no convenient way to indicate that error. * * Returns: None defined. * **********************************************************************/voidCircBuf::add(item i){ mutex.take(); if (!isFull()) { array[head] = i; head = (head + 1) % size; count++; } mutex.release();} /* add() *//********************************************************************** * * Method: remove() * * Description: Remove an item from the buffer. * * Notes: It is up to the caller to check isEmpty() first, since * there is no convenient way to indicate that error. * * Returns: The removed item. * **********************************************************************/itemCircBuf::remove(void){ item i; mutex.take(); if (!isEmpty()) { i = array[tail]; tail = (tail + 1) % size; count--; } mutex.release(); return (i);} /* remove() */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -