c_cpp 用于嵌入式程序的小型RingQueue(例如Arduino,AVR,mbed等。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 用于嵌入式程序的小型RingQueue(例如Arduino,AVR,mbed等。相关的知识,希望对你有一定的参考价值。

#ifndef __RINGQUEUE_H__
#define __RINGQUEUE_H__

#define DEFAULT_MAX_SIZE	16


template<typename T>
class RingQueue
{
public:
	RingQueue(unsigned int size = DEFAULT_MAX_SIZE)
	: mMaxSize(size)
	{
		mHead = mTail = 0;
		mQueue = new T[mMaxSize];
	};
	~RingQueue()	{ delete[] mQueue; };

	int		size()	{ return  (mTail-mHead); };
	bool	empty()	{ return !(mTail-mHead); };
	void	clear() { mHead = 0; mTail = 0; };
	void	pop()	{ mHead++; };
	void	push(T data)
	{
		mQueue[(mTail++)%mMaxSize] = data;
		if		(size() >= mMaxSize)	mHead++;
		else if	(size() <  0)			clear();
	};

	T& front()
	{
		return *(empty() ? NULL : mQueue+mHead%mMaxSize);
	};

	T& back()
	{
		return *(empty() ? NULL : mQueue+(mTail-1)%mMaxSize);
	}

private:

	volatile unsigned int mHead;
	volatile unsigned int mTail;
	const unsigned int mMaxSize;
	T* mQueue;

};

#endif	// __RINGQUEUE_H__

以上是关于c_cpp 用于嵌入式程序的小型RingQueue(例如Arduino,AVR,mbed等。的主要内容,如果未能解决你的问题,请参考以下文章

专门用于小型数据且几乎没有写入的嵌入式数据库?

c_cpp C ++中的小型多态系统

c_cpp 带有putc打印的小型trie框架

如何在 Java 应用程序中设置 H2 嵌入式数据库以在小型网络中使用?

当前主流的小型嵌入式GUI有哪些?

如何制作一个嵌入 H2 的演示 JHipster 用于“生产”