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

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

?? bitarray.h

?? The Bit Array structure provides a compacted arrays of Booleans, with one bit for each Boolean value
?? H
字號(hào):
// BitArray.h
//
//////////////////////////////////////////////////////////////////////

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "mem.h"

#include <vector>
using namespace std;

#define GetBit(a, b)	((((BYTE*)a)[(b)>>3] >> ((b)&7)) & 1)
#define SetBit(a, b)	(((BYTE*)a)[(b)>>3] |= (1 << ((b)&7)))
#define ResetBit(a, b)	(((BYTE*)a)[(b)>>3] &= ~(1 << ((b)&7)))
#define XOrBit(a, b)	(((BYTE*)a)[(b)>>3] ^= (1 << ((b)&7)))

enum Operation
{
	OR		= 0x00000001,
	AND		= 0x00000002,
	XOR		= 0x00000004,
	COPY	= 0x00000008,
	SET		= 0x00000001,
	RESET	= 0x00000002,
	GET		= 0x00000004,
	EQUAL	= 0x00000001,
	GREATER = 0x00000002,
	LESS	= 0x00000004,
	NOTEQUAL= 0x00000008,
};

class CBitArray
{
public:
	CBitArray(bool bCompressed = false);
	CBitArray(CBitArray &src);
	CBitArray(BYTE* pBuffer, int nLength, bool bCompressed = false);
	virtual ~CBitArray();

public:
	BYTE *GetBuffer()	{	return m_pBuffer;	}
	// returns byte steam pointer
	BYTE *Detach();
	// returns byte steam pointer and free internal buffer
	void Attach(BYTE* pBuffer, int nLength);
	// attachs the object with the input buffer
	void Init(BYTE* pBuffer, int nLength);
	// initializes the object with the input buffer
	int GetLength()	{	return m_nLength;	}
	// returns byte steam length
	bool IsEmpty();
	// check if the bitarray is empty (no ones)
	bool IsRangeEmpty(int nStartBit, int nEndBit);
	void SetRange(int nStartBit, int nEndBit);
	// set all range bits to 1
	void ResetRange(int nStartBit, int nEndBit);
	// reset all range bits
	void ResetAt(CBitArray *pBitArray);
	// reset all bits that have ones values at the input bitarray
	void XOrRange(int nStartBit, int nEndBit);
	// toggle bits values of the input range
	void CopyRange(const CBitArray& src, int nStartBit, int nEndBit);
	// copy bits values from the input bitarray range
	inline bool GetAt(int nBit)
	{
		if(m_bCompressed)
			return GetAt(m_pBuffer, m_nLength, nBit);
		if(nBit >= m_nLength<<3)
			return false;
		return GetBit(m_pBuffer, nBit);
	}
	inline void SetAt(int nBit)
	{
		if(m_bCompressed)
		{
			SetAt(m_pBuffer, m_nLength, nBit);
			m_nAllocLength = m_nLength;
		}
		else
		{
			if(nBit >= m_nLength<<3)
				SetLength((nBit>>3)+1);
			SetBit(m_pBuffer, nBit);
		}
		SetModified();
	}
	inline void ResetAt(int nBit)
	{
		if(nBit < m_nLength<<3)
			ResetBit(m_pBuffer, nBit);
		SetModified();
	}
	inline void XOrAt(int nBit)
	{
		if(nBit >= m_nLength<<3)
			SetLength((nBit>>3)+1);
		XOrBit(m_pBuffer, nBit);
		SetModified();
	}
	inline void SetAll()
	{
		memset(m_pBuffer, 0xff, m_nLength);
		SetModified();
	}
	inline void ResetAll()
	{
		memset(m_pBuffer, 0, m_nLength);
		SetModified();
	}
	int GetCount();
	// returns number of ones in the bitarray
	int GetRangeCount(int nStartBit, int nEndBit);
	// returns number of ones in the range of the bitarray
	void SetLength(int nLength);
	// sets bitarray byte steam length
	void FreeBuffer();
	// frees internal buffer
	int GetIndexBit(int nIndex);
	// returns the bit number of the one index
	int GetBitIndex(int nBit);
	// returns the index of the one in the input bit number
	void Delete(int nStart, int nEnd);
	// deletes the input range from bits stream
	void Insert(int nStart, int nCount, bool bSet);
	// insert values in a specified start bit

	inline bool operator[](int nBit)
	{	return GetAt(nBit);	}
	void operator=(const CBitArray& src);
	void operator|=(const CBitArray& src);
	void operator&=(const CBitArray& src);
	void operator^=(const CBitArray& src);
	bool operator==(const CBitArray& src);
	bool operator!=(const CBitArray& src);
	bool operator&&(const CBitArray& src);
	CBitArray operator&(const CBitArray& src);
	CBitArray operator|(const CBitArray& src);
	CBitArray operator^(const CBitArray& src);
	void Compress();
	void Decompress();

	static void Compress(BYTE *src, int nSrcLen, BYTE *&des, int &ndesLen);
	static void Decompress(BYTE *&src, int &nSrcLen, int nMaxLen = -1);
	static int DecompressLength(BYTE *src, int nSrcLen);
	static bool SetAt(BYTE *&src, int &nSrcLen, int nBit);
	static bool GetAt(BYTE *src, int nSrcLen, int nBit);
	inline static void Mem(Operation op, BYTE *src, int srcLen, BYTE *&des, int &desLen)
	{
		if(op == AND)
		{
			desLen = min(desLen, srcLen);
			for(int nByte = 0; nByte < desLen; nByte++)
				des[nByte] &= src[nByte];
			while(desLen && des[desLen-1] == 0)
				desLen--;
			return;
		}
		if(desLen < srcLen)
		{
			if(desLen == 0 || des == NULL)
				des = (BYTE*)AllocPtr(srcLen);
			else
				des = (BYTE*)ReAllocPtr(des, srcLen);
			desLen = srcLen;
		}
		if(op == COPY)
			memcpy(des, src, srcLen);
		else	if(op == OR)
			for(int nByte = 0; nByte < srcLen; nByte++)
				des[nByte] |= src[nByte];
		else	if(op == XOR)
			for(int nByte = 0; nByte < srcLen; nByte++)
				des[nByte] ^= src[nByte];
	}
	inline static void Mem(Operation op, CBitArray &src, CBitArray &des)
	{
		if(op == AND)
			des &= src;
		else	if(op == COPY)
			des = src;
		else	if(op == OR)
			des |= src;
		else	if(op == XOR)
			des ^= src;
	}
	inline static void BitsNot(BYTE *&p, int &nLength, int nNewBitsLen)
	{
		int nNewLen = (nNewBitsLen+7)/8;
		if(nNewLen > nLength)
		{
			if(nLength == 0)
				p = (BYTE*)AllocPtr(nNewLen);
			else
				p = (BYTE*)ReAllocPtr(p, nNewLen);
			nLength = nNewLen;
		}
		for(int nByte = 0; nByte < nNewLen; nByte++)
			p[nByte] = ~p[nByte];
		for(int nBit = nNewBitsLen; nBit < nNewLen*8; nBit++)
			ResetBit(p, nBit);
	}

	inline static int GetBitsValue(BYTE *p, int nStartBit, int nBitCount)
	{
		int nValue = 0;
		for(int nBit = nStartBit; nBitCount--; nBit++)
			if(GetBit(p, nBit))
				SetBit(&nValue, nBit-nStartBit);
		return nValue;
	}
	inline static void SetAt(BYTE *src, int nSrcStartBit, BYTE *des, int nDesStartBit, int nBitCount)
	{
		while(nBitCount--)
		{
			if(GetBit(src, nSrcStartBit))
				SetBit(des, nDesStartBit);
			else
				ResetBit(des, nDesStartBit);
			nSrcStartBit++, nDesStartBit++;
		}
	}
	inline bool IsModified()
	{
		return m_bModified;
	}
	inline void SetModified(bool bModified)
	{
		m_bModified = bModified;
	}
	inline bool IsCompressed()
	{
		return m_bCompressed;
	}
	inline void SetCompressed(bool bCompressed)
	{
		m_bCompressed = bCompressed;
	}
	void Invert(int nMaxBits);
	// inverts all bits values to the input bit number
	int GetHeadBit();
	// return first '1' bit number
	int GetTailBit();
	// return last '1' bit number
	int GetActualBit(int dwIndexBit);
	int Bmp2Array(int *&pBuffer, bool bAllocated = false);
	int Bmp2Array(vector<int> &nIntArray);
	void Append2Array(vector<int> &nIntArray);
	int Range2Array(int nStartBit, int nEndBit, vector<int> &nIntArray);

protected:
	void InitValues();
	void SetModified();
	void Index();

protected:
	BYTE* m_pBuffer;	// byte steam pointer
	int m_nLength, m_nAllocLength;
	int m_nCount;	// '1's count in the bits stream
	int *m_nIndexes, m_nIndexesCount;
	int m_nBitSeg;
	bool m_bModified;
	bool m_bCompressed;
};

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线色| 老色鬼精品视频在线观看播放| 色94色欧美sute亚洲线路二| 丁香婷婷综合色啪| 国产精品1区二区.| 国产在线视视频有精品| 韩国av一区二区三区在线观看| 青青青爽久久午夜综合久久午夜| 亚洲国产精品久久人人爱| 亚洲黄网站在线观看| 亚洲欧美国产三级| 亚洲免费在线看| 亚洲摸摸操操av| 亚洲人成影院在线观看| 亚洲精品免费在线| 亚洲综合图片区| 亚洲二区视频在线| 日韩av在线发布| 日韩av一级电影| 美腿丝袜亚洲色图| 国产一区二区剧情av在线| 91精品在线观看入口| 欧美一区二区三区在线电影| 欧美一区二区久久久| 精品美女被调教视频大全网站| 亚洲男人天堂av| 中文字幕一区二区三| 亚洲天堂成人在线观看| 亚洲乱码国产乱码精品精98午夜| 一区二区三区 在线观看视频| 一区二区三区在线免费播放| 亚洲午夜精品一区二区三区他趣| 丝袜美腿亚洲色图| 麻豆精品一区二区av白丝在线| 精品影视av免费| 豆国产96在线|亚洲| 色综合天天天天做夜夜夜夜做| 欧美日韩中文精品| 精品国产免费一区二区三区香蕉| 中文欧美字幕免费| 亚洲午夜三级在线| 久久99热这里只有精品| 成人综合在线观看| 欧美亚洲国产bt| 日本不卡一区二区| 国产精一品亚洲二区在线视频| 99久久精品一区二区| 欧美精品粉嫩高潮一区二区| 久久久久久99精品| 一区二区在线观看av| 久久国产精品无码网站| 99久久久久久| 亚洲精品免费视频| 九九精品视频在线看| 国产成人在线视频免费播放| 色一情一乱一乱一91av| 91精品在线观看入口| 国产精品久久久久影视| 天天综合日日夜夜精品| 国产jizzjizz一区二区| 欧美日韩不卡在线| 国产精品免费久久| 天堂蜜桃一区二区三区| 成人av手机在线观看| 在线播放欧美女士性生活| 中文字幕不卡在线播放| 日本欧美韩国一区三区| 91视频.com| 久久精品视频网| 婷婷六月综合网| 97精品视频在线观看自产线路二| 日韩欧美久久久| 亚洲午夜一区二区三区| 成人一级黄色片| 日韩精品专区在线影院观看| 亚洲精品日韩专区silk| 国产成人精品亚洲日本在线桃色 | 欧美国产一区二区| ...中文天堂在线一区| 久草精品在线观看| 欧美日韩国产一区二区三区地区| 国产精品色噜噜| 精品午夜一区二区三区在线观看 | 日韩西西人体444www| 亚洲精品第一国产综合野| 高清在线观看日韩| 欧美不卡一区二区| 日韩不卡一区二区三区| 欧美网站一区二区| 亚洲色大成网站www久久九九| 国产成人综合精品三级| 日韩欧美中文字幕公布| 日韩精品一级中文字幕精品视频免费观看 | 日韩一区二区在线观看视频播放| 一区二区三区四区不卡在线| 岛国av在线一区| 久久久久久免费毛片精品| 美女视频黄频大全不卡视频在线播放| 欧洲人成人精品| 亚洲日本在线视频观看| 成人福利视频在线| 国产精品三级视频| 大胆欧美人体老妇| 国产女人水真多18毛片18精品视频| 九九精品一区二区| 精品国产乱码久久久久久闺蜜| 免费人成黄页网站在线一区二区| 欧美日本国产一区| 丝瓜av网站精品一区二区 | 在线视频一区二区免费| 亚洲乱码国产乱码精品精的特点 | 久久午夜免费电影| 国产一区二区精品久久91| 久久综合色8888| 国产精品综合久久| 中文一区在线播放| 99久久亚洲一区二区三区青草| 国产精品青草久久| av电影在线观看完整版一区二区| 国产精品伦一区二区三级视频| 成人的网站免费观看| 亚洲天堂成人网| 欧美视频三区在线播放| 偷拍日韩校园综合在线| 日韩精品一区二区三区四区视频| 黑人巨大精品欧美黑白配亚洲| 久久综合色综合88| 成人动漫一区二区三区| 亚洲男人的天堂在线观看| 欧美色偷偷大香| 日韩av中文在线观看| 精品99999| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日韩美女精品在线| 亚洲精选视频免费看| 91成人免费在线视频| 视频一区中文字幕| 2020国产精品| 91在线无精精品入口| 亚洲福利一二三区| 精品国精品国产| 不卡的看片网站| 午夜婷婷国产麻豆精品| 欧美电影免费观看高清完整版| 国产成人免费高清| 一区二区三区在线视频观看| 欧美一区二区成人| 风间由美一区二区三区在线观看| 亚洲精品自拍动漫在线| 日韩视频一区二区| 波多野洁衣一区| 午夜视频在线观看一区| 久久久三级国产网站| 在线视频一区二区三区| 极品尤物av久久免费看| 亚洲蜜臀av乱码久久精品| 日韩欧美一区二区免费| 91在线观看一区二区| 日韩精品成人一区二区三区| 中文字幕不卡在线观看| 91精品国产全国免费观看| 成人app软件下载大全免费| 日韩va欧美va亚洲va久久| 中文字幕一区二区三区av| 日韩一二三四区| 一本色道a无线码一区v| 极品销魂美女一区二区三区| 一区二区三区在线观看网站| 日韩欧美在线综合网| 色婷婷综合久色| 国产精品99久久久久久有的能看| 亚洲成a人片综合在线| 欧美国产成人精品| 欧美一区二区三区免费在线看 | 不卡的av在线| 蜜桃免费网站一区二区三区| 悠悠色在线精品| 国产日韩欧美综合一区| 欧美一区二区国产| 一本大道av伊人久久综合| 国产精品一区二区久久精品爱涩| 午夜精品福利一区二区三区av | 欧美日韩免费观看一区二区三区 | 久久久久久夜精品精品免费| 欧美日韩国产首页在线观看| 99精品国产99久久久久久白柏 | 99久久综合国产精品| 国产一区亚洲一区| 日韩电影一二三区| 亚洲一区在线免费观看| 99久久伊人久久99| 激情成人午夜视频| 亚洲国产日韩一级| 136国产福利精品导航| 久久网这里都是精品| 日韩女优av电影在线观看| 欧美精品久久一区| 欧美日韩三级一区| 欧美中文字幕一区| 日本韩国欧美在线|