亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? afxtempl.h

?? 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)設(shè)計(jì)
?? H
?? 第 1 頁 / 共 4 頁
字號(hào):

template<class TYPE, class ARG_TYPE>
void CList<TYPE, ARG_TYPE>::AddTail(CList* pNewList)
{
	ASSERT_VALID(this);
	ASSERT(pNewList != NULL);
	ASSERT_VALID(pNewList);

	// add a list of same elements
	POSITION pos = pNewList->GetHeadPosition();
	while (pos != NULL)
		AddTail(pNewList->GetNext(pos));
}

template<class TYPE, class ARG_TYPE>
TYPE CList<TYPE, ARG_TYPE>::RemoveHead()
{
	ASSERT_VALID(this);
	ASSERT(m_pNodeHead != NULL);  // don't call on empty list !!!
	ASSERT(AfxIsValidAddress(m_pNodeHead, sizeof(CNode)));

	CNode* pOldNode = m_pNodeHead;
	TYPE returnValue = pOldNode->data;

	m_pNodeHead = pOldNode->pNext;
	if (m_pNodeHead != NULL)
		m_pNodeHead->pPrev = NULL;
	else
		m_pNodeTail = NULL;
	FreeNode(pOldNode);
	return returnValue;
}

template<class TYPE, class ARG_TYPE>
TYPE CList<TYPE, ARG_TYPE>::RemoveTail()
{
	ASSERT_VALID(this);
	ASSERT(m_pNodeTail != NULL);  // don't call on empty list !!!
	ASSERT(AfxIsValidAddress(m_pNodeTail, sizeof(CNode)));

	CNode* pOldNode = m_pNodeTail;
	TYPE returnValue = pOldNode->data;

	m_pNodeTail = pOldNode->pPrev;
	if (m_pNodeTail != NULL)
		m_pNodeTail->pNext = NULL;
	else
		m_pNodeHead = NULL;
	FreeNode(pOldNode);
	return returnValue;
}

template<class TYPE, class ARG_TYPE>
POSITION CList<TYPE, ARG_TYPE>::InsertBefore(POSITION position, ARG_TYPE newElement)
{
	ASSERT_VALID(this);

	if (position == NULL)
		return AddHead(newElement); // insert before nothing -> head of the list

	// Insert it before position
	CNode* pOldNode = (CNode*) position;
	CNode* pNewNode = NewNode(pOldNode->pPrev, pOldNode);
	pNewNode->data = newElement;

	if (pOldNode->pPrev != NULL)
	{
		ASSERT(AfxIsValidAddress(pOldNode->pPrev, sizeof(CNode)));
		pOldNode->pPrev->pNext = pNewNode;
	}
	else
	{
		ASSERT(pOldNode == m_pNodeHead);
		m_pNodeHead = pNewNode;
	}
	pOldNode->pPrev = pNewNode;
	return (POSITION) pNewNode;
}

template<class TYPE, class ARG_TYPE>
POSITION CList<TYPE, ARG_TYPE>::InsertAfter(POSITION position, ARG_TYPE newElement)
{
	ASSERT_VALID(this);

	if (position == NULL)
		return AddTail(newElement); // insert after nothing -> tail of the list

	// Insert it before position
	CNode* pOldNode = (CNode*) position;
	ASSERT(AfxIsValidAddress(pOldNode, sizeof(CNode)));
	CNode* pNewNode = NewNode(pOldNode, pOldNode->pNext);
	pNewNode->data = newElement;

	if (pOldNode->pNext != NULL)
	{
		ASSERT(AfxIsValidAddress(pOldNode->pNext, sizeof(CNode)));
		pOldNode->pNext->pPrev = pNewNode;
	}
	else
	{
		ASSERT(pOldNode == m_pNodeTail);
		m_pNodeTail = pNewNode;
	}
	pOldNode->pNext = pNewNode;
	return (POSITION) pNewNode;
}

template<class TYPE, class ARG_TYPE>
void CList<TYPE, ARG_TYPE>::RemoveAt(POSITION position)
{
	ASSERT_VALID(this);

	CNode* pOldNode = (CNode*) position;
	ASSERT(AfxIsValidAddress(pOldNode, sizeof(CNode)));

	// remove pOldNode from list
	if (pOldNode == m_pNodeHead)
	{
		m_pNodeHead = pOldNode->pNext;
	}
	else
	{
		ASSERT(AfxIsValidAddress(pOldNode->pPrev, sizeof(CNode)));
		pOldNode->pPrev->pNext = pOldNode->pNext;
	}
	if (pOldNode == m_pNodeTail)
	{
		m_pNodeTail = pOldNode->pPrev;
	}
	else
	{
		ASSERT(AfxIsValidAddress(pOldNode->pNext, sizeof(CNode)));
		pOldNode->pNext->pPrev = pOldNode->pPrev;
	}
	FreeNode(pOldNode);
}

template<class TYPE, class ARG_TYPE>
POSITION CList<TYPE, ARG_TYPE>::FindIndex(int nIndex) const
{
	ASSERT_VALID(this);

	if (nIndex >= m_nCount || nIndex < 0)
		return NULL;  // went too far

	CNode* pNode = m_pNodeHead;
	while (nIndex--)
	{
		ASSERT(AfxIsValidAddress(pNode, sizeof(CNode)));
		pNode = pNode->pNext;
	}
	return (POSITION) pNode;
}

template<class TYPE, class ARG_TYPE>
POSITION CList<TYPE, ARG_TYPE>::Find(ARG_TYPE searchValue, POSITION startAfter) const
{
	ASSERT_VALID(this);

	CNode* pNode = (CNode*) startAfter;
	if (pNode == NULL)
	{
		pNode = m_pNodeHead;  // start at head
	}
	else
	{
		ASSERT(AfxIsValidAddress(pNode, sizeof(CNode)));
		pNode = pNode->pNext;  // start after the one specified
	}

	for (; pNode != NULL; pNode = pNode->pNext)
		if (CompareElements<TYPE>(&pNode->data, &searchValue))
			return (POSITION)pNode;
	return NULL;
}

template<class TYPE, class ARG_TYPE>
void CList<TYPE, ARG_TYPE>::Serialize(CArchive& ar)
{
	ASSERT_VALID(this);

	CObject::Serialize(ar);

	if (ar.IsStoring())
	{
		ar.WriteCount(m_nCount);
		for (CNode* pNode = m_pNodeHead; pNode != NULL; pNode = pNode->pNext)
		{
			ASSERT(AfxIsValidAddress(pNode, sizeof(CNode)));
			SerializeElements<TYPE>(ar, &pNode->data, 1);
		}
	}
	else
	{
		DWORD nNewCount = ar.ReadCount();
		while (nNewCount--)
		{
			TYPE newData;
			SerializeElements<TYPE>(ar, &newData, 1);
			AddTail(newData);
		}
	}
}

#ifdef _DEBUG
template<class TYPE, class ARG_TYPE>
void CList<TYPE, ARG_TYPE>::Dump(CDumpContext& dc) const
{
	CObject::Dump(dc);

	dc << "with " << m_nCount << " elements";
	if (dc.GetDepth() > 0)
	{
		POSITION pos = GetHeadPosition();
		while (pos != NULL)
		{
			dc << "\n";
			DumpElements<TYPE>(dc, &((CList*)this)->GetNext(pos), 1);
		}
	}

	dc << "\n";
}

template<class TYPE, class ARG_TYPE>
void CList<TYPE, ARG_TYPE>::AssertValid() const
{
	CObject::AssertValid();

	if (m_nCount == 0)
	{
		// empty list
		ASSERT(m_pNodeHead == NULL);
		ASSERT(m_pNodeTail == NULL);
	}
	else
	{
		// non-empty list
		ASSERT(AfxIsValidAddress(m_pNodeHead, sizeof(CNode)));
		ASSERT(AfxIsValidAddress(m_pNodeTail, sizeof(CNode)));
	}
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
class CMap : public CObject
{
protected:
	// Association
	struct CAssoc
	{
		CAssoc* pNext;
		UINT nHashValue;  // needed for efficient iteration
		KEY key;
		VALUE value;
	};
public:
// Construction
	CMap(int nBlockSize = 10);

// Attributes
	// number of elements
	int GetCount() const;
	BOOL IsEmpty() const;

	// Lookup
	BOOL Lookup(ARG_KEY key, VALUE& rValue) const;

// Operations
	// Lookup and add if not there
	VALUE& operator[](ARG_KEY key);

	// add a new (key, value) pair
	void SetAt(ARG_KEY key, ARG_VALUE newValue);

	// removing existing (key, ?) pair
	BOOL RemoveKey(ARG_KEY key);
	void RemoveAll();

	// iterating all (key, value) pairs
	POSITION GetStartPosition() const;
	void GetNextAssoc(POSITION& rNextPosition, KEY& rKey, VALUE& rValue) const;

	// advanced features for derived classes
	UINT GetHashTableSize() const;
	void InitHashTable(UINT hashSize, BOOL bAllocNow = TRUE);

// Implementation
protected:
	CAssoc** m_pHashTable;
	UINT m_nHashTableSize;
	int m_nCount;
	CAssoc* m_pFreeList;
	struct CPlex* m_pBlocks;
	int m_nBlockSize;

	CAssoc* NewAssoc();
	void FreeAssoc(CAssoc*);
	CAssoc* GetAssocAt(ARG_KEY, UINT&) const;

public:
	~CMap();
	void Serialize(CArchive&);
#ifdef _DEBUG
	void Dump(CDumpContext&) const;
	void AssertValid() const;
#endif
};

/////////////////////////////////////////////////////////////////////////////
// CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> inline functions

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
AFX_INLINE int CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::GetCount() const
	{ return m_nCount; }
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
AFX_INLINE BOOL CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::IsEmpty() const
	{ return m_nCount == 0; }
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
AFX_INLINE void CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::SetAt(ARG_KEY key, ARG_VALUE newValue)
	{ (*this)[key] = newValue; }
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
AFX_INLINE POSITION CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::GetStartPosition() const
	{ return (m_nCount == 0) ? NULL : BEFORE_START_POSITION; }
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
AFX_INLINE UINT CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::GetHashTableSize() const
	{ return m_nHashTableSize; }

/////////////////////////////////////////////////////////////////////////////
// CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> out-of-line functions

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::CMap(int nBlockSize)
{
	ASSERT(nBlockSize > 0);

	m_pHashTable = NULL;
	m_nHashTableSize = 17;  // default size
	m_nCount = 0;
	m_pFreeList = NULL;
	m_pBlocks = NULL;
	m_nBlockSize = nBlockSize;
}

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
void CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::InitHashTable(
	UINT nHashSize, BOOL bAllocNow)
//
// Used to force allocation of a hash table or to override the default
//   hash table size of (which is fairly small)
{
	ASSERT_VALID(this);
	ASSERT(m_nCount == 0);
	ASSERT(nHashSize > 0);

	if (m_pHashTable != NULL)
	{
		// free hash table
		delete[] m_pHashTable;
		m_pHashTable = NULL;
	}

	if (bAllocNow)
	{
		m_pHashTable = new CAssoc* [nHashSize];
		memset(m_pHashTable, 0, sizeof(CAssoc*) * nHashSize);
	}
	m_nHashTableSize = nHashSize;
}

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
void CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::RemoveAll()
{
	ASSERT_VALID(this);

	if (m_pHashTable != NULL)
	{
		// destroy elements (values and keys)
		for (UINT nHash = 0; nHash < m_nHashTableSize; nHash++)
		{
			CAssoc* pAssoc;
			for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL;
			  pAssoc = pAssoc->pNext)
			{
				DestructElements<VALUE>(&pAssoc->value, 1);
				DestructElements<KEY>(&pAssoc->key, 1);
			}
		}
	}

	// free hash table
	delete[] m_pHashTable;
	m_pHashTable = NULL;

	m_nCount = 0;
	m_pFreeList = NULL;
	m_pBlocks->FreeDataChain();
	m_pBlocks = NULL;
}

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::~CMap()
{
	RemoveAll();
	ASSERT(m_nCount == 0);
}

template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::CAssoc*
CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::NewAssoc()
{
	if (m_pFreeList == NULL)
	{
		// add another block
		CPlex* newBlock = CPlex::Create(m_pBlocks, m_nBlockSize, sizeof(CMap::CAssoc));
		// chain them into free list
		CMap::CAssoc* pAssoc = (CMap::CAssoc*) newBlock->data();
		// free in reverse order to make it easier to debug
		pAssoc += m_nBlockSize - 1;
		for (int i = m_nBlockSize-1; i >= 0; i--, pAssoc--)
		{
			pAssoc->pNext = m_pFreeList;
			m_pFreeList = pAssoc;
		}
	}
	ASSERT(m_pFreeList != NULL);  // we must have something

	CMap::CAssoc* pAssoc = m_pFreeList;
	m_pFreeList = m_pFreeList->pNext;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日韩亚洲一区| 一本一本久久a久久精品综合麻豆| 一本一道久久a久久精品综合蜜臀| 欧美不卡一区二区| 亚洲高清免费观看高清完整版在线观看| 久久精品视频免费观看| 日韩专区一卡二卡| 日本伦理一区二区| 日本一区二区三区高清不卡| 看电影不卡的网站| 欧美人动与zoxxxx乱| 亚洲精品乱码久久久久久久久| 国产91高潮流白浆在线麻豆| 日韩一级成人av| 丝袜亚洲另类丝袜在线| 成人国产精品免费观看动漫| 久久久精品2019中文字幕之3| 日韩高清欧美激情| 欧美日韩一区二区三区在线 | 欧美日产在线观看| 一区二区三区丝袜| 成人h动漫精品一区二区| 久久色.com| 狠狠色2019综合网| 精品久久久久久久久久久久包黑料| 亚欧色一区w666天堂| 91福利视频网站| 亚洲黄色免费网站| 在线欧美小视频| 亚洲精品日产精品乱码不卡| 91免费版在线| 亚洲欧美一区二区三区国产精品| 波多野结衣在线一区| 久久99国产精品尤物| 日韩一区二区电影网| 日本不卡一区二区三区| 在线成人av影院| 日韩激情视频在线观看| 91麻豆精品国产自产在线观看一区| 亚洲成人777| 91精品国产综合久久精品麻豆 | 亚洲电影第三页| 欧美视频一区二区三区在线观看| 亚洲一二三专区| 欧美精品自拍偷拍动漫精品| 午夜一区二区三区在线观看| 欧美精品一卡两卡| 青青草91视频| 久久综合中文字幕| 成人国产在线观看| 亚洲精品国产第一综合99久久| 91国偷自产一区二区开放时间 | 成人污视频在线观看| 中文字幕免费在线观看视频一区| jlzzjlzz欧美大全| 亚洲精品水蜜桃| 在线不卡一区二区| 韩国在线一区二区| 国产日韩成人精品| 91网页版在线| 午夜视频久久久久久| 欧美成人一区二区三区片免费| 国产激情视频一区二区三区欧美| 中文字幕一区二区三区色视频 | 韩国欧美国产1区| 国产免费观看久久| 色综合久久88色综合天天免费| 亚洲国产精品自拍| 精品欧美一区二区三区精品久久| 国产成人在线色| 亚洲综合色噜噜狠狠| 日韩欧美亚洲一区二区| 国产九色精品成人porny| 亚洲欧洲色图综合| 欧美日韩国产另类一区| 国产一区高清在线| 亚洲品质自拍视频| 7777精品伊人久久久大香线蕉| 国内精品伊人久久久久av一坑| 国产精品福利影院| 91精品久久久久久久91蜜桃| 国产精品一卡二卡| 亚洲国产日产av| 国产亚洲精品福利| 在线观看一区二区视频| 黄网站免费久久| 亚洲人成电影网站色mp4| 一区二区三区精品在线| 欧美电影免费观看高清完整版| 成人深夜视频在线观看| 婷婷一区二区三区| 亚洲国产精品成人综合色在线婷婷 | 一区二区三区在线观看动漫| 欧美一级电影网站| av午夜精品一区二区三区| 天堂资源在线中文精品| 国产免费观看久久| 日韩视频在线观看一区二区| 91天堂素人约啪| 久久精品国产亚洲aⅴ| 一区二区三区四区高清精品免费观看| 精品国产污网站| 在线视频国产一区| 国产成人免费视频网站高清观看视频| 性久久久久久久| 国产精品久久99| 精品国产乱码91久久久久久网站| 欧洲国内综合视频| 成人免费毛片高清视频| 麻豆精品国产91久久久久久| 亚洲综合无码一区二区| 国产日产欧美一区二区视频| 欧美人牲a欧美精品| 91视视频在线直接观看在线看网页在线看| 青青草成人在线观看| 亚洲黄色在线视频| 国产精品久久久久影院亚瑟| 日韩精品一区二区三区在线播放| 色av成人天堂桃色av| 成人激情小说乱人伦| 久久99国产乱子伦精品免费| 五月天中文字幕一区二区| 中文字幕亚洲在| 中文字幕av不卡| 久久综合久久鬼色| 91精品国产91综合久久蜜臀| 在线观看91视频| 色综合久久综合网欧美综合网| 国产成人自拍高清视频在线免费播放| 免费在线欧美视频| 天天亚洲美女在线视频| 一区二区高清免费观看影视大全| 中文在线一区二区| 精品免费日韩av| 日韩欧美的一区二区| 欧美一卡2卡三卡4卡5免费| 欧美日韩一区二区在线观看| 在线视频亚洲一区| 色婷婷久久一区二区三区麻豆| 99久久婷婷国产综合精品电影| 久久五月婷婷丁香社区| 日韩欧美国产午夜精品| 日韩亚洲欧美在线| 欧美一区二区三区视频| 91麻豆精品国产91久久久久久久久| 在线精品视频小说1| 在线视频欧美精品| 欧美亚洲综合色| 欧美视频在线一区| 欧美日韩五月天| 欧美美女bb生活片| 欧美片网站yy| 欧美一级日韩免费不卡| 日韩欧美国产电影| 日韩美女主播在线视频一区二区三区| 欧美一级夜夜爽| 欧美不卡在线视频| 久久婷婷一区二区三区| 久久久久9999亚洲精品| 国产三级三级三级精品8ⅰ区| 国产三级三级三级精品8ⅰ区| 欧美国产欧美综合| 亚洲天堂成人在线观看| 亚洲码国产岛国毛片在线| 夜夜操天天操亚洲| 亚洲国产成人va在线观看天堂| 午夜欧美在线一二页| 男人的天堂久久精品| 久久成人羞羞网站| 成人综合在线网站| 91麻豆.com| 884aa四虎影成人精品一区| 日韩精品在线一区| 久久精品欧美日韩精品| 中文字幕一区二区在线观看| 一区二区三区四区蜜桃| 日韩成人精品视频| 国产一区在线精品| www.亚洲在线| 欧美日韩一级二级三级| 欧美成人性福生活免费看| 久久久久国产免费免费| 一色桃子久久精品亚洲| 亚洲国产成人porn| 国产原创一区二区三区| 波多野结衣亚洲| 欧美日韩国产系列| 26uuu国产电影一区二区| 成人欧美一区二区三区黑人麻豆| 亚洲福利一区二区| 国产一区二区视频在线播放| 成人av资源下载| 91超碰这里只有精品国产| 久久综合色婷婷| 亚洲人123区| 久久电影国产免费久久电影| 99麻豆久久久国产精品免费优播| 欧美色图12p| 久久久精品黄色| 亚洲一区二区三区三|