Changes to attempt to silence bcc64x
[ACE_TAO.git] / ACE / ace / TSS_T.inl
blob73fda8a79ccaa7888dbd11d6f5e33b064febf2be
1 // -*- C++ -*-
2 #include "ace/Thread.h"
3 #include "ace/Log_Category.h"
5 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
7 #if !(defined (ACE_HAS_THREADS) && (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION)))
9 template <class TYPE> ACE_INLINE
10 ACE_TSS<TYPE>::ACE_TSS (TYPE *type)
11   : type_ (type)
15 template <class TYPE> ACE_INLINE int
16 ACE_TSS<TYPE>::ts_init ()
18   return 0;
21 template <class TYPE> ACE_INLINE TYPE *
22 ACE_TSS<TYPE>::ts_object () const
24   return this->type_;
27 template <class TYPE> ACE_INLINE TYPE *
28 ACE_TSS<TYPE>::ts_object (TYPE *type)
30   this->type_ = type;
31   return this->type_;
34 template <class TYPE> ACE_INLINE TYPE *
35 ACE_TSS<TYPE>::ts_get () const
37   return this->type_;
40 #else
42 # if defined (ACE_HAS_THR_C_DEST)
43 template <class TYPE> ACE_INLINE ACE_TSS_Adapter *
44 ACE_TSS<TYPE>::ts_value () const
46   // Get the tss adapter from thread-specific storage
47   void *temp = 0;
48   if (ACE_Thread::getspecific (this->key_, &temp) == -1)
49     {
50       return 0; // This should not happen!
51     }
52   return static_cast <ACE_TSS_Adapter *> (temp);
54 # else
55 template <class TYPE> ACE_INLINE TYPE *
56 ACE_TSS<TYPE>::ts_value () const
58   void *temp = 0;
59   if (ACE_Thread::getspecific (this->key_, &temp) == -1)
60     {
61       return 0; // This should not happen!
62     }
63   return static_cast <TYPE *> (temp);
65 # endif /* ACE_HAS_THR_C_DEST */
67 # if defined (ACE_HAS_THR_C_DEST)
68 template <class TYPE> ACE_INLINE int
69 ACE_TSS<TYPE>::ts_value (ACE_TSS_Adapter *new_tss_adapter) const
71   if (ACE_Thread::setspecific (this->key_,
72                                (void *) new_tss_adapter) != 0)
73     {
74       ACELIB_ERROR ((LM_ERROR,
75                   ACE_TEXT ("%p\n"),
76                   ACE_TEXT ("Error: ACE_Thread::setspecific() failed!")));
77       return -1;
78     }
80   return 0;
82 # else
83 template <class TYPE> ACE_INLINE int
84 ACE_TSS<TYPE>::ts_value (TYPE *new_ts_obj) const
86   if (ACE_Thread::setspecific (this->key_, (void *) new_ts_obj) != 0)
87     {
88       ACELIB_ERROR ((LM_ERROR,
89                   ACE_TEXT ("%p\n"),
90                   ACE_TEXT ("Error: ACE_Thread::setspecific() failed!")));
91       return -1;
92     }
94   return 0;
96 # endif /* ACE_HAS_THR_C_DEST */
98 #endif /* ! (defined (ACE_HAS_THREADS) && (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION))) */
100 ACE_END_VERSIONED_NAMESPACE_DECL