open source

This commit is contained in:
lvfulong
2020-11-11 16:17:13 +08:00
parent 4d989f3ecb
commit bc4ca748de
2441 changed files with 623057 additions and 2 deletions
+139
View File
@@ -0,0 +1,139 @@
/**
@file ListNode.h
@brief
@author James
@version 1.0
@date 2016_5_12
*/
#ifndef __ListNode_H__
#define __ListNode_H__
#include <stdio.h>
namespace laya
{
class ListNode
{
public:
ListNode* _Prev;
ListNode* _Next;
int id; // for debug
ListNode(){
_Prev=_Next=this;
static int n=0;
id=n++;
}
virtual ~ListNode(){
//如果在链表上则删除
ListNode* pPrev = _Prev;
ListNode* pNext = _Next;
pPrev->_Next = _Next;
pNext->_Prev = _Prev;
_Next = this;
_Prev = this;
}
inline bool notInChain(){
return _Prev==this && _Next==this;
}
};
/**
* @brief 因为stl的list在删除对象的时候不太方便,需要遍历找到iterator,所以先自己写一个
*/
class simpList
{
protected:
ListNode* pHead; //pHead只是表示头,不是有效内容
int nSize;
public:
simpList(){
pHead = new ListNode();
nSize = 0;
}
~simpList(){
delete pHead;
pHead = 0;
nSize = 0;
}
int size(){
return nSize;
}
//这个不要了使用了。因为与stl的标准不一致。
ListNode* getHead(){
return pHead;
}
//begin是有效值。除非整个list没有内容,那他等于end()
ListNode* begin(){
return pHead->_Next;
}
//end是无效值。就是指向pHead
ListNode* end(){
return pHead;
}
void push_back(ListNode* pNode ){
ListNode* pTail = pHead->_Prev;
if( pTail==pNode)
return;
pTail->_Next = pNode;
pNode->_Prev = pTail;
pNode->_Next = pHead;
pHead->_Prev = pNode;
nSize++;
}
ListNode* pop_back(){
ListNode* pTail = pHead->_Prev;
ListNode* pPrev = pTail->_Prev;
//pnext = phead
pPrev->_Next = pHead;
pHead->_Prev = pPrev;
pTail->_Next= pTail;
pTail->_Prev= pTail;
nSize--;
if(nSize<0)nSize=0;
return pTail;
}
void push_front(ListNode* pNode){
if( pNode==pHead->_Next)
return;
pNode->_Next = pHead->_Next;
pHead->_Next->_Prev=pNode;
pHead->_Next=pNode;
pNode->_Prev = pHead;
nSize++;
}
ListNode* pop_front(){
ListNode* pDel = pHead->_Next;
pDel->_Next->_Prev = pHead;
pHead->_Next = pDel->_Next;
pDel->_Prev=pDel;
pDel->_Next=pDel;
nSize--;
if(nSize<0)nSize=0;
return pDel;
}
//返回下一个节点
ListNode* delNode(ListNode* pNode){
if( pNode->notInChain() )
return NULL;
ListNode* pPrev = pNode->_Prev;
ListNode* pNext = pNode->_Next;
pPrev->_Next = pNode->_Next;
pNext->_Prev = pNode->_Prev;
pNode->_Next = pNode;
pNode->_Prev = pNode;
nSize--;
if(nSize<0)nSize=0;
return pNext;
}
void clear(){
}
};
}
//------------------------------------------------------------------------------
#endif //__ListNode_H__
//-----------------------------END FILE--------------------------------