双缓冲循环队列DLL

2014年4月7日 由 Creater 留言 »

周末无事,写了个循环队列的dll,一方面考虑到后面项目中需要这个数据结构,另外很久没写程序了,就当练下手。

这个循环队列采用的是双缓冲,按块复制,相对来说效率还是比较高,先给出头文件:

#pragma once
#ifndef CIRCULAR_QUEUE
#define CIRCULAR_QUEUE

#ifdef DLL_IMPLEMENT
	#define DLL_API __declspec(dllexport)
#else
	#define DLL_API __declspec(dllimport)
#endif

#include <string>

class DLL_API CircularQueue
{
public:
	CircularQueue(size_t size);
	~CircularQueue();

	/** 写入p开始的n字节,返回true正确,false失败 */
	bool enqueue(const char *p, size_t n);
	/** 读取n字节到dest,返回true正确,false失败 */
	bool dequeue(char *dest, size_t n);
	/** 删除n字节 ,返回true正确,false失败*/
	bool remove(size_t n);
	/** n个字节以字符串形式返回,返回true正确,false失败*/
	std::string readString(size_t n);

	/** 循环队列是否空 */
	bool isEmpty() const;
	/** 返回当前有效的数据字节数  */
	size_t getLength() const;
	/** 返回循环队列容量 */
	size_t getCapacity() const;
	/** 返回循环队列空闲字节数 */
	size_t space() const;
	/** 写入到缓冲区的总字节数 */
	unsigned long bytesCounter(bool clear = false);

	/** 返回循环队有效区头地址 */
	const char *getStart() const;

	/**打印循环队列中有效数据*/
	void printQueueOnlyUsed(bool displayDir) const;
	/**打印循环队列所有数据*/
	void printQueueAll(bool displayDir) const;
private:
	CircularQueue(const CircularQueue& ) {}
	CircularQueue& operator=(const CircularQueue& ) { return *this; }
	char *buf;
	size_t m_max_size;
	size_t m_used;
	size_t m_head_index;
	size_t m_tail_index;
	unsigned long m_enqueue_count;
};
#undef DLL_IMPLEMENT
#endif

另外提供头文件和dll的下载地址:

  双缓冲循环队列 (unknown, 1,016 hits)

广告位

评论已关闭.