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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? templates.h

?? 將VC7.0和VC.NET的工程轉換到VC6.0的工程,內有詳細的介紹做法(自己試驗后寫的)
?? H
字號:

#pragma once

/////////////////////////////////////////////////////////////////////////////////////
//
// collection templates
//
// taken from the Windows MFC
// templated
//
//
//


template <class T>
class CTemplateArray
{

public:

// Construction
	CTemplateArray();
	~CTemplateArray();

// Attributes
	int		GetSize() const;
	int		GetUpperBound() const;
	void	SetSize(int nNewSize, int nGrowBy = -1);

// Operations
	// Clean up
	void	FreeExtra();
	void	RemoveAll();

	// Accessing elements
	T		GetAt(int nIndex) const;
	void	SetAt(int nIndex, T newElement);
	T&		ElementAt(int nIndex);

	// Direct Access to the element data (may return NULL)
	const T* GetData() const;
	T*		 GetData();

	// Potentially growing the array
	void	SetAtGrow(int nIndex, T newElement);
	int		Add(T newElement);
	int		Append(const CTemplateArray& src);
	void	Copy(const CTemplateArray& src);

	// overloaded operator helpers
	T		operator[](int nIndex) const;
	T&		operator[](int nIndex);

	// Operations that move elements around
	void	InsertAt(int nIndex, T newElement, int nCount = 1);
	void	RemoveAt(int nIndex, int nCount = 1);
	void	InsertAt(int nStartIndex, CTemplateArray* pNewArray);
	void	Remove(T oldElement);

// Implementation
protected:
	T*  m_pData;   // the actual array of data
	int m_nSize;     // # of elements (upperBound - 1)
	int m_nMaxSize;  // max allocated
	int m_nGrowBy;   // grow amount

protected:
	// local typedefs for class templates
	typedef void* BASE_TYPE;
	typedef void* BASE_ARG_TYPE;
};



template <class T> CTemplateArray<T>::CTemplateArray()
{
	m_pData = NULL;
	m_nSize = m_nMaxSize = m_nGrowBy = 0;
}

template <class T> CTemplateArray<T>::~CTemplateArray()
{
	delete[] (BYTE*)m_pData;
}

template <class T> int CTemplateArray<T>::GetSize() const
{ 
	return m_nSize; 
}

template <class T> int CTemplateArray<T>::GetUpperBound() const
{ 
	return m_nSize-1; 
}

template <class T> void CTemplateArray<T>::SetSize(int nNewSize, int nGrowBy)
{
	if (nNewSize < 0)
		return;

	if (nGrowBy != -1)
		m_nGrowBy = nGrowBy;  // set new size

	if (nNewSize == 0)
	{
		// shrink to nothing
		delete[] (BYTE*)m_pData;
		m_pData = NULL;
		m_nSize = m_nMaxSize = 0;
	}
	else if (m_pData == NULL)
	{
		// create one with exact size
		m_pData = (T*) new BYTE[nNewSize * sizeof(T)];

		memset(m_pData, 0, nNewSize * sizeof(T));  // zero fill

		m_nSize = m_nMaxSize = nNewSize;
	}
	else if (nNewSize <= m_nMaxSize)
	{
		// it fits
		if (nNewSize > m_nSize)
		{
			// initialize the new elements

			memset(&m_pData[m_nSize], 0, (nNewSize-m_nSize) * sizeof(T));

		}

		m_nSize = nNewSize;
	}
	else
	{
		// otherwise, grow array
		int nGrowBy = m_nGrowBy;
		if (nGrowBy == 0)
		{
			// heuristically determine growth when nGrowBy == 0
			//  (this avoids heap fragmentation in many situations)
			nGrowBy = (m_nSize/8 > 4)? m_nSize/8 : 4;
		}
		int nNewMax;
		if (nNewSize < m_nMaxSize + nGrowBy)
			nNewMax = m_nMaxSize + nGrowBy;  // granularity
		else
			nNewMax = nNewSize;  // no slush

		T* pNewData = (T*) new BYTE[nNewMax * sizeof(T)];

		// copy new data from old
		memcpy(pNewData, m_pData, m_nSize * sizeof(T));

		memset(&pNewData[m_nSize], 0, (nNewSize-m_nSize) * sizeof(T));


		// get rid of old stuff (note: no destructors called)
		delete[] (BYTE*)m_pData;
		m_pData = pNewData;
		m_nSize = nNewSize;
		m_nMaxSize = nNewMax;
	}
}

template <class T> void CTemplateArray<T>::FreeExtra()
{
	if (m_nSize != m_nMaxSize)
	{
		// shrink to desired size
		T* pNewData = NULL;
		if (m_nSize != 0)
		{
			pNewData = (T*) new BYTE[m_nSize * sizeof(T)];
			// copy new data from old
			memcpy(pNewData, m_pData, m_nSize * sizeof(T));
		}

		// get rid of old stuff (note: no destructors called)
		delete[] (BYTE*)m_pData;
		m_pData = pNewData;
		m_nMaxSize = m_nSize;
	}
}

template <class T> void CTemplateArray<T>::RemoveAll()
{ 
	SetSize(0); 
}

template <class T> T CTemplateArray<T>::GetAt(int nIndex) const
{ 
	if (nIndex<0 || nIndex>=m_nSize)
		return NULL;
	else
		return m_pData[nIndex]; 
}

template <class T> void CTemplateArray<T>::SetAt(int nIndex, T newElement)
{ 
	if (nIndex >= 0 && nIndex < m_nSize)
		m_pData[nIndex] = newElement; 
}

template <class T> T& CTemplateArray<T>::ElementAt(int nIndex)
{ 
	static T pVoid=NULL;

	if (nIndex<0 || nIndex>=m_nSize)
		return pVoid;
	else
		return m_pData[nIndex]; 
}

template <class T> const T* CTemplateArray<T>::GetData() const
{ 
	return (const T*)m_pData; 
}

template <class T> T* CTemplateArray<T>::GetData()
{ 
	return (T*)m_pData; 
}

template <class T> void CTemplateArray<T>::SetAtGrow(int nIndex, T newElement)
{
	if (nIndex < 0)
		return;

	if (nIndex >= m_nSize)
		SetSize(nIndex+1);
	m_pData[nIndex] = newElement;
}

template <class T> int CTemplateArray<T>::Add(T newElement)
{ 
	int nIndex = m_nSize;
	SetAtGrow(nIndex, newElement);
	return nIndex; 
}

template <class T> void CTemplateArray<T>::Remove(T oldElement)
{ 
	for( int i = 0; i < m_nSize; i++)
	{
		if( m_pData[i] == oldElement)
		{
			if( i < m_nSize - 1)
				m_pData[i] = m_pData[i+1];
			m_nSize--;
			return;
		}
	}
}

template <class T> int CTemplateArray<T>::Append(const CTemplateArray& src)
{
	int nOldSize = m_nSize;
	
	if (this != &src)
	{
		SetSize(m_nSize + src.m_nSize);

		memcpy(m_pData + nOldSize, src.m_pData, src.m_nSize * sizeof(T));
	}
	return nOldSize;
}

template <class T> void CTemplateArray<T>::Copy(const CTemplateArray& src)
{
	if (this == &src)
		return;

	SetSize(src.m_nSize);

	memcpy(m_pData, src.m_pData, src.m_nSize * sizeof(T));

}

template <class T> T CTemplateArray<T>::operator[](int nIndex) const
{ 
	return GetAt(nIndex); 
}

template <class T> T& CTemplateArray<T>::operator[](int nIndex)
{ 
	return ElementAt(nIndex); 
}


template <class T> void CTemplateArray<T>::InsertAt(int nIndex, T newElement, int nCount)
{
	if (nIndex<0 || nCount<=0)
		return;

	if (nIndex >= m_nSize)
	{
		// adding after the end of the array
		SetSize(nIndex + nCount);  // grow so nIndex is valid
	}
	else
	{
		// inserting in the middle of the array
		int nOldSize = m_nSize;
		SetSize(m_nSize + nCount);  // grow it to new size
		// shift old data up to fill gap
		memmove(&m_pData[nIndex+nCount], &m_pData[nIndex],
			(nOldSize-nIndex) * sizeof(T));

		// re-init slots we copied from

		memset(&m_pData[nIndex], 0, nCount * sizeof(T));

	}

	// insert new value in the gap
	while (nCount-- && (nIndex + nCount <= m_nSize))
		m_pData[nIndex++] = newElement;
}

template <class T> void CTemplateArray<T>::RemoveAt(int nIndex, int nCount)
{
	if (nIndex >= 0 || nCount >= 0 || (nIndex + nCount <= m_nSize) )
	{
		// just remove a range
		int nMoveCount = m_nSize - (nIndex + nCount);

		if (nMoveCount)
			memcpy(&m_pData[nIndex], &m_pData[nIndex + nCount],
				nMoveCount * sizeof(T));
		m_nSize -= nCount;
	}
}

template <class T> void CTemplateArray<T>::InsertAt(int nStartIndex, CTemplateArray* pNewArray)
{
	if (pNewArray && nStartIndex>=0 && pNewArray->GetSize() > 0)
	{
		InsertAt(nStartIndex, pNewArray->GetAt(0), pNewArray->GetSize());
		for (int i = 0; i < pNewArray->GetSize(); i++)
			SetAt(nStartIndex + i, pNewArray->GetAt(i));
	}
}



/////////////////////////////////////////////////////////////////////////////


template <class T>
class CTemplateObjArray : public CTemplateArray<T>
{
public:
	~CTemplateObjArray();
};


template <class T> CTemplateObjArray<T>::~CTemplateObjArray()
{
	for( int i = 0; i < m_nSize; i++) // call objects destructor
		delete m_pData[i];
}





/////////////////////////////////////////////////////////////////////////////


typedef CTemplateArray<void*> ArrayLPVoid;
typedef CTemplateArray<long>  ArraySLong;
typedef CTemplateArray<long>  ArrayInt;
typedef CTemplateArray<char*>  ArrayString;
typedef CTemplateArray<CString>  ArrayCString;



struct SINGLEVALUEPARAM
{
	CString szName, szValue;
};



struct DOUBLEVALUEPARAM
{
	CString m_pParamName;
	CString m_pParamValue1, m_pParamValue2;
};

struct PROJECTPARAM
{
	PROJECTPARAM()
	{
		bHasDependencies = bIsWritten = FALSE;
	}

	CString szProjectName;
	CString szProjectPath, szProjectGUID;
	ArrayCString arrszProjectDependencies;

	BOOL bHasDependencies;
	BOOL bIsWritten;
};


typedef CTemplateObjArray<SINGLEVALUEPARAM*>	Param1Array;
typedef CTemplateObjArray<DOUBLEVALUEPARAM*>	Param2Array;
typedef CTemplateObjArray<PROJECTPARAM*>		ProjectArray;







class FindableArray : public CTemplateObjArray<SINGLEVALUEPARAM*>
{
public:
	CString GetValue(/*in*/char *szName, BOOL bUseCase=FALSE)
	{
		CString s;
		long nSize = GetSize();
		if (nSize==0) return s;

		BOOL bFound = FALSE;
		long i=0;
		
		while (!bFound && i<nSize)
		{
			SINGLEVALUEPARAM *p = GetAt(i++);
			if (p)
				bFound = bUseCase ? p->szName.Compare(szName) : p->szName.CompareNoCase(szName) ;
		}
		i--;
		if (bFound)
		{
			SINGLEVALUEPARAM *p = GetAt(i++);
			if (p)
				s = p->szValue;
		}

		return s;
	}
};









class XmlElement;
typedef CTemplateObjArray<XmlElement*>			XmlElementArray;

/////

class XmlElement
{
	// Members
protected:
	XmlElement *m_cpElementParent;
	CString		m_szName;
	Param1Array m_arrAttribs;
	XmlElementArray m_arrChildren;
	void*		m_cpParser;

	// Constructor
public:
	XmlElement(CString &szName)
	{
		m_szName = szName;
		m_cpElementParent = NULL;
		m_cpParser = NULL;
	}
	~XmlElement() {}

	// Accessors
public:
	void setParent(XmlElement *pParent) { m_cpElementParent = pParent; }
	XmlElement *getParent() { return m_cpElementParent; }


	void setParser(void *pParser) { m_cpParser = pParser; }
	void *getParser() { return m_cpParser; }

	CString getValue(CString &szAttribName)
	{
		CString s;
		BOOL bFound = FALSE;
		long i=0;
		long nSize = m_arrAttribs.GetSize();

		while (!bFound && i<nSize)
		{
			SINGLEVALUEPARAM *p = m_arrAttribs.GetAt(i++);
			bFound = (p && (szAttribName==p->szName) );
		}

		i--;
		if (bFound)
		{
			SINGLEVALUEPARAM *p = m_arrAttribs.GetAt(i);
			if (p)
			{
				s = p->szValue;
			}
		}

		return s;
	}


	// Methods
public:
	XmlElement *addChild(CString &szName)
	{
		XmlElement *newElem = new XmlElement(szName);
		if (newElem)
		{
			newElem->setParent( this );
			newElem->setParser( getParser() );

			m_arrChildren.Add( newElem );
		}

		return newElem;
	}
	
	void addNameValue(CString &szAttribName, CString &szAttribValue)
	{
		SINGLEVALUEPARAM *p = new SINGLEVALUEPARAM();
		if (!p) return;

		p->szName = szAttribName;
		p->szValue = szAttribValue;
		m_arrAttribs.Add( p );
	}
	
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品视频一区二区三区| 亚洲国产高清不卡| 国产精品久久久久久久久果冻传媒 | 亚洲成av人影院| 国产成人av一区二区三区在线观看| 在线观看中文字幕不卡| 国产欧美日韩综合| 玖玖九九国产精品| 538prom精品视频线放| 亚洲天堂久久久久久久| 国产精品1区2区3区在线观看| 欧美日韩一区小说| 亚洲女同ⅹxx女同tv| 懂色av一区二区夜夜嗨| 欧美电视剧在线看免费| 日日夜夜免费精品视频| 91精品办公室少妇高潮对白| 国产精品久久久久影院| 成人免费视频一区二区| 久久综合久色欧美综合狠狠| 欧美aaaaaa午夜精品| 欧美二区在线观看| 偷拍与自拍一区| 欧美精品黑人性xxxx| 亚洲成人黄色小说| 欧美年轻男男videosbes| 亚洲aⅴ怡春院| 717成人午夜免费福利电影| 亚洲成人在线观看视频| 欧美艳星brazzers| 亚洲第一在线综合网站| 欧美日韩电影一区| 首页国产丝袜综合| 日韩精品一区二区三区视频| 蜜臀91精品一区二区三区| 欧美一卡二卡三卡| 精品在线免费观看| 久久久久久久久99精品| 国产成人自拍高清视频在线免费播放| 日韩精品中文字幕一区| 国产美女av一区二区三区| 久久久精品日韩欧美| 国产乱淫av一区二区三区| 久久久天堂av| av在线综合网| 亚洲图片自拍偷拍| 91精品国产欧美日韩| 久久精品噜噜噜成人88aⅴ| 精品对白一区国产伦| 国产99一区视频免费| 亚洲女与黑人做爰| 日韩一区二区三区精品视频| 国产精品亚洲专一区二区三区| 国产精品久久福利| 欧美色窝79yyyycom| 日本大胆欧美人术艺术动态| 2024国产精品视频| 91丝袜美腿高跟国产极品老师 | 在线观看日韩国产| 视频一区二区不卡| 国产亚洲精品精华液| 日本精品视频一区二区三区| 日韩电影在线免费看| 国产午夜精品久久久久久免费视| 色婷婷久久综合| 精品一区二区在线观看| 亚洲色图欧美偷拍| 欧美一区二区视频免费观看| 粉嫩13p一区二区三区| 亚洲777理论| 国产蜜臀97一区二区三区| 欧美性猛交xxxxxx富婆| 国产在线国偷精品产拍免费yy| 亚洲欧美视频在线观看| 日韩一区二区视频在线观看| 成人视屏免费看| 日韩精品欧美精品| 亚洲欧美激情在线| 久久在线免费观看| 欧美高清视频一二三区| 91免费看片在线观看| 蜜臀va亚洲va欧美va天堂 | 日本不卡在线视频| 亚洲天堂av老司机| www国产精品av| 91精品国产欧美一区二区18| 北条麻妃国产九九精品视频| 麻豆专区一区二区三区四区五区| 自拍偷自拍亚洲精品播放| 久久综合色婷婷| 51午夜精品国产| 欧美视频在线播放| 一本大道av一区二区在线播放| 国产一区欧美日韩| 日韩精品国产精品| 亚洲成人动漫精品| 亚洲最新在线观看| 亚洲日本欧美天堂| 国产日产欧美精品一区二区三区| 91精品国产麻豆| 欧美日韩一区 二区 三区 久久精品| 成人精品视频网站| 国产精品一二三四区| 国内成人精品2018免费看| 日本系列欧美系列| 日韩成人dvd| 日本亚洲电影天堂| 蜜臀精品一区二区三区在线观看 | 亚洲精品中文字幕在线观看| 久久精品免费在线观看| 久久夜色精品一区| 久久久亚洲精华液精华液精华液| 精品欧美一区二区久久| 欧美一级爆毛片| 日韩视频一区二区三区| 日韩视频免费观看高清在线视频| 欧美日韩国产成人在线91| 欧美丰满高潮xxxx喷水动漫| 欧美一级电影网站| 精品国产不卡一区二区三区| 欧美精品一区在线观看| 久久久久久久久久久久电影| 欧美经典一区二区| 一色桃子久久精品亚洲| 亚洲黄色免费电影| 石原莉奈在线亚洲二区| 日本亚洲免费观看| 国产精品系列在线观看| bt欧美亚洲午夜电影天堂| 色天天综合久久久久综合片| 欧美性色综合网| 欧美成人女星排名| 国产精品久久久久久一区二区三区| 日韩伦理av电影| 午夜av电影一区| 国产精品18久久久久久久久| 91小视频在线观看| 91国产丝袜在线播放| 欧美一区二区免费| 国产日韩av一区| 亚洲午夜免费电影| 九九视频精品免费| 99久久精品免费精品国产| 欧美日韩国产a| 国产日韩三级在线| 亚洲香肠在线观看| 国产精品一级黄| 欧美日韩精品二区第二页| 精品久久久久久亚洲综合网| 国产精品三级av在线播放| 亚洲mv大片欧洲mv大片精品| 国产成人免费在线视频| 欧美日韩一区在线观看| 国产丝袜欧美中文另类| 五月天激情小说综合| 成人免费黄色在线| 欧美精品xxxxbbbb| 亚洲欧洲一区二区三区| 久草在线在线精品观看| 91蝌蚪porny| 精品久久国产字幕高潮| 一区二区三区不卡视频在线观看 | 国产欧美一区视频| 日韩在线卡一卡二| www.欧美色图| 久久色成人在线| 午夜精品一区二区三区免费视频| 国产成人在线观看免费网站| 欧美日韩不卡在线| 日本一区二区高清| 国内久久精品视频| 欧美精品在线一区二区三区| 亚洲色图欧美激情| 成人晚上爱看视频| 精品国产凹凸成av人导航| 亚洲最新视频在线播放| av色综合久久天堂av综合| 欧美精品一区二| 日本va欧美va精品发布| 欧美日韩午夜精品| 亚洲精品日产精品乱码不卡| 成人h动漫精品一区二区| 久久视频一区二区| 韩国av一区二区三区| 欧美xxx久久| 裸体在线国模精品偷拍| 宅男噜噜噜66一区二区66| 亚洲午夜精品在线| 91色在线porny| 亚洲欧美日韩在线| 色综合天天做天天爱| 中文字幕中文在线不卡住| 成人免费精品视频| 国产精品欧美极品| 波多野结衣精品在线| 国产精品国产三级国产普通话蜜臀 | 欧美午夜精品久久久| 亚洲综合成人网| 在线亚洲精品福利网址导航| 亚洲三级在线观看|