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

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

?? spcoll.cpp

?? 股票軟件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*
	Cross Platform Core Code.

	Copyright(R) 2001-2002 Balang Software.
	All rights reserved.

	Using:
		class	CSPArray;
		class	CSPPtrArray;
		class	CSPDWordArray;
		class	CSPObArray;
		class	CSPStringArray;
		class	CSPMapStringToPtr;
*/

#include	"StdAfx.h"
#include	"SpColl.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#ifdef	_DEBUG
#define	new	DEBUG_NEW
#endif

#ifndef	_SP_ENABLE_INLINES
#define	_SPCOLL_INLINE
#include "SpColl.inl"
#undef	_SPCOLL_INLINE
#endif



/////////////////////////////////////////////////////////////////////////////
// CSPPtrArray out-of-line functions
CSPPtrArray::CSPPtrArray()
{
	m_pData = NULL;
	m_nSize = m_nMaxSize = m_nGrowBy = 0;
}

CSPPtrArray::~CSPPtrArray()
{
	delete [] (BYTE*)m_pData;
}

void CSPPtrArray::SetSize(int nNewSize, int nGrowBy /* = -1 */)
{
	SP_ASSERT(nNewSize >= 0);

	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
#ifdef SIZE_T_MAX
		SP_ASSERT((long)nNewSize * sizeof(void*) <= SIZE_T_MAX);  // no overflow
#endif
		m_pData = (void**) new BYTE[nNewSize * sizeof(void*)];

		memset(m_pData, 0, nNewSize * sizeof(void*));  // 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(void*));
		}
		m_nSize = nNewSize;
	}
	else
	{
		// Otherwise grow array
		int nNewMax;
		if (nNewSize < m_nMaxSize + m_nGrowBy)
			nNewMax = m_nMaxSize + m_nGrowBy;  // granularity
		else
			nNewMax = nNewSize;  // no slush

#ifdef SIZE_T_MAX
		SP_ASSERT((long)nNewMax * sizeof(void*) <= SIZE_T_MAX);  // no overflow
#endif
		void** pNewData = (void**) new BYTE[nNewMax * sizeof(void*)];

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

		// construct remaining elements
		SP_ASSERT(nNewSize > m_nSize);

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


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

void CSPPtrArray::FreeExtra()
{
	if (m_nSize != m_nMaxSize)
	{
		// shrink to desired size
#ifdef SIZE_T_MAX
		SP_ASSERT((long)m_nSize * sizeof(void*) <= SIZE_T_MAX);  // no overflow
#endif
		void** pNewData = NULL;
		if (m_nSize != 0)
		{
			pNewData = (void**) new BYTE[m_nSize * sizeof(void*)];
			// copy new data from old
			memcpy(pNewData, m_pData, m_nSize * sizeof(void*));
		}

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

void CSPPtrArray::SetAtGrow(int nIndex, void* newElement)
{

	SP_ASSERT(nIndex >= 0);

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

void CSPPtrArray::InsertAt(int nIndex, void* newElement, int nCount /*=1*/)
{
	SP_ASSERT(nIndex >= 0);    // will expand to meet need
	SP_ASSERT(nCount > 0);     // zero or negative size not allowed

	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(void*));

		// re-init slots we copied from

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

	}

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

void CSPPtrArray::RemoveAt(int nIndex, int nCount /* = 1 */)
{
	SP_ASSERT(nIndex >= 0);
	SP_ASSERT(nCount >= 0);
	SP_ASSERT(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(void*));
	m_nSize -= nCount;
}

void CSPPtrArray::InsertAt(int nStartIndex, CSPPtrArray* pNewArray)
{
	SP_ASSERT(pNewArray != NULL);
	SP_ASSERT(nStartIndex >= 0);

	if (pNewArray->GetSize() > 0)
	{
		InsertAt(nStartIndex, pNewArray->GetAt(0), pNewArray->GetSize());
		for (int i = 0; i < pNewArray->GetSize(); i++)
			SetAt(nStartIndex + i, pNewArray->GetAt(i));
	}
}

int CSPPtrArray::Append(const CSPPtrArray& src)
{
	SP_ASSERT_VALID(this);
	SP_ASSERT(this != &src);   // cannot append to itself

	int nOldSize = m_nSize;
	SetSize(m_nSize + src.m_nSize);

	memcpy(m_pData + nOldSize, src.m_pData, src.m_nSize * sizeof(void*));

	return nOldSize;
}

void CSPPtrArray::Copy(const CSPPtrArray& src)
{
	SP_ASSERT_VALID(this);
	SP_ASSERT(this != &src);   // cannot append to itself

	SetSize(src.m_nSize);

	memcpy(m_pData, src.m_pData, src.m_nSize * sizeof(void*));
}

#ifdef	_DEBUG
void	CSPPtrArray::AssertValid( ) const
{
	Object::AssertValid();
	if (m_pData == NULL)
	{
		SP_ASSERT(m_nSize == 0);
		SP_ASSERT(m_nMaxSize == 0);
	}
	else
	{
		SP_ASSERT(m_nSize >= 0);
		SP_ASSERT(m_nMaxSize >= 0);
		SP_ASSERT(m_nSize <= m_nMaxSize);
		SP_ASSERT( SP_IsValidAddress(m_pData, m_nMaxSize * sizeof(void*)) );
	}
}

void	CSPPtrArray::Dump( ) const
{
	Object::Dump( );
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSPDWordArray out-of-line functions
CSPDWordArray::CSPDWordArray()
{
	m_pData = NULL;
	m_nSize = m_nMaxSize = m_nGrowBy = 0;
}

CSPDWordArray::~CSPDWordArray()
{
	delete [] (BYTE*)m_pData;
}

void CSPDWordArray::SetSize(int nNewSize, int nGrowBy /* = -1 */)
{
	SP_ASSERT(nNewSize >= 0);

	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
#ifdef SIZE_T_MAX
		SP_ASSERT((long)nNewSize * sizeof(DWORD) <= SIZE_T_MAX);  // no overflow
#endif
		m_pData = (DWORD*) new BYTE[nNewSize * sizeof(DWORD)];

		memset(m_pData, 0, nNewSize * sizeof(DWORD));  // 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(DWORD));

		}

		m_nSize = nNewSize;
	}
	else
	{
		// Otherwise grow array
		int nNewMax;
		if (nNewSize < m_nMaxSize + m_nGrowBy)
			nNewMax = m_nMaxSize + m_nGrowBy;  // granularity
		else
			nNewMax = nNewSize;  // no slush

#ifdef SIZE_T_MAX
		SP_ASSERT((long)nNewMax * sizeof(DWORD) <= SIZE_T_MAX);  // no overflow
#endif
		DWORD* pNewData = (DWORD*) new BYTE[nNewMax * sizeof(DWORD)];

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

		// construct remaining elements
		SP_ASSERT(nNewSize > m_nSize);

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


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

void CSPDWordArray::Copy(const CSPDWordArray& src)
{
	SP_ASSERT_VALID(this);
	SP_ASSERT(this != &src);   // cannot append to itself

	SetSize(src.m_nSize);

	memcpy(m_pData, src.m_pData, src.m_nSize * sizeof(DWORD));
}

void CSPDWordArray::FreeExtra()
{
	if (m_nSize != m_nMaxSize)
	{
		// shrink to desired size
#ifdef SIZE_T_MAX
		SP_ASSERT((long)m_nSize * sizeof(DWORD) <= SIZE_T_MAX);  // no overflow
#endif
		DWORD* pNewData = NULL;
		if (m_nSize != 0)
		{
			pNewData = (DWORD*) new BYTE[m_nSize * sizeof(DWORD)];
			// copy new data from old
			memcpy(pNewData, m_pData, m_nSize * sizeof(DWORD));
		}

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

void CSPDWordArray::SetAtGrow(int nIndex, DWORD newElement)
{
	SP_ASSERT(nIndex >= 0);

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

void CSPDWordArray::InsertAt(int nIndex, DWORD newElement, int nCount /*=1*/)
{
	SP_ASSERT(nIndex >= 0);    // will expand to meet need
	SP_ASSERT(nCount > 0);     // zero or negative size not allowed

	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(DWORD));

		// re-init slots we copied from

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

	}

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

void CSPDWordArray::RemoveAt(int nIndex, int nCount /* = 1 */)
{
	SP_ASSERT(nIndex >= 0);
	SP_ASSERT(nCount >= 0);
	SP_ASSERT(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(DWORD));
	m_nSize -= nCount;
}

void CSPDWordArray::InsertAt(int nStartIndex, CSPDWordArray* pNewArray)
{
	SP_ASSERT(pNewArray != NULL);
	SP_ASSERT(nStartIndex >= 0);

	if (pNewArray->GetSize() > 0)
	{
		InsertAt(nStartIndex, pNewArray->GetAt(0), pNewArray->GetSize());
		for (int i = 0; i < pNewArray->GetSize(); i++)
			SetAt(nStartIndex + i, pNewArray->GetAt(i));
	}
}

int CSPDWordArray::AddUnique( DWORD newElement )
{
	for( int i=0; i<GetSize(); i++ )
	{
		if( ElementAt(i) == newElement )
			return i;
	}
	return Add( newElement );
}

int SortDWord(const void *p1,const void *p2)
{
	DWORD *pTemp1 = (DWORD *)p1;
	DWORD *pTemp2 = (DWORD *)p2;

	if( pTemp1 && pTemp2 && *pTemp1 < *pTemp2 )
		return -1;
	else if( pTemp1 && pTemp2 && *pTemp1 > *pTemp2 )
		return 1;
	return 0;
}

void CSPDWordArray::Sort( )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂成人国产精品一区| 久久一日本道色综合| 91麻豆精品国产91久久久| 久久精品亚洲麻豆av一区二区| 亚洲欧美国产三级| 久久成人免费日本黄色| 欧美色综合天天久久综合精品| 久久精品视频一区二区三区| 丝袜诱惑制服诱惑色一区在线观看| 成人成人成人在线视频| 日韩欧美资源站| 国产成人亚洲综合a∨婷婷 | 日韩黄色免费电影| gogogo免费视频观看亚洲一| 欧美精品一区二区蜜臀亚洲| 爽好多水快深点欧美视频| 91视频91自| 国产精品乱码久久久久久| 国产一区二区三区高清播放| 宅男噜噜噜66一区二区66| 一区二区三区欧美日| 99精品视频在线免费观看| 国产亚洲欧美中文| 国产综合一区二区| 日韩精品一区二区三区四区视频| 视频一区二区不卡| 欧美日韩中文另类| 亚洲国产人成综合网站| 91国产精品成人| 蜜臀av在线播放一区二区三区| 中文字幕免费观看一区| 美女视频黄免费的久久 | 成人夜色视频网站在线观看| 精品国产成人系列| 久久精品国产99国产精品| 6080日韩午夜伦伦午夜伦| 亚洲综合色婷婷| 欧美综合久久久| 日日噜噜夜夜狠狠视频欧美人 | 久久精品亚洲国产奇米99| 麻豆精品在线播放| 日韩欧美国产wwwww| 蜜桃av一区二区| 国产亚洲污的网站| 99久久伊人久久99| 亚洲精品国产视频| 欧美中文字幕一区| 丝袜美腿成人在线| 91精品国产综合久久久久| 日韩欧美国产一区在线观看| 日韩成人精品在线观看| 在线不卡中文字幕| 久久精品国产一区二区三| 久久久天堂av| 91社区在线播放| 日韩精品免费专区| 久久日一线二线三线suv| 大胆亚洲人体视频| 一区二区久久久久久| 欧美一级理论性理论a| 国产又黄又大久久| 18欧美乱大交hd1984| 欧美色网站导航| 国产精品亚洲成人| 亚洲自拍都市欧美小说| 精品日韩欧美在线| 99精品久久只有精品| 亚洲成在线观看| 麻豆专区一区二区三区四区五区| 7777精品伊人久久久大香线蕉的| 麻豆精品新av中文字幕| 国产欧美日韩在线看| 在线观看免费成人| 国产剧情一区二区| 亚洲国产精品久久一线不卡| 国产亚洲一二三区| 欧美日韩视频第一区| 国产v日产∨综合v精品视频| 亚洲成精国产精品女| 国产女人水真多18毛片18精品视频| 欧美日韩国产大片| 成人午夜激情在线| 蜜桃免费网站一区二区三区| 亚洲精品v日韩精品| 精品人在线二区三区| 欧美视频一区二区在线观看| 成人av网站在线观看免费| 日韩在线一区二区三区| 亚洲欧美日韩国产手机在线 | 亚洲视频中文字幕| 日本韩国一区二区三区视频| 国产精品一二三区在线| 亚洲高清一区二区三区| 国产精品久久久久久久久快鸭| 日韩欧美在线网站| 在线观看免费成人| 91女人视频在线观看| 国产成人免费在线视频| 美女国产一区二区三区| 亚洲成人av一区| 亚洲一区二区五区| 亚洲欧美电影一区二区| 亚洲国产高清在线观看视频| 国产网站一区二区三区| 日韩欧美精品在线视频| 777精品伊人久久久久大香线蕉| 在线这里只有精品| 99精品欧美一区二区三区综合在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 专区另类欧美日韩| 国产校园另类小说区| 精品久久国产老人久久综合| 日韩限制级电影在线观看| 精品视频一区二区三区免费| 欧美性色黄大片| 欧美日韩中字一区| 欧美三级日韩三级| 欧美日韩国产综合一区二区| 在线不卡中文字幕| 欧美一级久久久| 精品国产青草久久久久福利| 精品日韩在线一区| 久久精品一区二区| 国产精品久久久久久久岛一牛影视| 国产精品盗摄一区二区三区| 日韩一区在线免费观看| 亚洲欧美一区二区三区极速播放| 亚洲精品中文在线观看| 亚洲一区影音先锋| 日本不卡中文字幕| 激情五月激情综合网| 国产盗摄视频一区二区三区| 日韩成人一级片| 日本道色综合久久| 色88888久久久久久影院按摩| 在线免费视频一区二区| 欧美日韩国产精品成人| 欧美v国产在线一区二区三区| 久久综合九色综合欧美98| 欧美极品美女视频| 亚洲毛片av在线| 天天综合色天天| 国产麻豆一精品一av一免费 | 欧美日韩一区二区三区四区五区| 欧美女孩性生活视频| 精品久久久久久无| 中文字幕一区二区三| 五月天中文字幕一区二区| 麻豆精品视频在线观看免费 | 国产成人在线影院| 91麻豆蜜桃一区二区三区| 91精品国产综合久久久久久久久久| 精品国产一区二区三区久久影院| 中文字幕亚洲一区二区av在线| 亚洲成人av电影| 成人h动漫精品| 一本到高清视频免费精品| 久久国产精品色婷婷| 高清不卡一二三区| 欧美三级日本三级少妇99| 久久蜜桃av一区精品变态类天堂| 亚洲在线视频网站| 国产精品影视天天线| 欧美日韩视频专区在线播放| 国产精品色在线| 老司机精品视频在线| 色综合天天综合给合国产| 精品美女一区二区三区| 亚洲五码中文字幕| jlzzjlzz亚洲日本少妇| 久久免费电影网| 美女一区二区三区| 色呦呦网站一区| 国产精品久久久久久久久免费樱桃| 美女视频黄频大全不卡视频在线播放| 91丨九色丨蝌蚪丨老版| 久久久久久夜精品精品免费| 热久久国产精品| 欧美三级中文字| 亚洲精品国产一区二区精华液| 国产成人av电影在线观看| 日韩欧美中文字幕制服| 视频一区二区三区在线| 欧洲视频一区二区| 国产精品嫩草影院av蜜臀| 天堂va蜜桃一区二区三区 | 2017欧美狠狠色| 夜色激情一区二区| 成人国产电影网| 国产精品入口麻豆原神| 国产在线一区二区综合免费视频| 日韩一级视频免费观看在线| 亚洲国产精品一区二区尤物区| 色综合久久66| 亚洲色图制服诱惑| 99久久免费视频.com| 国产精品天美传媒| 国产91精品精华液一区二区三区| 国产亚洲一区二区三区在线观看| 国产一区二区三区久久久|