45 mutable bool m_boTemp;
57 static void ms_ShiftRight(INDEX startIndex, BYTE* B,
size_t len)
59 bool boLastBit =
false;
60 BYTE bTop = B[startIndex / 8];
61 for ( INDEX i = len - 1; i >= startIndex / 8; i-- )
63 bool b = (B[i] &
_BIT(0)) != 0;
71 INDEX pos = startIndex & 7;
74 BYTE bMask =
static_cast<BYTE
>(
_BIT(pos) - 1);
76 B[startIndex / 8] &= ~bMask;
77 B[startIndex / 8] |= bTop;
91 static void ms_ShiftLeft(INDEX startIndex, BYTE* B,
size_t len)
93 bool boLastBit =
false;
94 BYTE bTop = B[startIndex / 8];
95 for ( INDEX i = startIndex / 8; i < len; i++ )
97 bool b = (B[i] &
_BIT(7)) != 0;
105 INDEX pos = startIndex & 7;
108 BYTE bMask =
static_cast<BYTE
>(
_BIT(pos) - 1);
110 B[startIndex / 8] &= ~bMask;
111 B[startIndex / 8] |= bTop;
147 operator bool(
void)
const
149 return m_vb->
At(m_index);
160 m_vb->
Set(m_index, b);
179 return (*m_V)[m_ind];
183 return (*m_V)[m_ind+i];
224 INDEX i = ite.GetIndex();
245 explicit CBitVector(
size_t size = 0) : _super(), m_vbData(size)
257 m_dataSize = other.m_dataSize;
274 m_vbData = other.m_vbData;
275 m_dataSize = other.m_dataSize;
300 virtual bool Lock(DWORD dwTime = INFINITE)
const
302 return m_syncFunc.
Lock();
328 virtual const bool&
At(INDEX index)
const
334 m_boTemp = (m_vbData[index / 8] &
_BIT(index & 7)) != 0;
345 virtual bool&
Ref(INDEX index)
359 virtual bool Set(INDEX index,
const bool& t)
367 m_vbData[index / 8] |=
_BIT(index & 7);
371 m_vbData[index / 8] &= ~_BIT(index & 7);
382 virtual INDEX
Add(
const bool& t)
384 if ( m_dataSize == 0 || (m_dataSize & 7) == 7 )
390 m_vbData[m_dataSize / 8] |=
_BIT(m_dataSize & 7);
394 m_vbData[m_dataSize / 8] &= ~_BIT(m_dataSize & 7);
439 if ( index == m_dataSize )
441 return IsValid(
Add(t));
447 if ( m_dataSize == 0 || (m_dataSize & 7) == 7 )
455 m_vbData[index / 8] |=
_BIT(index & 7);
459 m_vbData[index / 8] &= ~_BIT(index & 7);
479 return CRef(
this, index);
496 return CRef(
this, index);
bool operator=(bool b)
[設定] データ設定
virtual bool Set(INDEX index, const bool &t)
[設定] 要素の設定.
virtual INDEX Add(const bool &t)
[追加] 要素一つ追加.
iterator insert(iterator ite, bool t=false)
[反復] 挿入
virtual size_t GetSize(void) const
[取得] サイズ取得
const_iterator end(void) const
[反復] 最後const_iterator.
iterator begin(void)
[反復] 先頭iterator.
CBitVector & operator=(const CBitVector &other)
[代入] コピーオペレータ
void SetIncrementSize(size_t size)
[設定] 余白サイズ
virtual bool Remove(INDEX index)
[削除] 要素一つ削除.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
CBitVector(const CBitVector &other)
コピーコンストラクタ
void push_front(bool t)
[反復] 先頭に挿入
const CRef operator[](INDEX index) const
[取得] 要素の参照取得.
virtual bool & Ref(INDEX index)
[取得] 要素の参照取得.
virtual bool RemoveAll(void)
[削除] 空化
virtual ~CBitVector(void)
デストラクタ
bool Insert(INDEX index, const bool &t)
[追加] 要素一つ挿入
virtual const bool & At(INDEX index) const
[取得] 要素の参照取得.
CRef operator[](INDEX index)
[取得] 要素の参照取得.
const_iterator begin(void) const
[反復] 先頭const_iterator.
virtual void Unlock(void) const
[排他] アンロック
friend class CBitVectorTest
フレンドクラス宣言
iterator end(void)
[反復] 最後iterator.
CBitVector(size_t size=0)
コンストラクタ
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual void Unlock(void) const
[排他] アンロック
virtual size_t GetSize(void) const
[取得] サイズ取得
TYP * GetBuffer(size_t size=0)
[操作] データアドレス取得
void SetIncrementSize(size_t size)
[設定] 余白サイズ
void ReleaseBuffer(void)
[操作] データの管理を元に戻す.
virtual bool RemoveAll(void)
[削除] 空化
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
CValueAcceleration operator*(const CValueSpeed &s, const CValueFrequency &f)
[計算] 掛算 (加速度 = 速度 × 周波数) .
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.