25#pragma comment(user,"T-Coverage Disable")
50 size_t m_BufSize(
void)
const
52 return (m_bitSize + 7) / 8;
55 INDEX m_BitNo(INDEX index)
const
60 INDEX m_ByteNo(INDEX index)
const
65 bool m_Test(INDEX index)
const
67 return (m_pBuf[m_ByteNo(index)] &
_BIT(m_BitNo(index))) != 0;
70 void m_Set(INDEX index)
72 m_pBuf[m_ByteNo(index)] |=
_BIT(m_BitNo(index));
75 void m_Reset(INDEX index)
77 m_pBuf[m_ByteNo(index)] &= ~_BIT(m_BitNo(index));
80 void m_Fix(INDEX index,
bool b)
82 (b) ? m_Set(index) : m_Reset(index);
85 void m_Flip(INDEX index)
87 m_Test(index) ? m_Reset(index) : m_Set(index);
97 explicit CBitSet(
size_t bitSize = 32) : _super()
104 m_pBuf =
new BYTE[m_BufSize()];
105 memset(m_pBuf, 0, m_BufSize());
118 if ( m_bitSize == 0 )
122 m_pBuf =
new BYTE[m_BufSize()];
123 memset(m_pBuf, 0, m_BufSize());
124 loop ( i, m_bitSize )
126 if ( lpszBin[i] !=
'0' )
128 m_Set(m_bitSize - 1 - i);
148 if ( m_pBuf != NULL )
163 ASSERTLIB(other.m_bitSize > 0);
164 if ( m_pBuf != NULL )
168 m_bitSize = other.m_bitSize;
169 m_pBuf =
new BYTE[m_BufSize()];
170 MemCopy(m_pBuf, other.m_pBuf, m_BufSize());
184 if ( size == 0 || P == NULL )
188 if ( m_pBuf != NULL )
192 m_bitSize = size * 8;
193 ASSERTLIB(m_BufSize() == size);
194 m_pBuf =
new BYTE[size];
195 MemCopy(m_pBuf,
static_cast<const BYTE*
>(P), size);
209 if ( m_bitSize <
sizeof(ULONGLONG) * 8 )
211 ullValue &=
_BIT(m_bitSize) - 1;
213 size_t s = m_BufSize();
214 if ( s >= 7 ){ m_pBuf[7] =
static_cast<BYTE
>(ullValue>>56); }
215 if ( s >= 6 ){ m_pBuf[6] =
static_cast<BYTE
>(ullValue>>48); }
216 if ( s >= 5 ){ m_pBuf[5] =
static_cast<BYTE
>(ullValue>>40); }
217 if ( s >= 4 ){ m_pBuf[4] =
static_cast<BYTE
>(ullValue>>32); }
218 if ( s >= 3 ){ m_pBuf[3] =
static_cast<BYTE
>(ullValue>>24); }
219 if ( s >= 2 ){ m_pBuf[2] =
static_cast<BYTE
>(ullValue>>16); }
220 if ( s >= 1 ){ m_pBuf[1] =
static_cast<BYTE
>(ullValue>> 8); }
221 m_pBuf[0] =
static_cast<BYTE
>(ullValue );
233 for ( INDEX i = 0; i <
sizeof(UINT) * 8; i++ )
254 for (
size_t i =
GetSize(); i <
sizeof(int) * 8; i++ )
270 for ( INDEX i = 0; i <
sizeof(ULONGLONG) * 8; i++ )
291 for (
size_t i =
GetSize(); i <
sizeof(ULONGLONG) * 8; i++ )
309 for ( INDEX i = m_bitSize - 1; i >= 0; i-- )
311 *P++ = m_Test(i) ? _T(
'1') : _T(
'0');
356 return m_Test(index);
380 for ( INDEX i = 0; i < m_bitSize; i++ )
408 memset(m_pBuf, 0, m_BufSize());
433 for ( INDEX i = 0; i<m_bitSize; i++ )
462 for ( INDEX i = 0; i < bitSize; i++ )
464 if (
Test(i + index) )
490 for ( INDEX i = 0; i < m_bitSize; i++ )
507 for ( INDEX i = 0; i < m_bitSize; i++ )
524 for ( INDEX i = 0; i < m_bitSize; i++ )
526 m_Fix(i, t.
Test(i)^m_Test(i));
539 ASSERT0(
false,
"CBitSet::operator>>=()",
"未実装");
551 ASSERT0(
false,
"CBitSet::operator<<=()",
"未実装");
565 MemCopy(bs.m_pBuf, m_pBuf, m_BufSize());
566 for ( INDEX i = 0; i < l2; i++ )
650 size_t size = (m_bitSize < t.m_bitSize) ? t.m_bitSize : m_bitSize;
652 for ( INDEX i = 0; i < size; i++ )
665 friend class CBitSetTest;
705#pragma comment(user,"T-Coverage Enable")
#define loop(VAR, CNT)
loop構文.
CBitSet operator<<(DWORD dwPos) const
[取得] 右シフト計算結果取得
CBitSet & SetData(size_t size, LPCVOID P)
[代入] データ代入.
int GetSignedInt(void) const
[取得] 数値取り出し.
CBitSet operator~(void) const
[取得] BIT反転情報取得
CBitSet & Flip(INDEX index)
[設定] BIT反転.
CBitSet & SetInteger(ULONGLONG ullValue)
[代入] 数値代入.
CBitSet & Set(void)
[設定] BITセット.
size_t GetSize(void) const
[取得] BIT数サイズ取得.
CBitSet GetMid(INDEX index, size_t bitSize) const
[取得] 一部取り出し.
CBitSet & operator>>=(DWORD dwPos)
[計算] 右シフト計算
ULONGLONG GetUnsignedInt64(void) const
[取得] 数値取り出し.
CBitSet(LPCTSTR lpszBin)
コンストラクタ.
CBitSet operator&(const CBitSet &t) const
[取得] AND計算結果取得
virtual INT_PTR Compare(const CBitSet &t) const
[確認] 比較
CBitSet operator+(const CBitSet &t)
[計算] 足し算結果取得
CBitSet & operator^=(const CBitSet &t)
[計算] XOR計算
CBitSet operator|(const CBitSet &t) const
[取得] OR計算結果取得
bool IsInRange(INDEX index) const
[確認] INDEX有効チェック.
CBitSet & SetSize(size_t size)
[設定] BIT数サイズ設定.
CBitSet(const CBitSet &other)
コピーコンストラクタ.
LONGLONG GetSignedInt64(void) const
[取得] 数値取り出し.
UINT GetUnsignedInt(void) const
[取得] 数値取り出し.
CBitSet operator^(const CBitSet &t) const
[取得] XOR計算結果取得
CBitSet & Flip(void)
[設定] BIT反転.
CBitSet operator>>(DWORD dwPos) const
[取得] 左シフト計算結果取得
CBitSet & operator+=(const CBitSet &t)
[計算] 足し算
virtual ~CBitSet(void)
デストラクタ
CStr ToString(void) const
[取得] 文字列取り出し.
bool Test(INDEX index) const
[確認] BITの状態.
CBitSet & Reset(void)
[設定] BITリセット.
CBitSet & Set(INDEX index)
[設定] BITセット.
CBitSet & operator|=(const CBitSet &t)
[計算] OR計算
CBitSet & operator&=(const CBitSet &t)
[計算] AND計算
CBitSet & operator<<=(DWORD dwPos)
[計算] 左シフト計算
CBitSet(size_t bitSize=32)
コンストラクタ
CBitSet & Reset(INDEX index)
[設定] BITリセット.
CBitSet & operator=(const CBitSet &other)
[代入] コピーオペレータ.
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
bool IsInRange(INDEX value, size_t size)
[確認] 範囲チェック.
ISerializer & operator<<(ISerializer &_sr, const CBitSet &t)
[追加] シリアライズ
const IDeserializer & operator>>(const IDeserializer &ds, CBitSet &_t)
[取得] デシリアライズ
void MemCopy(T *_pDst, const void *pSrc, size_t len)
[複製] メモリコピー