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

📄 circlequeue.cpp

📁 这是一个linux下的Shell.有命令历史和命令提示
💻 CPP
字号:
#include <unistd.h>#include <fcntl.h>#include "CircleQueue.h"CircleQueue::CircleQueue(int size){	num  = size;	cur  = tail = head = 0;	num_cur = 0;}char* CircleQueue::getCur(void){	if(cur)	{		char* o = new char[strlen(cur->ptr)+1];		strcpy(o,cur->ptr);		return o;	}	return 0;}void CircleQueue::incCur(void){	if(cur)		cur = (cur==head)?tail:cur->pre;}void CircleQueue::devCur(void){	if(cur)		cur = (cur==tail)?head:cur->next;}void CircleQueue::inset(char* p){	if(!head)		cur = tail = head = new Node_Queue(p,0,0);		else if(tail == head)		head->next = tail->pre = cur = head = head->inset(p);	else		cur = head = head->inset(p);				num_cur++;	if(num_cur > num )		del();}void CircleQueue::initffile(char* filepath){	head = 0;	cur = 0;		if(!filepath)		return;	int fid = open(filepath,O_RDONLY);	if(fid >= 0)	{		struct stat fileinfo;		fstat(fid,&fileinfo);				int SIZE = fileinfo.st_size;		char a;		int start = 0;		do		{			read(fid,&a,1);			start++;		}while(a!='\n');		for(int i = start;i < (SIZE - 1); i++)		{			read(fid,&a,1);			if(a == '\n')			{				lseek(fid,start,SEEK_SET);				char* work = new char[i - start + 1];				read(fid,work,i - start + 1);				work[i - start] = 0;				inset(work);				start = i+1;			}			}		close(fid);	}}void CircleQueue::del(void){	if(tail)	{		tail = tail->del();			num_cur--;	}	if(!num_cur)		cur=head=0;}void  CircleQueue::setSize(int size){	if(size <= 0)						//If size <= 0, I will clear the CircleQueue.	{		for(int i = 0; i < num_cur;i++)			del();		num=0;		num_cur = 0;		cur=tail=head=0;	}	else	{		num = size;		for(int i = 0; i < num_cur-size;i++)			del();			}}void CircleQueue::show(int fid, bool reversFlag){	if(fid < 0 || !head)		return;	if(!reversFlag)											{		Node_Queue* work = head;		do		{			write(fid, work->ptr, strlen(work->ptr));			write(fid, "\n", 1);			work = work->next;		}while(work != tail);		write(fid, work->ptr, strlen(work->ptr));		write(fid, "\n", 1);		write(fid, "\0", 1);	}	else						//show as revers order.tail first, head last.														{		Node_Queue* work = tail;		do		{			write(fid, work->ptr, strlen(work->ptr));			write(fid, "\n", 1);			work = work->pre;		}while(work != head);		write(fid, work->ptr, strlen(work->ptr));		write(fid, "\n", 1);		write(fid, "\0", 1);	}	return;}

⌨️ 快捷键说明

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