19 #ifndef INCLUDE_RCF_THREADLOCALDATA_HPP
20 #define INCLUDE_RCF_THREADLOCALDATA_HPP
22 #include <boost/shared_ptr.hpp>
24 #include <RCF/ByteBuffer.hpp>
25 #include <RCF/Export.hpp>
26 #include <RCF/RecursionLimiter.hpp>
27 #include <RCF/ThreadLibrary.hpp>
43 class UdpSessionState;
45 class AmiNotification;
51 typedef boost::shared_ptr<ClientStub> ClientStubPtr;
52 typedef boost::shared_ptr<RcfSession> RcfSessionPtr;
53 typedef boost::shared_ptr<ThreadInfo> ThreadInfoPtr;
54 typedef boost::shared_ptr<UdpSessionState> UdpSessionStatePtr;
55 typedef boost::shared_ptr<OverlappedAmi> OverlappedAmiPtr;
56 typedef boost::shared_ptr<LogBuffers> LogBuffersPtr;
57 typedef boost::function1<void, RcfSession&> RcfSessionCallback;
58 typedef boost::shared_ptr<Filter> FilterPtr;
64 class ThreadLocalData;
65 ThreadLocalData & getThreadLocalData();
67 RCF_EXPORT
void clearThreadLocalDataForThisThread();
69 RCF_EXPORT ClientStub * getTlsClientStubPtr();
71 RCF_EXPORT
void pushTlsClientStub(
72 ClientStub * pClientStub);
74 RCF_EXPORT
void popTlsClientStub();
76 RCF_EXPORT RcfSession * getCurrentRcfSessionPtr();
77 RCF_EXPORT RcfSession * getTlsRcfSessionPtr();
79 RCF_EXPORT
void setTlsRcfSessionPtr(
80 RcfSession * pRcfSession = NULL);
82 RCF_EXPORT ThreadInfoPtr getTlsThreadInfoPtr();
84 RCF_EXPORT
void setTlsThreadInfoPtr(
85 ThreadInfoPtr threadInfoPtr);
87 RCF_EXPORT UdpSessionStatePtr getTlsUdpSessionStatePtr();
89 RCF_EXPORT
void setTlsUdpSessionStatePtr(
90 UdpSessionStatePtr udpSessionStatePtr);
92 RCF_EXPORT RcfSession & getCurrentRcfSession();
93 RCF_EXPORT RcfSession & getTlsRcfSession();
95 RecursionState<int, int> & getTlsRcfSessionRecursionState();
97 RCF_EXPORT AmiNotification & getTlsAmiNotification();
99 RCF_EXPORT LogBuffers & getTlsLogBuffers();
101 RCF_EXPORT std::vector< std::vector<RCF::ByteBuffer> * > &
102 getTlsCache(std::vector<RCF::ByteBuffer> *);
104 RCF_EXPORT std::vector< std::vector<int> * > &
105 getTlsCache(std::vector<int> *);
107 RCF_EXPORT std::vector< std::vector<WSABUF> * > &
108 getTlsCache(std::vector<WSABUF> *);
110 RCF_EXPORT std::vector< std::vector<FilterPtr> * > &
111 getTlsCache(std::vector<FilterPtr> *);
113 RCF_EXPORT std::vector< std::vector<RcfSessionCallback> * > &
114 getTlsCache(std::vector<RcfSessionCallback> *);
116 RCF_EXPORT std::vector< std::vector<FileUpload> * > &
117 getTlsCache(std::vector<FileUpload> *);
120 class ThreadLocalCached
124 ThreadLocalCached() : mpt(NULL)
126 std::vector<T *> & tlsCache = getTlsCache( (T *) NULL);
127 if (tlsCache.empty())
133 mpt = tlsCache.back();
136 RCF_ASSERT(mpt->empty());
142 std::vector<T *> & tlsCache = getTlsCache( (T *) NULL);
143 tlsCache.push_back(mpt);
157 void RCF_EXPORT addThreadExitHandler(boost::function<
void()> func);
161 #endif // ! INCLUDE_RCF_THREADLOCALDATA_HPP