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

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

?? bitarray.cpp

?? The Bit Array structure provides a compacted arrays of Booleans, with one bit for each Boolean value
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
						else	if(nByte+2 < nSrcLen && src[nByte+1] == 0xff && *(COMPRESS_TYPE*)(src+nByte+2) != COMPRESS_COUNT)
						{	// increment next runlength only
							memmove(src+nByte, src+nByte+1, nSrcLen-nByte-1);
							src[--nSrcLen] = 0;
							*(COMPRESS_TYPE*)(src+nByte+2) += 1;
						}
						else
						{
							src = (BYTE*)ReAllocPtr(src, nSrcLen+COMPRESS_SIZE);
							memmove(src+nByte+1+COMPRESS_SIZE, src+nByte+1, nSrcLen-nByte-1);
							*(COMPRESS_TYPE*)(src+nByte+1) = 1;
							nSrcLen += COMPRESS_SIZE;
						}
					return true;
				}
				nByte++;
				byType = 0;
			}
	}
	bool bAlloc = nSrcLen == 0;
	int nLength = nDesByte-nDesLen;
 	int nRun = nLength/COMPRESS_COUNT+((nLength%COMPRESS_COUNT)?1:0);
	if(nRun > 0)
		nSrcLen += nRun*(1+COMPRESS_SIZE)+1;
	else
		nSrcLen++;
	if(bAlloc)
	{
		nSrcLen++;	// keep first byte for compression info
		src = (BYTE*)AllocPtr(nSrcLen);
		src[0] = 1;
	}
	else
		src = (BYTE*)ReAllocPtr(src, nSrcLen);
	while(nRun > 0)
		*(COMPRESS_TYPE*)(src+nSrcLen-(nRun--)*(1+COMPRESS_SIZE)) = (nLength>=COMPRESS_COUNT?COMPRESS_COUNT:nLength), nLength -= COMPRESS_COUNT;
	SetBit(src+nSrcLen-1, nBit&7);
	return true;
}

bool CBitArray::GetAt(BYTE *src, int nSrcLen, int nBit)
{
	int nDesLen = 0, nDesByte = nBit/8;
	if(nSrcLen > 0)
	{
		int nByte = 1, nRunLength = 0;
		while(nByte < nSrcLen)
			if(src[nByte] == 0 || src[nByte] == 0xff)
			{
				nRunLength = *(COMPRESS_TYPE*)(src+nByte+1);
				if(nDesLen+nRunLength > nDesByte)
					return src[nByte] == 0xff;
				nDesLen += nRunLength;
				nByte += COMPRESS_SIZE+1;
			}
			else
			{
				if(nDesLen++ == nDesByte)
					return GetBit(src+nByte, nBit&7);
				nByte++;
			}
	}
	return false;
}

int CBitArray::DecompressLength(BYTE *src, int nSrcLen)
{
	int nDesLen = 0, nByte = 0;
	while(nByte < nSrcLen)
		if(src[nByte] == 0 || src[nByte] == 0xff)
			nDesLen += *(COMPRESS_TYPE*)(src+(++nByte)), nByte += COMPRESS_SIZE;
		else
			nDesLen++, nByte++;
	return nDesLen;
}

int CBitArray::GetIndexBit(int nIndex)
{
	if(nIndex <= -1 || nIndex >= GetCount())
		return -1;
	if(m_nIndexes == NULL)
		Index();

	int nMapIndex = nIndex / m_nBitSeg;
	if(nMapIndex >= m_nIndexesCount)
		return -1;
	if(m_nBitSeg == 1)
		return m_nIndexes[nIndex];
	int dwBitmapIndex = m_nIndexes[nMapIndex];
	int lReminder = nIndex % m_nBitSeg, nMaxBit = GetLength()<<3;
	while(lReminder > 0)
	{
		if(++dwBitmapIndex >= nMaxBit)
			return -1;
		if(GetAt(dwBitmapIndex))
			--lReminder;
	}
	return dwBitmapIndex;
}

int CBitArray::GetBitIndex(int nBit)
{
	if(GetCount() == 0)
		return -1;
	if(m_nIndexes == NULL)
		Index();

	int nStart = 0, nEnd = m_nIndexesCount, nMapIndex = 0;
	while(nStart < nEnd)
	{
		nMapIndex = (nEnd+nStart)/2;
		if(nBit == m_nIndexes[nMapIndex])
			break;
		if(nBit < m_nIndexes[nMapIndex])
			nEnd = nMapIndex-1;
		else
			nStart = nMapIndex+1;
	}
	while(nMapIndex > 0 && nBit < m_nIndexes[nMapIndex])
		nMapIndex--;
	
	int nBitIndex = nMapIndex*m_nBitSeg;
	for(int dwCount = m_nIndexes[nMapIndex]; dwCount < nBit; dwCount++)
		if(GetAt(dwCount))
			nBitIndex++;
	if(GetAt(nBit) == FALSE)
		nBitIndex--;

	return nBitIndex;
}

void CBitArray::Init(BYTE* pBuffer, int nLength)
{
	FreeBuffer();
	m_nLength = m_nAllocLength = nLength;
	if(nLength > 0)
	{
		m_pBuffer = (BYTE*)AllocPtr(nLength);
		memcpy(m_pBuffer, pBuffer, nLength);
		while(m_nLength  && m_pBuffer[m_nLength-1] == 0)
			m_nLength--;
	}
	m_bModified = true;
}

void CBitArray::operator=(const CBitArray& src)
{
	Init(src.m_pBuffer, src.m_nLength);
	m_nCount = src.m_nCount;
	if(src.m_nIndexes)
	{
		m_nIndexesCount = src.m_nIndexesCount;
		m_nIndexes = (int*)malloc(m_nIndexesCount*sizeof(DWORD));
		memcpy(m_nIndexes, src.m_nIndexes, m_nIndexesCount*sizeof(DWORD));
		m_nBitSeg = src.m_nBitSeg;
	}
	m_bModified = true;
}

void CBitArray::operator|=(const CBitArray& src)
{
	if(m_nLength < src.m_nLength)
		SetLength(src.m_nLength);
	for(int nByte = 0; nByte < src.m_nLength; nByte++)
		m_pBuffer[nByte] |= src.m_pBuffer[nByte];
	SetModified();
}

void CBitArray::operator&=(const CBitArray& src)
{
	m_nLength = min(m_nLength, src.m_nLength);
	for(int nByte = 0; nByte < m_nLength; nByte++)
		m_pBuffer[nByte] &= src.m_pBuffer[nByte];
	while(m_nLength  && m_pBuffer[m_nLength-1] == 0)
		m_nLength--;
	if(m_nLength == 0)
		FreeBuffer();
	SetModified();
}

void CBitArray::operator^=(const CBitArray& src)
{
	if(m_nLength < src.m_nLength)
		SetLength(src.m_nLength);
	for(int nByte = 0; nByte < src.m_nLength; nByte++)
		m_pBuffer[nByte] ^= src.m_pBuffer[nByte];
	SetModified();
}

bool CBitArray::operator==(const CBitArray& src)
{
	return m_nLength == src.m_nLength && memcmp(m_pBuffer, src.m_pBuffer, m_nLength) == 0;
}

bool CBitArray::operator!=(const CBitArray& src)
{
	return m_nLength != src.m_nLength || memcmp(m_pBuffer, src.m_pBuffer, m_nLength) != 0;
}

bool CBitArray::operator&&(const CBitArray& src)
{
	int nLength = min(m_nLength, src.m_nLength);
	for(int nByte = 0; nByte < nLength; nByte++)
		if((m_pBuffer[nByte] & src.m_pBuffer[nByte]) != 0)
			return true;
	return false;
}

CBitArray CBitArray::operator&(const CBitArray& src)
{
	CBitArray bitArray = *this;
	bitArray &= src;
	return bitArray;
}

CBitArray CBitArray::operator|(const CBitArray& src)
{
	CBitArray bitArray = *this;
	bitArray |= src;
	return bitArray;
}

CBitArray CBitArray::operator^(const CBitArray& src)
{
	CBitArray bitArray = *this;
	bitArray ^= src;
	return bitArray;
}

bool CBitArray::IsEmpty()
{
	if(m_nLength == 0)
		return true;
	if(m_nCount > 0)
		return false;
	for(int nByte = 0; nByte < m_nLength; nByte++)
		if(m_pBuffer[nByte])
			return false;
	return true;
}

bool CBitArray::IsRangeEmpty(int nStartBit, int nEndBit)
{
	if(m_nLength == 0)
		return true;
	if(nEndBit >= m_nLength*8)
		nEndBit = m_nLength*8-1;
	for(int dwBit = nStartBit; dwBit < (nStartBit/8+1)*8; dwBit++)
		if(GetAt(dwBit))
			return false;
	for(int nByte = nStartBit/8+1; nByte < nEndBit/8; nByte++)
		if(m_pBuffer[nByte])
			return false;
	if((nEndBit+1)&7)
		for(dwBit = nEndBit/8*8; dwBit <= nEndBit; dwBit++)
			if(GetAt(dwBit))
				return false;
	return true;
}

void CBitArray::Invert(int nMaxBits)
{
	SetModified();

	m_nLength = (nMaxBits+7)/8;
	if(m_nLength > m_nAllocLength)
	{
		m_nAllocLength = m_nLength;
		if(m_pBuffer == NULL)
			m_pBuffer = (BYTE*)AllocPtr(m_nAllocLength);
		else
			m_pBuffer = (BYTE*)ReAllocPtr(m_pBuffer, m_nAllocLength);
	}
	for(int nByte = 0; nByte < m_nLength; nByte++)
		m_pBuffer[nByte] = ~m_pBuffer[nByte];
	for(int nBit = nMaxBits; nBit < m_nLength*8; nBit++)
		ResetBit(m_pBuffer, nBit);
}

void CBitArray::SetModified()
{
	m_nCount = -1;
	if(m_nIndexes)
		free(m_nIndexes);
	m_nIndexes = NULL;
	m_bModified = true;
}

void CBitArray::Delete(int nStart, int nEnd)
{
	int nMaxBits = m_nLength*8;
	if(nStart >= nMaxBits || nStart > nEnd)
		return;
	nEnd = min(nEnd, nMaxBits-1);
	ResetRange(nStart, nEnd);
	for(int nIndex = nEnd+1; nIndex < nMaxBits; nIndex++)
		if(GetAt(nIndex))
		{
			ResetAt(nIndex);
			SetAt(nStart+nIndex-(nEnd+1));
		}
		else
			ResetAt(nStart+nIndex-(nEnd+1));
	m_bModified = true;
	nMaxBits = max(0, nMaxBits -(nEnd-nStart+1));
	m_nLength = nMaxBits/8 + ((nMaxBits%8)?1:0);
	for(nIndex = nMaxBits; nIndex < nMaxBits+(8-nMaxBits%8); nIndex++)
		ResetBit(m_pBuffer, nIndex);
}

void CBitArray::Insert(int nStart, int nCount, bool bSet)
{
	int nMaxBits = m_nLength*8;
	int lOldMaxBits = nMaxBits;
	SetLength(nMaxBits+nCount+max(0, nStart-nMaxBits));
	for(int nIndex = lOldMaxBits-1; nIndex > nStart; nIndex--)
		if(GetBit(m_pBuffer, nIndex))
		{
			ResetBit(m_pBuffer, nIndex);
			SetBit(m_pBuffer, nIndex+nCount);
		}
	if(bSet)
		SetRange(nStart+1, nStart+nCount);
	else
		ResetRange(nStart+1, nStart+nCount);
}

int CBitArray::GetHeadBit()
{
	return GetIndexBit(0);
}

int CBitArray::GetTailBit()
{
	return GetIndexBit(GetCount()-1);
}

int CBitArray::GetActualBit(int dwIndexBit)
{
	if(GetAt(dwIndexBit))
		return dwIndexBit;
	int nIndex = GetBitIndex(dwIndexBit);
	if(nIndex == 0)
		return GetHeadBit();
	if(nIndex == GetCount())
		return GetTailBit();
	return GetIndexBit(nIndex);
}

int CBitArray::Bmp2Array(int *&pBuffer, bool bAllocated /*= false*/)
{
	int nCount = GetCount();
	if(nCount == 0)
		return 0;
	if(bAllocated == false)
		pBuffer = (int*)AllocPtr(sizeof(int)*nCount);
	nCount = 0;
	BYTE by;
	for(int nBit, nByte = 0; nByte < m_nLength; nByte++)
		if(by = m_pBuffer[nByte])
		{
			nBit = nByte<<3;
			while(by)
			{
				if(by&1)
					pBuffer[nCount++] = nBit;
				by >>= 1, nBit++;
			}
		}
	return nCount;
}

int CBitArray::Bmp2Array(vector<int> &nArray)
{
	nArray.resize(GetCount());
	return Bmp2Array((int*&)*nArray.begin(), true);
}

void CBitArray::Append2Array(vector<int> &nArray)
{
	int nArraySize = nArray.size();
	nArray.resize(nArraySize+GetCount());
	BYTE by;
	for(int nBit, nByte = 0; nByte < m_nLength; nByte++)
		if(by = m_pBuffer[nByte])
		{
			nBit = nByte<<3;
			while(by)
			{
				if(by&1)
					nArray[nArraySize++] = nBit;
				by >>= 1, nBit++;
			}
		}
}

int CBitArray::Range2Array(int nStartBit, int nEndBit, vector<int> &nArray)
{
	if(nStartBit >= m_nLength*8)
		return 0;
	nEndBit = min(nEndBit, m_nLength*8-1);

	int nCount = 0, nBit;
	BOOL bFirstByte = (nStartBit&7) != 0;
	if(bFirstByte)
		for(nBit = nStartBit; nBit < (nStartBit/8+1)*8; nBit++)
			if(GetAt(nBit))
				nArray.push_back(nBit), nCount++;
	int nEndByte = nEndBit/8;
	BYTE by;
	for(int nByte = nStartBit/8+bFirstByte; nByte < nEndByte; nByte++)
		if(by = m_pBuffer[nByte])
		{
			nBit = nByte<<3;
			while(by)
			{
				if(by&1)
					nArray.push_back(nBit), nCount++;
				by >>= 1, nBit++;
			}
		}
	for(nBit = nEndByte*8; nBit <= nEndBit; nBit++)
		if(GetAt(nBit))
			nArray.push_back(nBit), nCount++;
	return nCount;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区高清| 日韩三级免费观看| 日韩二区三区四区| 国产精品免费免费| 欧美一区二区三区的| 精品国内片67194| 91蜜桃传媒精品久久久一区二区| 看片的网站亚洲| 亚洲乱码国产乱码精品精98午夜| 日韩视频123| 欧美三片在线视频观看| 暴力调教一区二区三区| 久久99精品国产麻豆婷婷洗澡| 一区二区在线看| 国产日韩三级在线| 精品伦理精品一区| 制服丝袜日韩国产| 91成人网在线| www.欧美亚洲| 国产激情精品久久久第一区二区 | 亚洲精品国久久99热| 欧美本精品男人aⅴ天堂| 欧美日韩亚洲综合在线| 在线欧美一区二区| 99久久免费视频.com| 国产91丝袜在线播放0| 久久成人免费网站| 免费观看一级欧美片| 亚洲国产精品久久久男人的天堂| 亚洲色图在线播放| 中文字幕精品一区二区三区精品| 久久婷婷国产综合精品青草| 日韩欧美国产一区在线观看| 欧美年轻男男videosbes| 欧美午夜理伦三级在线观看| 91麻豆swag| 国产亚洲欧美激情| 日韩午夜中文字幕| 日韩一区二区免费电影| 日韩一区二区三区视频在线观看| 正在播放亚洲一区| 91精品欧美一区二区三区综合在 | 成人av资源网站| 成人av中文字幕| 99久久精品免费看国产免费软件| 成人免费毛片app| jlzzjlzz亚洲日本少妇| 成人avav影音| 日本精品免费观看高清观看| 色综合天天性综合| 欧美体内she精高潮| 欧美日本一区二区三区四区| 欧美一区日本一区韩国一区| 日韩欧美一区中文| 久久久久久麻豆| 日本一区二区不卡视频| 亚洲免费在线观看视频| 亚洲一区精品在线| 日韩不卡免费视频| 极品少妇一区二区三区精品视频| 国产一区二区三区在线看麻豆| 国产老女人精品毛片久久| 国产成人综合网| 91在线视频18| 777久久久精品| 国产香蕉久久精品综合网| 国产精品久久久久久久第一福利 | 婷婷六月综合亚洲| 青草av.久久免费一区| 国产精品影音先锋| 色综合天天综合| 日韩视频国产视频| 中文幕一区二区三区久久蜜桃| 亚洲精品精品亚洲| 免费精品视频最新在线| 懂色av一区二区夜夜嗨| 在线一区二区观看| 精品日韩欧美在线| 亚洲人成网站在线| 美女视频黄a大片欧美| 成人小视频在线观看| 欧美性极品少妇| 久久一区二区三区四区| 亚洲精品水蜜桃| 奇米777欧美一区二区| 成人国产精品视频| 日韩一级完整毛片| 国产精品视频你懂的| 婷婷六月综合网| 成人黄色网址在线观看| 91精品国产色综合久久| 18涩涩午夜精品.www| 蜜桃视频一区二区三区在线观看 | 欧美日本国产视频| 久久精品日产第一区二区三区高清版| 一区二区三区在线视频观看58 | 国产亚洲精品久| 亚洲成a人在线观看| 成人精品在线视频观看| 日韩欧美精品在线视频| 亚洲日本va在线观看| 国产精品影视天天线| 91麻豆精品国产91| 亚洲精选视频免费看| 国产成人一区二区精品非洲| 欧美日韩精品系列| 亚洲人成精品久久久久久| 久草这里只有精品视频| 欧美乱熟臀69xxxxxx| 亚洲精品综合在线| 国产98色在线|日韩| 精品伦理精品一区| 免费黄网站欧美| 欧美剧在线免费观看网站| 亚洲欧美日韩在线播放| 高潮精品一区videoshd| 精品久久免费看| 免费在线视频一区| 欧美日韩一区三区| 樱桃视频在线观看一区| 9i看片成人免费高清| 国产三级欧美三级日产三级99| 日韩av电影一区| 欧美精品1区2区| 亚瑟在线精品视频| 色婷婷精品大在线视频| 最新日韩av在线| 精品对白一区国产伦| 久久99蜜桃精品| 精品久久久久久久久久久久久久久| 亚洲sss视频在线视频| 欧美丝袜自拍制服另类| 亚洲日韩欧美一区二区在线| 99久久综合精品| 亚洲天堂精品在线观看| 97se亚洲国产综合自在线不卡 | 国产欧美日韩在线观看| 国产在线精品一区二区三区不卡| 日韩一级二级三级| 久久国产欧美日韩精品| 精品伦理精品一区| 国产精品中文有码| 国产精品欧美极品| 99久久国产免费看| 亚洲猫色日本管| 欧美影视一区二区三区| 亚洲第一精品在线| 91精品福利在线一区二区三区| 日本美女一区二区三区视频| 欧美一级二级三级蜜桃| 久久66热偷产精品| 国产欧美日韩三级| 91亚洲国产成人精品一区二三| 亚洲精品免费在线播放| 欧美日韩精品一区二区天天拍小说| 视频一区视频二区中文| 亚洲动漫第一页| 日韩午夜在线观看| 国产精一品亚洲二区在线视频| 欧美激情一区二区三区蜜桃视频 | 国产精品一区二区久久精品爱涩| 中文字幕第一区| 在线观看91精品国产入口| 日韩福利电影在线观看| 久久久久久日产精品| 色综合久久综合中文综合网| 日韩制服丝袜先锋影音| 久久久久久99精品| 色婷婷亚洲综合| 美日韩一区二区| 中文字幕一区二区不卡| 欧美中文字幕久久| 狠狠v欧美v日韩v亚洲ⅴ| 中文字幕一区二区不卡| 欧美乱熟臀69xxxxxx| 从欧美一区二区三区| 午夜视频在线观看一区| 久久久久99精品国产片| 色94色欧美sute亚洲线路一ni| 日韩高清在线观看| 中文字幕欧美国产| 欧美日韩一级二级三级| 国产一区二区三区久久久| 亚洲精品成a人| 久久综合久久久久88| 日本久久一区二区| 国产精品自在欧美一区| 亚洲夂夂婷婷色拍ww47 | 欧美日韩一区视频| 粉嫩高潮美女一区二区三区| 亚洲图片有声小说| 久久久欧美精品sm网站| 欧美日本在线视频| 99精品视频在线观看| 久久99久久99精品免视看婷婷| 最新日韩av在线| 久久综合九色综合97婷婷 | 欧美激情中文字幕| 91精品国产乱码| 色综合色综合色综合色综合色综合 |