19 #ifndef INCLUDE_RCF_THREADLOCALDATA_HPP 20 #define INCLUDE_RCF_THREADLOCALDATA_HPP 28 #include <RCF/Config.hpp> 29 #include <RCF/Export.hpp> 45 class UdpNetworkSession;
47 class AmiNotification;
54 typedef std::shared_ptr<ClientStub> ClientStubPtr;
55 typedef std::shared_ptr<RcfSession> RcfSessionPtr;
56 typedef std::shared_ptr<ThreadInfo> ThreadInfoPtr;
57 typedef std::shared_ptr<UdpNetworkSession> UdpNetworkSessionPtr;
58 typedef std::shared_ptr<OverlappedAmi> OverlappedAmiPtr;
59 typedef std::shared_ptr<LogBuffers> LogBuffersPtr;
60 typedef std::function<void(RcfSession&)> RcfSessionCallback;
61 typedef std::shared_ptr<Filter> FilterPtr;
63 template<
typename T1,
typename T2>
70 class ThreadLocalData;
71 ThreadLocalData & getThreadLocalData();
73 RCF_EXPORT ClientStub * getTlsClientStubPtr();
75 RCF_EXPORT
void pushTlsClientStub(
76 ClientStub * pClientStub);
78 RCF_EXPORT
void popTlsClientStub();
80 RCF_EXPORT RcfSession * getCurrentRcfSessionPtr();
81 RCF_EXPORT RcfSession * getTlsRcfSessionPtr();
83 RCF_EXPORT
void setTlsRcfSessionPtr(
84 RcfSession * pRcfSession = NULL);
86 RCF_EXPORT std::vector<RcfSession*>& getRcfSessionSentryStack();
88 RCF_EXPORT ThreadInfoPtr getTlsThreadInfoPtr();
90 RCF_EXPORT
void setTlsThreadInfoPtr(
91 ThreadInfoPtr threadInfoPtr);
93 RCF_EXPORT UdpNetworkSessionPtr getTlsUdpNetworkSessionPtr();
95 RCF_EXPORT
void setTlsUdpNetworkSessionPtr(
96 UdpNetworkSessionPtr udpNetworkSessionPtr);
98 RCF_EXPORT RcfSession & getTlsRcfSession();
100 RecursionState<int, int> & getTlsRcfSessionRecursionState();
102 RCF_EXPORT AmiNotification & getTlsAmiNotification();
104 RCF_EXPORT LogBuffers & getTlsLogBuffers();
106 RCF_EXPORT std::vector< std::vector<RCF::ByteBuffer> * > &
107 getTlsCache(std::vector<RCF::ByteBuffer> *);
109 RCF_EXPORT std::vector< std::vector<int> * > &
110 getTlsCache(std::vector<int> *);
112 RCF_EXPORT std::vector< std::vector<WSABUF> * > &
113 getTlsCache(std::vector<WSABUF> *);
115 RCF_EXPORT std::vector< std::vector<FilterPtr> * > &
116 getTlsCache(std::vector<FilterPtr> *);
118 RCF_EXPORT std::vector< std::vector<RcfSessionCallback> * > &
119 getTlsCache(std::vector<RcfSessionCallback> *);
121 RCF_EXPORT std::vector< std::vector<FileUpload> * > &
122 getTlsCache(std::vector<FileUpload> *);
124 std::wstring_convert<std::codecvt_utf8<wchar_t> > &
125 getTlsUtf8Converter();
128 class ThreadLocalCached
132 ThreadLocalCached() : mpt(NULL)
134 std::vector<T *> & tlsCache = getTlsCache( (T *) NULL);
135 if (tlsCache.empty())
141 mpt = tlsCache.back();
144 RCF_ASSERT(mpt->empty());
150 std::vector<T *> & tlsCache = getTlsCache( (T *) NULL);
151 tlsCache.push_back(mpt);
168 #endif // ! INCLUDE_RCF_THREADLOCALDATA_HPP Definition: AmiIoHandler.hpp:24