⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue.h

📁 一个俄国人实现的数据库系统
💻 H
字号:
// specification file for an unlimited queue for storing bytes#ifndef CRYPTOPP_QUEUE_H#define CRYPTOPP_QUEUE_H#include "cryptlib.h"#include <algorithm>NAMESPACE_BEGIN(CryptoPP)/** The queue is implemented as a linked list of arrays, but you don't need to    know about that.  So just ignore this next line. :) */class ByteQueueNode;//! Byte Queueclass ByteQueue : public BufferedTransformation{public:	ByteQueue(unsigned int m_nodeSize=256);	ByteQueue(const ByteQueue &copy);	~ByteQueue();	unsigned long MaxRetrievable() const		{return CurrentSize();}	bool AnyRetrievable() const		{return !IsEmpty();}	void Put(byte inByte);	void Put(const byte *inString, unsigned int length);	unsigned int Get(byte &outByte);	unsigned int Get(byte *outString, unsigned int getMax);	unsigned int Peek(byte &outByte) const;	unsigned int Peek(byte *outString, unsigned int peekMax) const;	unsigned long Skip(unsigned long skipMax=ULONG_MAX);	unsigned long TransferTo(BufferedTransformation &target, unsigned long transferMax=ULONG_MAX);	unsigned long CopyTo(BufferedTransformation &target, unsigned long copyMax=ULONG_MAX) const;	// these member functions are not inherited	unsigned long CurrentSize() const;	bool IsEmpty() const;	void Clear();	void Unget(byte inByte);	void Unget(const byte *inString, unsigned int length);	const byte * Spy(unsigned int &contiguousSize) const;	byte * MakeNewSpace(unsigned int &contiguousSize);	void OccupyNewSpace(unsigned int size);	void LazyPut(const byte *inString, unsigned int size);	void FinalizeLazyPut();	ByteQueue & operator=(const ByteQueue &rhs);	bool operator==(const ByteQueue &rhs) const;	byte operator[](unsigned long i) const;	void swap(ByteQueue &rhs);	class Walker : public BufferedTransformation	{	public:		Walker(const ByteQueue &queue)			: m_queue(queue), m_node(queue.m_head), m_position(0), m_offset(0)			, m_lazyString(queue.m_lazyString), m_lazyLength(queue.m_lazyLength) {}		unsigned long MaxRetrievable() const			{return m_queue.CurrentSize() - m_position;}		void Put(byte inByte) {}		void Put(const byte *inString, unsigned int length) {}		unsigned int Get(byte &outByte);		unsigned int Get(byte *outString, unsigned int getMax);		unsigned int Peek(byte &outByte) const;		unsigned int Peek(byte *outString, unsigned int peekMax) const;		unsigned long Skip(unsigned long skipMax=ULONG_MAX);		unsigned long TransferTo(BufferedTransformation &target, unsigned long transferMax=ULONG_MAX);		unsigned long CopyTo(BufferedTransformation &target, unsigned long copyMax=ULONG_MAX) const;	private:		const ByteQueue &m_queue;		const ByteQueueNode *m_node;		unsigned int m_position, m_offset;		const byte *m_lazyString;		unsigned int m_lazyLength;	};	friend class Walker;private:	void CleanupUsedNodes();	void CopyFrom(const ByteQueue &copy);	void Destroy();	unsigned int m_nodeSize;	ByteQueueNode *m_head, *m_tail;	const byte *m_lazyString;	unsigned int m_lazyLength;};//! use this to make sure LazyPut is finalized in event of exceptionclass LazyPutter{public:	LazyPutter(ByteQueue &bq, const byte *inString, unsigned int size)		: m_bq(bq) {bq.LazyPut(inString, size);}	~LazyPutter()		{try {m_bq.FinalizeLazyPut();} catch(...) {}}private:	ByteQueue &m_bq;};NAMESPACE_ENDNAMESPACE_BEGIN(std)template<> inline void swap(CryptoPP::ByteQueue &a, CryptoPP::ByteQueue &b){	a.swap(b);}NAMESPACE_END#endif

⌨️ 快捷键说明

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