56 INDEX m_LevelToIndex(
int iLevel)
58 if ( m_iLevelMax < iLevel )
62 iLevel += m_iLevelMax;
84 for ( INDEX i = m_listQueue.
GetSize() - 1; i >= 0; i-- )
86 size_t size = m_listQueue[i].
GetSize();
89 return &(m_listQueue[i][index]);
114 for ( INDEX i = m_listQueue.
GetSize() - 1; i >= 0; i-- )
116 size_t size = m_listQueue[i].
GetSize();
119 return &(m_listQueue[i][index]);
145 m_iLevelMax = iLevel;
147 loop ( i, iLevel * 2 + 1 )
161 virtual bool Lock(DWORD dwTime = INFINITE)
const
163 return m_listQueue.
Lock();
180 for ( INDEX i = m_listQueue.
GetSize() - 1; i >= 0; i-- )
182 size += m_listQueue[i].
GetSize();
196 virtual INDEX
Add(
const TYP& t)
233 INDEX index = m_LevelToIndex(iLevel);
234 if ( index != INVALID_INDEX )
236 return m_listQueue[index].
GetSize();
280 INDEX
Add(
int iLevel,
const TYP& t)
282 INDEX index = m_LevelToIndex(iLevel);
283 if ( index == INVALID_INDEX )
285 return INVALID_INDEX;
287 return m_listQueue[index].
Add(t);
298 INDEX
AddEx(
int iLevel,
const TYP& t)
301 return Add(iLevel, t);
316 INDEX index = m_LevelToIndex(iLevel);
317 if ( index == INVALID_SIZE )
321 return m_listQueue[index].
Append(c);
333 for ( INDEX i = m_listQueue.
GetSize() - 1; i >= 0; i-- )
335 if ( ! m_listQueue[i].
IsEmpty() )
337 TYP t = m_listQueue[i].
Get(0);
342 ASSERT0(
false,
"CPriorityQueueT::Take()",
"キューが空の時取得操作されました。");
356 INDEX index = m_LevelToIndex(iLevel);
357 if ( index != INVALID_INDEX )
359 if ( ! m_listQueue[index].
IsEmpty() )
361 TYP t = m_listQueue[index].
Get(0);
362 m_listQueue[index].
Remove(0);
366 ASSERT0(
false,
"CPriorityQueueT::Take()",
"キューが空の時取得操作されました。");
#define loop(VAR, CNT)
loop構文.
virtual size_t GetSize(void) const
[取得] 要素数取得
virtual bool Remove(INDEX index)
[削除] 要素一つ削除
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual bool RemoveAll(void)
[削除] 全要素削除
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加
virtual void Unlock(void) const
[排他] アンロック
virtual size_t GetSize(void) const
[取得] 要素数取得
INDEX AddEx(int iLevel, const TYP &t)
[追加] レベル別要素追加.
INDEX Add(int iLevel, const TYP &t)
[追加] レベル別要素追加.
TYP Take(int iLevel)
[取得] レベル別先頭要素取り出し.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual size_t TakeElements(size_t size, TYP *P=NULL)
[取得] 複数要素取り出し
virtual bool RemoveAll(void)
[削除] データ全削除.
virtual size_t AddElements(size_t size, const TYP *P=NULL)
[追加] 複数要素追加.
size_t Append(int iLevel, const IConstCollectionT< TYP > &c)
[追加] レベル別追加.
virtual INDEX Add(const TYP &t)
[追加] 要素追加.
virtual TYP Take(void)
[取得] 先頭要素取り出し.
virtual void Unlock(void) const
[排他] アンロック
virtual const TYP * m_GetConstPointer(INDEX index) const
[取得] 要素アドレス取得
CPriorityQueueT(int iLevel=3)
コンストラクタ
size_t GetSize(int iLevel) const
[取得] レベル別要素数取得
virtual TYP * m_GetPointer(INDEX index)
[取得] 要素アドレス取得
size_t AddElements(int iLevel, size_t size, const TYP *P=NULL)
[追加] レベル別複数要素追加.
void OnCatch(void) const
[表示] 内容表示
virtual TYP Get(INDEX index) const
[取得] 要素の取得.
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
virtual size_t Append(const IConstCollectionT< TYP > &c)
[追加] 追加.
bool IsEmpty(void) const
[確認] 要素の有無確認.