48template<
typename TYP,
size_t SIZ=10000>
70 virtual void OnAction(TInfo* P)
89 if ( m_psyncData == NULL ){
return NULL; }
91 INDEX tmp = (m_ssInfo->readIndex) + index;
92 tmp %= (m_ssInfo->bufferSize);
93 return &(m_ssInfo->atData[tmp]);
104 if ( m_psyncData == NULL ){
return NULL; }
105 if ( !
IsInRange(index) ){
return NULL; }
106 INDEX tmp = (m_ssInfo->readIndex) + index;
107 tmp %= (m_ssInfo->bufferSize);
108 return &(m_ssInfo->atData[tmp]);
143 if ( m_ssInfo.
Open(lpszName,&l) )
146 if ( m_psyncData == NULL )
151 return m_psyncData != NULL;
162 if ( m_psyncData != NULL )
177 virtual bool Lock(DWORD dwTime = INFINITE)
const
179 if ( m_psyncData == NULL ){
return false; }
180 return m_psyncData->
Lock();
186 if ( m_psyncData == NULL ){
return; }
196 if ( m_psyncData == NULL ){
return 0; }
197 return m_ssInfo->dataSize;
209 virtual INDEX
Add(
const TYP& t)
212 return (
AddElements(1, &t) == 1) ? r : INVALID_INDEX;
222 if ( m_psyncData == NULL ){
return true; }
223 return TakeElements(m_ssInfo->dataSize) != INVALID_SIZE;
237 if ( m_psyncData == NULL )
242 if ( (m_ssInfo->dataSize) + size > (m_ssInfo->bufferSize) )
246 size_t bs = m_ssInfo->bufferSize;
247 INDEX tmp = m_ssInfo->addIndex;
252 m_ssInfo->atData[tmp++] = *P++;
263 m_ssInfo->atData[tmp++] = TYP();
270 (m_ssInfo->addIndex) += size;
271 (m_ssInfo->addIndex) %= bs;
272 (m_ssInfo->dataSize) += size;
287 if ( m_psyncData == NULL )
292 if ( (m_ssInfo->dataSize) < size )
296 size_t bs = m_ssInfo->bufferSize;
299 INDEX tmp = m_ssInfo->readIndex;
302 *P++ = m_ssInfo->atData[tmp];
309 (m_ssInfo->readIndex) += size;
310 (m_ssInfo->readIndex) %= bs;
311 (m_ssInfo->dataSize) -= size;
322 if ( m_psyncData == NULL )
326 return (m_ssInfo->bufferSize) - (m_ssInfo->dataSize);
#define loop(VAR, CNT)
loop構文.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual size_t GetSize(void) const
[取得] 要素数取得
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
CSharedQueueT(bool boCanClose=true)
コンストラクタ
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 GetFreeSize(void) const
[取得] 格納可能数取得.
void Close(void)
[設定] クローズ このメソッドを行なうとコレクションとして使用できなくなります。
virtual ~CSharedQueueT(void)
デストラクタ
virtual INDEX Add(const TYP &t)
[追加] 要素追加.
friend class CSharedQueueTest
フレンドクラス宣言
virtual void Unlock(void) const
[排他] アンロック
virtual const TYP * m_GetConstPointer(INDEX index) const
[取得] 要素アドレス取得
bool Open(LPCTSTR lpszName)
[設定] オープン
virtual TYP * m_GetPointer(INDEX index)
[取得] 要素アドレス取得
void Close(IListener *piListener=NULL)
[操作] クローズ
bool Open(LPCTSTR lpMemName=NULL, IListener *piListener=NULL)
[操作] オープン
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
virtual void Unlock(void) const
[排他] アンロック
#define EXCLUSIVE(CLS)
簡易排他制御マクロ.
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.