?? tcsbl.h
字號:
/* -*- C++ -*- */
//=============================================================================
/**
* @文件 TcsBL.h
*
* TcsBL.h, 版本 1.30 2008/12/15
*
* @作者 鄧雪清 <xueqingdeng@sohu.com>
* 雙向鏈表類
*/
//=============================================================================
#ifndef _TCS_BL_H_
#define _TCS_BL_H_
#if !defined (_WIN32)
#define DLLEXPORT
#elif !defined (DLLEXPORT)
#if defined (_LIB)
#define DLLEXPORT
#elif defined (_USRDLL)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
#endif
#include <Windows.h>
// ----- CTcsBL -------------------------------------------------------------
class DLLEXPORT CTcsBL
{
protected:
struct NODE {
NODE *prev;
NODE *next;
void *data;
};
public:
CTcsBL(void);
~CTcsBL(void);
void Lock(void);
void Lose(void);
long GetSize(void);
void *GetHead(void);
void *GetTail(void);
void *AddHead(void *pData);
void *AddTail(void *pData);
void *AddNext(void *pNode, void *pData);
void *AddPrev(void *pNode, void *pData);
void *GetNext(void);
void *GetPrev(void);
void *GetAt(long idx);
long SetAt(long idx, void *pData);
void *AddAt(long idx, void *pData);
void *RemoveHead(void);
void *RemoveTail(void);
void *RemoveAt(long idx);
void *RemoveAt(void *pNode);
protected:
NODE *NewNode(NODE *pPrev, NODE *pNext);
protected:
NODE *m_pHead;
NODE *m_pTail;
NODE *m_pNonc;
long m_nNonc;
NODE *m_pFree;
void *m_mLock;
long m_nSize;
};
inline void CTcsBL::Lock(void)
{
::WaitForSingleObject(m_mLock, INFINITE);
}
inline void CTcsBL::Lose(void)
{
::ReleaseMutex(m_mLock);
}
inline long CTcsBL::GetSize(void)
{
return m_nSize;
}
inline void *CTcsBL::GetHead(void)
{
if (m_nSize > 0)
{
m_nNonc = 0;
m_pNonc = m_pHead;
return m_pHead->data;
}
else
return 0;
}
inline void *CTcsBL::GetTail(void)
{
if (m_nSize > 0)
{
m_pNonc = m_pTail;
m_nNonc = m_nSize - 1;
return m_pTail->data;
}
else
return 0;
}
inline void *CTcsBL::GetNext(void)
{
if (!(m_pNonc->next))
return 0;
m_pNonc = m_pNonc->next;
m_nNonc++;
return m_pNonc->data;
}
inline void *CTcsBL::GetPrev(void)
{
if (!(m_pNonc->prev))
return 0;
m_pNonc = m_pNonc->prev;
m_nNonc--;
return m_pNonc->data;
}
#endif // _TCS_BL_H_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -