67 virtual bool Lock(DWORD dwTime = INFINITE)
const
122template<
typename TYP>
137 : _super(c), m_startIndex(startIndex)
139 _super::m_size = size;
148 size_t l =
m_pCol->GetSize() - m_startIndex;
149 if ( _super::m_size != INVALID_SIZE && l > _super::m_size)
164 virtual const TYP&
At(INDEX index)
const
166 return m_pCol->At(index + m_startIndex);
192template<
typename TYP>
215 virtual const TYP&
At(INDEX index)
const
217 return m_pCol->At(_super::m_size - index - 1);
240template<
typename TYP>
254 : _super(c1), m_p2ndCol(c2)
256 m_sizeCol =
m_pCol->GetSize();
257 _super::m_size = m_sizeCol + m_p2ndCol->
GetSize();
268 virtual bool Lock(DWORD dwTime = INFINITE)
const
288 virtual const TYP&
At(INDEX index)
const
290 return (index < m_sizeCol) ?
m_pCol->At(index) : m_p2ndCol->
At(index - m_sizeCol);
318template<
typename TYP>
335 : _super(), m_pCol(c), m_startIndex(startIndex), m_size(size)
347 virtual bool Lock(DWORD dwTime = INFINITE)
const
349 return m_pCol->
Lock();
364 size_t l = m_pCol->
GetSize() - m_startIndex;
376 virtual const TYP&
At(INDEX index)
const
378 return m_pCol->
At(index + m_startIndex);
390 virtual TYP&
Ref(INDEX index)
392 return m_pCol->
Ref(index + m_startIndex);
404 virtual bool Set(INDEX index,
const TYP& t)
406 return m_pCol->
Set(index + m_startIndex, t);
415 virtual INDEX
Add(
const TYP& t)
417 return INVALID_INDEX;
437 virtual void Swap(INDEX index1, INDEX index2)
439 m_pCol->
Swap(index1 + m_startIndex, index2 + m_startIndex);
470template<
typename TYP>
503 : _super(), m_pcType(static_cast<const TYP*>(P)), m_size(size)
512 virtual bool Lock(DWORD dwTime = INFINITE)
const
549 virtual const TYP&
At(INDEX index)
const
552 return m_pcType[index];
575 m_pcType = other.m_pcType;
576 m_size = other.m_size;
606template<
typename TYP>
621 virtual bool Lock(DWORD dwTime = INFINITE)
const {
return m_pCol->
Lock(); }
625 virtual size_t GetSize(
void)
const {
return m_size; }
627 virtual const TYP&
At(INDEX index)
const
630 return m_pCol->
At(m_pIndexs[index]);
635 virtual bool Set(INDEX index,
const TYP& t) {
return false; }
637 virtual INDEX Add(
const TYP& t) {
return INVALID_INDEX; }
639 virtual bool Remove(INDEX index)
641 if ( !
IsInRange(index) ){
return false; }
642 for ( INDEX i = index; i < m_size - 1; i++ )
644 m_pIndexs[i] = m_pIndexs[i + 1];
650 virtual void Swap(INDEX index1, INDEX index2)
653 TNB::Swap(m_pIndexs[index1], m_pIndexs[index2]);
671 m_param.m_pIndexs =
new INDEX[m_param.m_size];
672 loop ( i, m_param.m_size )
674 m_param.m_pIndexs[i] = i;
681 if ( m_param.m_pIndexs != NULL )
683 delete[] m_param.m_pIndexs;
684 m_param.m_pIndexs = NULL;
701 return IsInRange(index) ? m_param.m_pIndexs[index] : INVALID_INDEX;
712 virtual bool Lock(DWORD dwTime = INFINITE)
const
714 return m_param.Lock();
729 return m_param.m_size;
740 virtual const TYP&
At(INDEX index)
const
742 return m_param.At(index);
753 return m_param.Remove(index);
762 void Swap(INDEX index1, INDEX index2)
764 m_param.Swap(index1, index2);
780 return m_param.Sort(comparator, boIsReverse, boIsBubble);
793 bool Sort(
bool boIsReverse =
false,
bool boIsBubble =
false)
795 return m_param.Sort(boIsReverse, boIsBubble);
810 if ( m_param.m_size > 0 )C
812 size_t size = m_param.m_size;
813 INDEX* P =
new INDEX[size];
814 MemCopy(P, m_param.m_pIndexs, size);
815 for (
size_t i = 0; i < size; i++ )
817 if ( checker.
IsValid(
At(i)) ^ boIsReverse )
819 m_param.m_pIndexs[r++] = P[i];
834 if ( m_param.m_size != m_pCol->GetSize() )
836 m_param.m_size = m_pCol->GetSize();
837 if ( m_param.m_pIndexs != NULL )
839 delete[] m_param.m_pIndexs;
841 m_param.m_pIndexs =
new INDEX[m_param.m_size];
843 loop ( i, m_param.m_size )
845 m_param.m_pIndexs[i] = i;
#define loop(VAR, CNT)
loop構文.
const IConstCollectionT< TYP > * m_pCol
対象のコレクション
virtual size_t GetSize(void) const
[取得] 要素数取得
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
CAbstractAdapterT & operator=(const CAbstractAdapterT &other)
[代入] コピーオペレータ.
CAbstractAdapterT(const IConstCollectionT< TYP > *c)
コンストラクタ
virtual void Unlock(void) const
[排他] アンロック
virtual size_t GetSize(void) const
[取得] 要素数取得
const_iterator end(void) const
[反復] 最後const_iterator.
CConstAdapterT & operator=(const CConstAdapterT &other)
[代入] コピーオペレータ.
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
CConstAdapterT(size_t size, LPCVOID P)
コンストラクタ
const TYP & operator[](INDEX index) const
[取得] データ要素取得
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得.
const_iterator begin(void) const
[反復] 先頭const_iterator.
virtual void Unlock(void) const
[排他] アンロック
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
CConstAppendAdapterT(const IConstCollectionT< TYP > *c1, const IConstCollectionT< TYP > *c2)
コンストラクタ
virtual void Unlock(void) const
[排他] アンロック
virtual size_t GetSize(void) const
[取得] 要素数取得
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
CConstOffsetAdapterT(const IConstCollectionT< TYP > *c, INDEX startIndex, size_t size=INVALID_SIZE)
コンストラクタ
CConstReverseAdapterT(const IConstCollectionT< TYP > *c)
コンストラクタ
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
size_t Cull(const IChecker &checker, bool boIsReverse=false)
[削除] 間引き.
virtual size_t GetSize(void) const
[取得] 要素数取得
virtual ~CIndexAdapterT(void)
デストラクタ
bool Remove(INDEX index)
[削除] 要素一つ削除.
INDEX GetRawIndex(INDEX index) const
[取得] オリジナルIndex取得.
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
bool Sort(const IComparatorT< TYP > &comparator, bool boIsReverse=false, bool boIsBubble=false)
[操作] ソート.
CIndexAdapterT(const IConstCollectionT< TYP > *c)
コンストラクタ
void ResetIndex(void)
[操作] リセットインデックス.
bool Sort(bool boIsReverse=false, bool boIsBubble=false)
[操作] ソート.
virtual void Unlock(void) const
[排他] アンロック
void Swap(INDEX index1, INDEX index2)
[設定] 要素の入れ替え
virtual void Swap(INDEX index1, INDEX index2)
[設定] 要素の入れ替え
virtual size_t GetSize(void) const
[取得] 要素数取得
virtual bool Remove(INDEX index)
[削除] 要素一つ削除.
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
COffsetAdapterT(ICollectionT< TYP > *c, INDEX startIndex, size_t size=0)
コンストラクタ
virtual TYP & Ref(INDEX index)
[取得] 要素の参照取得.
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
virtual void Unlock(void) const
[排他] アンロック
virtual bool Set(INDEX index, const TYP &t)
[設定] 要素の設定.
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
void Swap(T &t1, T &t2)
[変換] スワッパー.
bool IsInRange(INDEX value, size_t size)
[確認] 範囲チェック.
void MemCopy(T *_pDst, const void *pSrc, size_t len)
[複製] メモリコピー
virtual void Swap(INDEX index1, INDEX index2)
[設定] 要素の入れ替え.
virtual bool Set(INDEX index, const TYP &t)=0
[設定] 要素の設定.
virtual TYP & Ref(INDEX index)=0
[取得] 要素の参照取得.
情報群管理インターフェースのチェッカーインターフェース.
virtual bool IsValid(const TYP &T) const =0
[確認] チェック
virtual const TYP & At(INDEX index) const =0
[取得] 要素の参照取得.
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.
連続メモリ配置型情報群管理インターフェーステンプレート
virtual bool Lock(DWORD dwTime=INFINITE) const =0
[排他] ロック
virtual void Unlock(void) const =0
[排他] アンロック