00001 // -*- C++ -*- 00002 00003 //========================================================================== 00004 /** 00005 * @file TSS_Adapter.h 00006 * 00007 * $Id: TSS_Adapter.h 74005 2006-08-14 11:30:00Z johnnyw $ 00008 * 00009 * Originally in Synch.h 00010 * 00011 * @author Douglas C. Schmidt <schmidt@cs.wustl.edu> 00012 */ 00013 //========================================================================== 00014 00015 #ifndef ACE_TSS_ADAPTER_H 00016 #define ACE_TSS_ADAPTER_H 00017 #include /**/ "ace/pre.h" 00018 00019 #include /**/ "ace/ACE_export.h" 00020 00021 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00022 # pragma once 00023 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00024 00025 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00026 00027 /** 00028 * @class ACE_TSS_Adapter 00029 * 00030 * @brief This class encapsulates a TSS object and its associated 00031 * C++ destructor function. It is used by the ACE_TSS... 00032 * methods (in Synch_T.cpp) in order to allow an extern 00033 * "C" cleanup routine to be used. Needed by the "frigging" 00034 * MVS C++ compiler. 00035 * 00036 * Objects of this class are stored in thread specific 00037 * storage. ts_obj_ points to the "real" object and 00038 * func_ is a pointer to the C++ cleanup function for ts_obj_. 00039 */ 00040 class ACE_Export ACE_TSS_Adapter 00041 { 00042 public: 00043 /// Initialize the adapter. 00044 ACE_TSS_Adapter (void *object, ACE_THR_DEST f); 00045 00046 /// Perform the cleanup operation. 00047 void cleanup (void); 00048 00049 //private: 00050 00051 /// The real TS object. 00052 void * const ts_obj_; 00053 00054 /// The real cleanup routine for ts_obj; 00055 ACE_THR_DEST func_; 00056 }; 00057 00058 ACE_END_VERSIONED_NAMESPACE_DECL 00059 00060 #include /**/ "ace/post.h" 00061 #endif /* ACE_TSS_ADAPTER_H */