3 #ifndef __CDSUNIT_INTRUSIVE_STACK_TYPES_H
4 #define __CDSUNIT_INTRUSIVE_STACK_TYPES_H
6 #include <cds/intrusive/treiber_stack.h>
7 #include <cds/intrusive/fcstack.h>
10 #include <cds/gc/ptb.h>
11 #include <cds/gc/hrc.h>
14 #include <cds/lock/spinlock.h>
18 #include <boost/intrusive/list.hpp>
24 template < typename T, typename Stack, typename Lock>
29 cds::intrusive::treiber_stack::empty_stat m_stat;
31 typedef std::unique_lock<Lock> unique_lock;
38 unique_lock l( m_Lock );
45 unique_lock l( m_Lock );
46 if ( !m_Impl.empty() ) {
56 unique_lock l( m_Lock );
57 return m_Impl.empty();
60 cds::intrusive::treiber_stack::empty_stat const& statistics() const
71 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
74 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
75 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
76 ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
79 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
80 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
81 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
84 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
85 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
88 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
89 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
90 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
93 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
94 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
97 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
98 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
99 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
102 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
103 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
104 ,cds::opt::back_off<cds::backoff::yield>
105 ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
108 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
109 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
110 ,cds::opt::back_off<cds::backoff::pause>
113 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
114 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
116 cds::backoff::exponential<
123 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
124 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
125 ,cds::opt::back_off<cds::backoff::yield>
128 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
129 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
130 ,cds::opt::back_off<cds::backoff::pause>
131 ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
134 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
135 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
137 cds::backoff::exponential<
144 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
145 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
146 ,cds::opt::back_off<cds::backoff::yield>
149 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
150 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
151 ,cds::opt::back_off<cds::backoff::pause>
154 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
155 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
157 cds::backoff::exponential<
162 ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
167 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
168 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
169 ,cds::opt::enable_elimination<true>
172 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
173 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
174 ,cds::opt::enable_elimination<true>
175 ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
176 > Elimination_HP_2ms;
178 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
179 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
180 ,cds::opt::enable_elimination<true>
181 ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
182 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
183 > Elimination_HP_2ms_stat;
185 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
186 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
187 ,cds::opt::enable_elimination<true>
188 ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
189 > Elimination_HP_5ms;
191 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
192 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
193 ,cds::opt::enable_elimination<true>
194 ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
195 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
196 > Elimination_HP_5ms_stat;
198 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
199 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
200 ,cds::opt::enable_elimination<true>
201 ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
202 > Elimination_HP_10ms;
204 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
205 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
206 ,cds::opt::enable_elimination<true>
207 ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
208 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
209 > Elimination_HP_10ms_stat;
211 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
212 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
213 ,cds::opt::enable_elimination<true>
214 ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
215 > Elimination_HP_dyn;
217 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
218 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
219 ,cds::opt::enable_elimination<true>
220 ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
221 > Elimination_HP_seqcst;
223 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
224 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
225 ,cds::opt::enable_elimination<true>
226 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
227 > Elimination_HP_stat;
229 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
230 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
231 ,cds::opt::enable_elimination<true>
232 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
233 ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
234 > Elimination_HP_dyn_stat;
236 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
237 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
238 ,cds::opt::enable_elimination<true>
241 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
242 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
243 ,cds::opt::enable_elimination<true>
244 ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
245 > Elimination_HRC_dyn;
247 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
248 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
249 ,cds::opt::enable_elimination<true>
250 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
251 > Elimination_HRC_stat;
253 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
254 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
255 ,cds::opt::enable_elimination<true>
256 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
257 ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
258 > Elimination_HRC_dyn_stat;
260 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
261 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
262 ,cds::opt::enable_elimination<true>
263 ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
264 > Elimination_PTB_2ms;
266 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
267 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
268 ,cds::opt::enable_elimination<true>
269 ,cds::opt::elimination_backoff< cds::backoff::delay_of<2> >
270 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
271 > Elimination_PTB_2ms_stat;
273 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
274 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
275 ,cds::opt::enable_elimination<true>
276 ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
277 > Elimination_PTB_5ms;
279 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
280 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
281 ,cds::opt::enable_elimination<true>
282 ,cds::opt::elimination_backoff< cds::backoff::delay_of<5> >
283 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
284 > Elimination_PTB_5ms_stat;
286 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
287 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
288 ,cds::opt::enable_elimination<true>
289 ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
290 > Elimination_PTB_10ms;
292 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
293 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
294 ,cds::opt::enable_elimination<true>
295 ,cds::opt::elimination_backoff< cds::backoff::delay_of<10> >
296 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
297 > Elimination_PTB_10ms_stat;
299 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
300 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
301 ,cds::opt::enable_elimination<true>
304 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
305 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
306 ,cds::opt::enable_elimination<true>
307 ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
308 > Elimination_PTB_dyn;
310 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
311 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
312 ,cds::opt::enable_elimination<true>
313 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
314 > Elimination_PTB_stat;
316 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
317 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
318 ,cds::opt::enable_elimination<true>
319 ,cds::opt::stat<cds::intrusive::treiber_stack::stat<> >
320 ,cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
321 > Elimination_PTB_dyn_stat;
323 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
324 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
325 ,cds::opt::enable_elimination<true>
326 ,cds::opt::back_off<cds::backoff::yield>
327 ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
328 > Elimination_HP_yield;
330 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
331 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
332 ,cds::opt::enable_elimination<true>
333 ,cds::opt::back_off<cds::backoff::pause>
334 > Elimination_HP_pause;
336 typedef cds::intrusive::TreiberStack< cds::gc::HP, T
337 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HP > > >
338 ,cds::opt::enable_elimination<true>
340 cds::backoff::exponential<
345 > Elimination_HP_exp;
347 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
348 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
349 ,cds::opt::enable_elimination<true>
350 ,cds::opt::back_off<cds::backoff::yield>
351 > Elimination_HRC_yield;
353 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
354 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
355 ,cds::opt::enable_elimination<true>
356 ,cds::opt::back_off<cds::backoff::pause>
357 ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
358 > Elimination_HRC_pause;
360 typedef cds::intrusive::TreiberStack< cds::gc::HRC, T
361 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::HRC > > >
362 ,cds::opt::enable_elimination<true>
364 cds::backoff::exponential<
369 > Elimination_HRC_exp;
371 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
372 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
373 ,cds::opt::enable_elimination<true>
374 ,cds::opt::back_off<cds::backoff::yield>
375 > Elimination_PTB_yield;
377 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
378 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
379 ,cds::opt::enable_elimination<true>
380 ,cds::opt::back_off<cds::backoff::pause>
381 > Elimination_PTB_pause;
383 typedef cds::intrusive::TreiberStack< cds::gc::PTB, T
384 ,cds::intrusive::opt::hook< cds::intrusive::single_link::base_hook< cds::opt::gc< cds::gc::PTB > > >
385 ,cds::opt::enable_elimination<true>
387 cds::backoff::exponential<
392 ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
393 > Elimination_PTB_exp;
396 typedef cds::intrusive::FCStack< T > FCStack_slist;
398 struct traits_FCStack_stat:
399 public cds::intrusive::fcstack::make_traits<
400 cds::opt::stat< cds::intrusive::fcstack::stat<> >
403 struct traits_FCStack_elimination:
404 public cds::intrusive::fcstack::make_traits<
405 cds::opt::enable_elimination< true >
408 struct traits_FCStack_elimination_stat:
409 public cds::intrusive::fcstack::make_traits<
410 cds::opt::stat< cds::intrusive::fcstack::stat<> >,
411 cds::opt::enable_elimination< true >
415 struct traits_FCStack_mutex_stat:
416 public cds::intrusive::fcstack::make_traits<
417 cds::opt::stat< cds::intrusive::fcstack::stat<> >
418 ,cds::opt::lock_type< std::mutex >
421 struct traits_FCStack_mutex_elimination:
422 public cds::intrusive::fcstack::make_traits<
423 cds::opt::enable_elimination< true >
424 ,cds::opt::lock_type< std::mutex >
427 struct traits_FCStack_mutex_elimination_stat:
428 public cds::intrusive::fcstack::make_traits<
429 cds::opt::stat< cds::intrusive::fcstack::stat<> >
430 ,cds::opt::enable_elimination< true >
431 ,cds::opt::lock_type< std::mutex >
435 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_stat > FCStack_slist_stat;
436 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination > FCStack_slist_elimination;
437 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_elimination_stat > FCStack_slist_elimination_stat;
438 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_stat > FCStack_slist_mutex_stat;
439 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination > FCStack_slist_mutex_elimination;
440 typedef cds::intrusive::FCStack< T, boost::intrusive::slist< T >, traits_FCStack_mutex_elimination_stat > FCStack_slist_mutex_elimination_stat;
441 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T > > FCStack_list;
442 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_stat > FCStack_list_stat;
443 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination > FCStack_list_elimination;
444 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_elimination_stat > FCStack_list_elimination_stat;
445 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_stat > FCStack_list_mutex_stat;
446 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination > FCStack_list_mutex_elimination;
447 typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination_stat > FCStack_list_mutex_elimination_stat;
451 typedef details::StdStack< T, std::stack< T* >, std::mutex > StdStack_Deque_Mutex;
452 typedef details::StdStack< T, std::stack< T* >, cds::lock::Spin > StdStack_Deque_Spin;
453 typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, std::mutex > StdStack_Vector_Mutex;
454 typedef details::StdStack< T, std::stack< T*, std::vector<T*> >, cds::lock::Spin > StdStack_Vector_Spin;
455 typedef details::StdStack< T, std::stack< T*, std::list<T*> >, std::mutex > StdStack_List_Mutex;
456 typedef details::StdStack< T, std::stack< T*, std::list<T*> >, cds::lock::Spin > StdStack_List_Spin;
459 } // namespace istack
462 static inline ostream& operator <<( ostream& o, cds::intrusive::treiber_stack::stat<> const& s )
464 return o << "\tStatistics:\n"
465 << "\t Push: " << s.m_PushCount.get() << "\n"
466 << "\t Pop: " << s.m_PopCount.get() << "\n"
467 << "\t Push contention: " << s.m_PushRace.get() << "\n"
468 << "\t Pop contention: " << s.m_PopRace.get() << "\n"
469 << "\t m_ActivePushCollision: " << s.m_ActivePushCollision.get() << "\n"
470 << "\t m_PassivePopCollision: " << s.m_PassivePopCollision.get() << "\n"
471 << "\t m_ActivePopCollision: " << s.m_ActivePopCollision.get() << "\n"
472 << "\t m_PassivePushCollision: " << s.m_PassivePushCollision.get() << "\n"
473 << "\t m_EliminationFailed: " << s.m_EliminationFailed.get() << "\n";
476 static inline ostream& operator <<( ostream& o, cds::intrusive::treiber_stack::empty_stat const& s )
481 static inline ostream& operator <<( ostream& o, cds::intrusive::fcstack::empty_stat const& s )
486 static inline ostream& operator <<( ostream& o, cds::intrusive::fcstack::stat<> const& s )
488 return o << "\tStatistics:\n"
489 << "\t Push: " << s.m_nPush.get() << "\n"
490 << "\t Pop: " << s.m_nPop.get() << "\n"
491 << "\t FailedPop: " << s.m_nFailedPop.get() << "\n"
492 << "\t Collided push/pop pair: " << s.m_nCollided.get() << "\n"
493 << "\tFlat combining statistics:\n"
494 << "\t Combining factor: " << s.combining_factor() << "\n"
495 << "\t Operation count: " << s.m_nOperationCount.get() << "\n"
496 << "\t Combine call count: " << s.m_nCombiningCount.get() << "\n"
497 << "\t Compact pub-list: " << s.m_nCompactPublicationList.get() << "\n"
498 << "\t Deactivate pub-record: " << s.m_nDeactivatePubRecord.get() << "\n"
499 << "\t Activate pub-record: " << s.m_nActivatePubRecord.get() << "\n"
500 << "\t Create pub-record: " << s.m_nPubRecordCreated.get() << "\n"
501 << "\t Delete pub-record: " << s.m_nPubRecordDeteted.get() << "\n"
502 << "\t Acquire pub-record: " << s.m_nAcquirePubRecCount.get()<< "\n"
503 << "\t Release pub-record: " << s.m_nReleasePubRecCount.get()<< "\n";
508 #endif // #ifndef __CDSUNIT_INTRUSIVE_STACK_TYPES_H