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

📄 freelist.h

📁 pocket_crf_0.45
💻 H
字号:
/*  freelist.h 2007-03-29  Modified from CRF++ toolkit http://sourceforge.net/projects/crfpp/    Author taku*/#ifndef FREELIST_H#define FREELIST_H//block array#include <vector>using namespace std;template <class T>class length//for any T[], its default length is 1{	public:	size_t operator()(const T *str) const { return 1; }};template <class T, class length_func = length<T> >class freelist {private:	vector <T *> element;	size_t c;//col	size_t r;//row	size_t size;	bool empty;public:	void free(){r=c=0;}	T* alloc(size_t len = 1)	{		if ((c+len) >= size)		{				r++;			c=0;		}		if (r == element.size()) 			element.push_back(new T[size]);		T* ret=element[r]+c;		c+=len;		if(len)			empty=false;		return ret;	}	T* push_back(T *src, size_t len = 0)	{		if(!len)			len=length_func()(src);		T *ret=alloc(len);		if(src==0)			memset(ret,0,len*sizeof(T));		else			memcpy(ret,src,len*sizeof(T));		return ret;	}	void set_size(size_t n) { size = n; }	explicit freelist(size_t _size): c(0), r(0), size(_size) ,empty(true){}	explicit freelist(): c(0), r(0), size(0) {}	void clear()	{		if(empty) return;		for (r = 0; r < element.size(); r++)			delete [] element[r];		r=c=0;		element.clear();		vector<T *>(element).swap(element);		empty=true;	}	virtual ~freelist()	{		clear();	}};#endif

⌨️ 快捷键说明

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