30template<
typename COL,
typename TYP>
31class CConstIteratorBaseT
36 CConstIteratorBaseT(
const COL* V = NULL, INDEX i = 0): m_V(V), m_ind(i) {}
37 INDEX GetIndex(
void)
const {
return m_ind; }
38 TYP
operator*(
void)
const {
return m_V->Get(m_ind); }
39 const TYP* operator->(
void)
const {
return &(m_V->At(m_ind)); }
40 bool operator==(
const CConstIteratorBaseT& I)
const
42 return m_V == I.m_V && m_ind == I.m_ind;
44 bool operator!=(
const CConstIteratorBaseT& I)
const
46 return m_V != I.m_V || m_ind != I.m_ind;
48 CConstIteratorBaseT& operator++(
void)
const
53 CConstIteratorBaseT operator++(
int)
const
55 CConstIteratorBaseT I = *
this;
59 const TYP& operator[](INDEX i)
const{
return m_V->At(m_ind+i); }
60 CConstIteratorBaseT& operator+=(INT_PTR i) {m_ind+=i;
return *
this;}
61 CConstIteratorBaseT& operator-=(INT_PTR i) {m_ind-=i;
return *
this;}
65#define _ITERATORCORE(NAME, COLL) \
67 mutable INDEX m_ind; \
69 NAME(COLL* V = NULL, INDEX i = 0) : m_V(V), m_ind(i) {} \
70 INDEX GetIndex(void) const { return m_ind; } \
71 bool operator==(const NAME& I) const {return m_ind==I.m_ind;} \
72 bool operator!=(const NAME& I) const {return m_ind!=I.m_ind;} \
73 bool operator<=(const NAME& I) const {return m_ind<=I.m_ind;} \
74 bool operator<(const NAME& I) const {return m_ind<I.m_ind;} \
75 bool operator>=(const NAME& I) const {return m_ind>=I.m_ind;} \
76 bool operator>(const NAME& I) const {return m_ind>I.m_ind;} \
77 NAME& operator+=(INT_PTR i) {m_ind+=i; return *this;} \
78 NAME& operator-=(INT_PTR i) {m_ind-=i; return *this;} \
79 NAME operator+(INT_PTR i) const {NAME I=*this; return I+=i;} \
80 NAME operator-(INT_PTR i) const {NAME I=*this; return I-=i;} \
81 INT_PTR operator-(const NAME& I) const {return m_ind-I.m_ind; } \
82 NAME& operator++(void) {m_ind++; return *this;} \
83 NAME& operator--(void) {m_ind--; return *this;} \
84 NAME operator++(int) {NAME I=*this; m_ind++; return I;} \
85 NAME operator--(int) {NAME I=*this; m_ind--; return I;}
89template<
typename COL,
typename TYP>
92 _ITERATORCORE(CIteratorBaseT, COL)
94 const TYP&
operator*(
void)
const {
return m_V->At(m_ind); }
95 const TYP* operator->(
void)
const {
return &(m_V->At(m_ind)); }
96 const TYP& operator[](INDEX i)
const{
return m_V->At(m_ind+i); }
97 TYP&
operator*(
void) {
return m_V->Ref(m_ind); }
98 TYP* operator->(
void) {
return &(m_V->Ref(m_ind));}
99 TYP& operator[](INDEX i) {
return m_V->Ref(m_ind+i); }
211template<
typename TYP>
236 typedef CConstIteratorBaseT<IConstCollectionT<TYP>, TYP>
const_iterator;
238 typedef TYP value_type;
268 operator size_t(
void)
const
288 virtual const TYP&
At(INDEX index)
const = 0;
298 virtual TYP
Get(INDEX index)
const
322 virtual size_t GetElements(
size_t size, TYP* _P, INDEX offset = 0)
const
329 if ( size + offset >
GetSize() )
333 for ( INDEX i = 0; i < size; i++ )
335 *_P++ =
At(i + offset);
400 INDEX
Find(
const IChecker& checker, INDEX startIndex = 0,
bool boIsReverse =
false)
const
406 for (
size_t i = startIndex; i < size; i++ )
408 if ( checker.
IsValid(
At(i)) ^ boIsReverse )
414 return INVALID_INDEX;
433 for (
size_t i = startIndex; i < size; i++ )
436 if ( i + tsz > size || tsz == 0 )
455 return INVALID_INDEX;
488 for (
size_t i = startIndex; i < size; i++ )
496 return INVALID_INDEX;
508 INDEX
Find(
const TYP& t, INDEX startIndex = 0)
const
525 INDEX r = INVALID_INDEX;
562 INDEX r = INVALID_INDEX;
605 size_t size = (mySize < youSize) ? mySize : youSize;
614 return mySize - youSize;
811template<
typename TYP>
837 void m_qsort(
size_t left,
size_t right)
839 if ( left >= right ){
return; }
841 for (
size_t i = left + 1; i <= right; i++ )
843 const TYP& c1 = m_piCollect->
At(i);
844 const TYP& c2 = m_piCollect->
At(left);
845 if ( (m_piComparator->
CompareTo(c1, c2) < 0) ^ m_boIsReverse )
847 m_piCollect->
Swap(i, ++j);
850 m_piCollect->
Swap(left, j);
854 m_qsort(left, j - 1);
856 m_qsort(j + 1, right);
873 m_piCollect = &_collect;
874 m_piComparator = ∁
875 m_boIsReverse = boIsReverse;
892 size_t size = _collect.
GetSize();
895 for (
size_t j = size - 1; j > i; j-- )
897 const TYP& c1 = _collect.
At(j - 1);
898 const TYP& c2 = _collect.
At(j);
899 if ( (comp.
CompareTo(c1, c2) > 0) ^ boIsReverse )
901 _collect.
Swap(j - 1, j);
914 typedef CConstIteratorBaseT<ICollectionT<TYP>, TYP>
const_iterator;
916 typedef CIteratorBaseT<ICollectionT<TYP>, TYP>
iterator;
991 virtual TYP&
Ref(INDEX index) = 0;
1002 virtual bool Set(INDEX index,
const TYP& t) = 0;
1014 return Set(index, t);
1025 virtual INDEX
Add(
const TYP& t) = 0;
1049 virtual bool Insert(INDEX index,
const TYP& t)
1052 if ( index >= nowSize + 1 )
1056 INDEX r =
Add(TYP());
1057 if ( r == INVALID_INDEX )
1063 Set(index + i + 1,
At(index + i));
1117 size = INVALID_SIZE;
1155 virtual void Swap(INDEX index1, INDEX index2)
1157 if ( index1 != index2 )
1160 TYP t =
Get(index1);
1161 Set(index1,
At(index2));
1181 if (
Add(*P++) == INVALID_INDEX )
1183 return INVALID_SIZE;
1191 if (
Add(TYP()) == INVALID_INDEX )
1193 return INVALID_SIZE;
1214 if (
Add(c.
At(i)) == INVALID_INDEX )
1216 return INVALID_SIZE;
1249 return INVALID_SIZE;
1298 if ( ! checker.
IsValid(
At(i)) ^ boIsReverse )
1302 return INVALID_SIZE;
1329 if ( nowSize > size )
1332 for (
size_t i = nowSize - 1; i >= size; i-- )
1340 else if ( nowSize < size )
1343 size_t l = (size - nowSize);
1394 sort.
BubbleSort(*
this, comparator, boIsReverse);
1398 sort.
QuickSort(*
this, comparator, boIsReverse);
1420 bool Sort(
bool boIsReverse =
false,
bool boIsBubble =
false)
1447 size_t r = rand() % size;
1533template<
typename TYP>
1570 virtual TYP
Get(INDEX index)
const
1588 virtual const TYP&
At(INDEX index)
const
1626 virtual bool Set(INDEX index,
const TYP& t)
1687template<
typename TYP>
1720 template<
typename TYP>
1727 dwRc += c.
At(i) << (i & 0x0F);
#define loop_dn(VAR, CNT)
loop構文.
#define loop(VAR, CNT)
loop構文.
void OnCatch(void) const
[表示] 内容表示
virtual TYP Get(INDEX index) const
[取得] 要素の取得.
virtual const TYP * m_GetConstPointer(INDEX index) const =0
[取得] 要素アドレス取得
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
const TYP & operator[](INDEX index) const
[取得] 要素の参照取得.
virtual TYP & Ref(INDEX index)
[取得] 要素の参照取得.
ICollectionMidT(void)
コンストラクタ
TYP & operator[](INDEX index)
[取得] 要素の参照取得.
virtual TYP * m_GetPointer(INDEX index)=0
[取得] 要素アドレス取得
virtual bool Set(INDEX index, const TYP &t)
[設定] 要素の設定.
void QuickSort(ICollectionT< TYP > &_collect, const IComparatorT< TYP > &comp, bool boIsReverse=false)
[操作] クイックソート.
void BubbleSort(ICollectionT< TYP > &_collect, const IComparatorT< TYP > &comp, bool boIsReverse=false)
[操作] バブルソート.
#define EXCLUSIVE2(CLS1, CLS2)
簡易排他ツイン制御マクロ.
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
CValueAcceleration operator*(const CValueSpeed &s, const CValueFrequency &f)
[計算] 掛算 (加速度 = 速度 × 周波数) .
bool IsInRange(INDEX value, size_t size)
[確認] 範囲チェック.
DWORD CalcHash(const IConstCollectionT< TYP > &c)
COLLECT [HASH] ハッシュ値計算.
virtual void Swap(INDEX index1, INDEX index2)
[設定] 要素の入れ替え.
ICollectionT(void)
コンストラクタ
const_iterator end(void) const
[反復] 最後const_iterator.
virtual size_t Cull(const IChecker &checker, bool boIsReverse=false)
[削除] 間引き.
virtual void Deserialize(const IDeserializer &ds)
[処理] デシリアライズ
virtual bool Insert(INDEX index, const TYP &t)
[追加] 要素一つ挿入.
virtual size_t RemoveElements(INDEX index, size_t size=0)
[削除] 要素削除.
bool SetEx(INDEX index, const TYP &t)
[設定] 要素の設定.
iterator begin(void)
[反復] 先頭iterator.
virtual bool Set(INDEX index, const TYP &t)=0
[設定] 要素の設定.
bool Shuffle(int iDepth=1)
[操作] シャッフル.
virtual bool InsertEx(INDEX index, const TYP &t)
[追加] 要素一つ挿入.
virtual bool Remove(INDEX index)=0
[削除] 要素一つ削除.
virtual TYP & Ref(INDEX index)=0
[取得] 要素の参照取得.
virtual INDEX Add(const TYP &t)=0
[追加] 要素一つ追加.
virtual bool SetSize(size_t size)
[操作] サイズ指定
size_t TrimBottom(const TYP &t)
[処理] 末尾トリム.
bool Sort(const IComparatorT< TYP > &comparator, bool boIsReverse=false, bool boIsBubble=false)
[操作] ソート.
INDEX AddEx(const TYP &t)
[追加] 要素一つ追加.
bool Sort(bool boIsReverse=false, bool boIsBubble=false)
[操作] ソート.
virtual bool RemoveAll(void)
[削除] 全要素削除 .
virtual size_t AddElements(size_t size, const TYP *P=NULL)
[追加] 複数要素追加.
virtual size_t Copy(const IConstCollectionT< TYP > &c)
[設定] コピー.
virtual ~ICollectionT(void)
デストラクタ
bool RemoveEx(INDEX index)
[削除] 要素一つ削除.
void push_back(const TYP &t)
[反復] 最後に追加
const_iterator begin(void) const
[反復] 先頭const_iterator.
virtual size_t Append(const IConstCollectionT< TYP > &c)
[追加] 追加.
virtual size_t CopyElements(size_t size, const TYP *P=NULL)
[設定] コピー.
size_t TrimBottom(const TYP &t, const IComparatorT< TYP > &comparator)
[処理] 末尾トリム.
virtual size_t SetElements(size_t size, const TYP *P=NULL)
[設定] 複数要素設定.
iterator end(void)
[反復] 最後iterator.
ICollectionT & operator=(const ICollectionT &other)
[代入] コピーオペレータ.
virtual INT_PTR CompareTo(const TYP &t1, const TYP &t2) const =0
[確認] 比較
static IComparatorT & GetDefault(void)
[作成] 汎用コンパレータ取得.
virtual bool IsEqualTo(const TYP &t1, const TYP &t2) const
[確認] 比較
情報群管理インターフェースのチェッカーインターフェース.
virtual bool IsValid(const TYP &T) const =0
[確認] チェック
virtual ~IChecker(void)
デストラクタ
INDEX FindMin(const IComparatorT< TYP > &comparator, const TYP &def) const
[検索] 要素の最小検索.
virtual size_t GetElements(size_t size, TYP *_P, INDEX offset=0) const
[取得] 複数要素取り出し.
const_iterator end(void) const
[反復] 最後const_iterator.
INDEX Find(const TYP &t, INDEX startIndex=0) const
[検索] 指定要素の検索.
virtual void Deserialize(const IDeserializer &ds)
[処理] デシリアライズ
virtual TYP Get(INDEX index) const
[取得] 要素の取得.
bool IsEmpty(void) const
[確認] 要素の有無確認.
TYP GetEx(INDEX index) const
[取得] 要素の取得.
INDEX Find(const IConstCollectionT< TYP > &t, INDEX startIndex=0) const
[検索] 指定配列の検索.
virtual const TYP & At(INDEX index) const =0
[取得] 要素の参照取得.
INDEX Find(const IConstCollectionT< TYP > &t, const IComparatorT< TYP > &comparator, INDEX startIndex=0) const
[検索] 指定配列の検索.
INDEX Find(const TYP &t, const IComparatorT< TYP > &comparator, INDEX startIndex=0) const
[検索] 指定要素の検索.
INDEX Find(const IChecker &checker, INDEX startIndex=0, bool boIsReverse=false) const
[検索] 条件一致要素の検索.
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.
virtual INT_PTR Compare(const IConstCollectionT< TYP > &c) const
[確認] 比較.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.
INDEX FindMax(const IComparatorT< TYP > &comparator, const TYP &def) const
[検索] 要素の最大検索.
virtual void Serialize(ISerializer &_sr) const
[処理] シリアライズ
const_iterator begin(void) const
[反復] 先頭const_iterator.
IConstCollectionT(void)
コンストラクタ
INDEX FindMax(const TYP &def) const
[検索] 要素の最大検索.
INDEX FindMin(const TYP &def) const
[検索] 要素の最小検索.
virtual bool IsEqual(const IConstCollectionT< TYP > &c) const
[確認] 比較.
連続メモリ配置型情報群管理インターフェーステンプレート
virtual ~ISequenceCollectionT(void)
デストラクタ
virtual const TYP * ReferBuffer(void) const =0
[取得] データアドレス取得.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.