ACE_TSS_Keys Class Reference

Collection of in-use flags for a thread's TSS keys. For internal use only by ACE_TSS_Cleanup; it is public because some compilers can't use nested classes for template instantiation parameters. More...

#include <OS_NS_Thread.h>

List of all members.

Public Member Functions

 ACE_TSS_Keys (void)
 Default constructor, to initialize all bits to zero (unused).

int test_and_set (const ACE_thread_key_t key)
int test_and_clear (const ACE_thread_key_t key)
int is_set (const ACE_thread_key_t key) const

Private Types

enum  { ACE_WORDS = (ACE_DEFAULT_THREAD_KEYS - 1) / ACE_BITS_PER_WORD + 1 }

Static Private Member Functions

void find (const u_int key, u_int &word, u_int &bit)
 For a given key, find the word and bit number that represent it.


Private Attributes

u_long key_bit_words_ [ACE_WORDS]


Detailed Description

Collection of in-use flags for a thread's TSS keys. For internal use only by ACE_TSS_Cleanup; it is public because some compilers can't use nested classes for template instantiation parameters.

Wrapper around array of whether each key is in use. A simple typedef doesn't work with Sun C++ 4.2.

Definition at line 978 of file OS_NS_Thread.h.


Member Enumeration Documentation

anonymous enum [private]
 

Enumeration values:
ACE_WORDS 

Definition at line 1000 of file OS_NS_Thread.h.

01001     {
01002 #   if ACE_SIZEOF_LONG == 8
01003       ACE_BITS_PER_WORD = 64,
01004 #   elif ACE_SIZEOF_LONG == 4
01005       ACE_BITS_PER_WORD = 32,
01006 #   else
01007 #     error ACE_TSS_Keys only supports 32 or 64 bit longs.
01008 #   endif /* ACE_SIZEOF_LONG == 8 */
01009       ACE_WORDS = (ACE_DEFAULT_THREAD_KEYS - 1) / ACE_BITS_PER_WORD + 1
01010     };


Constructor & Destructor Documentation

ACE_TSS_Keys::ACE_TSS_Keys void   ) 
 

Default constructor, to initialize all bits to zero (unused).

Definition at line 519 of file OS_NS_Thread.cpp.

References ACE_WORDS, and key_bit_words_.

00520 {
00521   for (u_int i = 0; i < ACE_WORDS; ++i)
00522     {
00523       key_bit_words_[i] = 0;
00524     }
00525 }


Member Function Documentation

ACE_SPECIAL_INLINE void ACE_TSS_Keys::find const u_int  key,
u_int &  word,
u_int &  bit
[static, private]
 

For a given key, find the word and bit number that represent it.

Definition at line 529 of file OS_NS_Thread.cpp.

Referenced by is_set(), test_and_clear(), and test_and_set().

00530 {
00531   word = key / ACE_BITS_PER_WORD;
00532   bit = key % ACE_BITS_PER_WORD;
00533 }

int ACE_TSS_Keys::is_set const ACE_thread_key_t  key  )  const
 

Return whether the specific key is marked as in use. Returns 1 if the key is been marked, 0 if not.

Definition at line 572 of file OS_NS_Thread.cpp.

References ACE_BIT_ENABLED, ACE_KEY_INDEX, ACE_thread_key_t, ACE_WORDS, find(), and key_bit_words_.

00573 {
00574   ACE_KEY_INDEX (key_index, key);
00575   u_int word, bit;
00576   find (key_index, word, bit);
00577 
00578   return word < ACE_WORDS ? ACE_BIT_ENABLED (key_bit_words_[word], 1 << bit) : 0;
00579 }

int ACE_TSS_Keys::test_and_clear const ACE_thread_key_t  key  ) 
 

Mark the specified key as not being in use, if it was not already so cleared. Returns 1 if the key had already been cleared, 0 if not.

Definition at line 554 of file OS_NS_Thread.cpp.

References ACE_BIT_ENABLED, ACE_CLR_BITS, ACE_KEY_INDEX, ACE_thread_key_t, ACE_WORDS, find(), and key_bit_words_.

Referenced by ACE_TSS_Cleanup::thread_release().

00555 {
00556   ACE_KEY_INDEX (key_index, key);
00557   u_int word, bit;
00558   find (key_index, word, bit);
00559 
00560   if (word < ACE_WORDS && ACE_BIT_ENABLED (key_bit_words_[word], 1 << bit))
00561     {
00562       ACE_CLR_BITS (key_bit_words_[word], 1 << bit);
00563       return 0;
00564     }
00565   else
00566     {
00567       return 1;
00568     }
00569 }

int ACE_TSS_Keys::test_and_set const ACE_thread_key_t  key  ) 
 

Mark the specified key as being in use, if it was not already so marked. Returns 1 if the had already been marked, 0 if not.

Definition at line 536 of file OS_NS_Thread.cpp.

References ACE_BIT_ENABLED, ACE_KEY_INDEX, ACE_SET_BITS, ACE_thread_key_t, find(), and key_bit_words_.

Referenced by ACE_TSS_Cleanup::thread_use_key().

00537 {
00538   ACE_KEY_INDEX (key_index, key);
00539   u_int word, bit;
00540   find (key_index, word, bit);
00541 
00542   if (ACE_BIT_ENABLED (key_bit_words_[word], 1 << bit))
00543     {
00544       return 1;
00545     }
00546   else
00547     {
00548       ACE_SET_BITS (key_bit_words_[word], 1 << bit);
00549       return 0;
00550     }
00551 }


Member Data Documentation

u_long ACE_TSS_Keys::key_bit_words_[ACE_WORDS] [private]
 

Bit flag collection. A bit value of 1 indicates that the key is in use by this thread.

Definition at line 1014 of file OS_NS_Thread.h.

Referenced by ACE_TSS_Keys(), is_set(), test_and_clear(), and test_and_set().


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 11:32:01 2006 for ACE by doxygen 1.3.6