18 #ifndef INCLUDE_RCF_THREADLOCALDATA_HPP 19 #define INCLUDE_RCF_THREADLOCALDATA_HPP 27 #include <RCF/Config.hpp> 28 #include <RCF/Export.hpp> 44 class UdpNetworkSession;
46 class AmiNotification;
53 typedef std::shared_ptr<ClientStub> ClientStubPtr;
54 typedef std::shared_ptr<RcfSession> RcfSessionPtr;
55 typedef std::shared_ptr<ThreadInfo> ThreadInfoPtr;
56 typedef std::shared_ptr<UdpNetworkSession> UdpNetworkSessionPtr;
57 typedef std::shared_ptr<OverlappedAmi> OverlappedAmiPtr;
58 typedef std::shared_ptr<LogBuffers> LogBuffersPtr;
59 typedef std::function<void(RcfSession&)> RcfSessionCallback;
60 typedef std::shared_ptr<Filter> FilterPtr;
62 template<
typename T1,
typename T2>
69 class ThreadLocalData;
70 ThreadLocalData & getThreadLocalData();
72 RCF_EXPORT ClientStub * getTlsClientStubPtr();
74 RCF_EXPORT
void pushTlsClientStub(
75 ClientStub * pClientStub);
77 RCF_EXPORT
void popTlsClientStub();
79 RCF_EXPORT RcfSession * getCurrentRcfSessionPtr();
80 RCF_EXPORT RcfSession * getTlsRcfSessionPtr();
82 RCF_EXPORT
void setTlsRcfSessionPtr(
83 RcfSession * pRcfSession = NULL);
85 RCF_EXPORT std::vector<RcfSession*>& getRcfSessionSentryStack();
87 RCF_EXPORT ThreadInfoPtr getTlsThreadInfoPtr();
89 RCF_EXPORT
void setTlsThreadInfoPtr(
90 ThreadInfoPtr threadInfoPtr);
92 RCF_EXPORT UdpNetworkSessionPtr getTlsUdpNetworkSessionPtr();
94 RCF_EXPORT
void setTlsUdpNetworkSessionPtr(
95 UdpNetworkSessionPtr udpNetworkSessionPtr);
97 RCF_EXPORT RcfSession & getTlsRcfSession();
99 RecursionState<int, int> & getTlsRcfSessionRecursionState();
101 RCF_EXPORT AmiNotification & getTlsAmiNotification();
103 RCF_EXPORT LogBuffers & getTlsLogBuffers();
105 RCF_EXPORT std::vector< std::vector<RCF::ByteBuffer> * > &
106 getTlsCache(std::vector<RCF::ByteBuffer> *);
108 RCF_EXPORT std::vector< std::vector<int> * > &
109 getTlsCache(std::vector<int> *);
111 RCF_EXPORT std::vector< std::vector<WSABUF> * > &
112 getTlsCache(std::vector<WSABUF> *);
114 RCF_EXPORT std::vector< std::vector<FilterPtr> * > &
115 getTlsCache(std::vector<FilterPtr> *);
117 RCF_EXPORT std::vector< std::vector<RcfSessionCallback> * > &
118 getTlsCache(std::vector<RcfSessionCallback> *);
120 RCF_EXPORT std::vector< std::vector<FileUpload> * > &
121 getTlsCache(std::vector<FileUpload> *);
123 #ifdef RCF_USE_STD_UTF8_CONVERTER 124 std::wstring_convert<std::codecvt_utf8<wchar_t> > &
125 getTlsUtf8Converter();
129 class ThreadLocalCached
133 ThreadLocalCached() : mpt(NULL)
135 std::vector<T *> & tlsCache = getTlsCache( (T *) NULL);
136 if (tlsCache.empty())
142 mpt = tlsCache.back();
145 RCF_ASSERT(mpt->empty());
151 std::vector<T *> & tlsCache = getTlsCache( (T *) NULL);
152 tlsCache.push_back(mpt);
169 #endif // ! INCLUDE_RCF_THREADLOCALDATA_HPP Definition: AmiIoHandler.hpp:23