diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-01-12 19:40:33 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-01-12 19:40:33 +0100 |
commit | 73e61fa652d1233bfff1db91fa2bca8c317c8caf (patch) | |
tree | d20241e1c635860eccab7c1fb881f1859743a4f9 /src/server/database/Database/QueryCallback.h | |
parent | 52d0ec3ccb6844d74f50a6bf3e1b2827afc21795 (diff) |
Core/DBLayer: Refine new query callback for chaining
Diffstat (limited to 'src/server/database/Database/QueryCallback.h')
-rw-r--r-- | src/server/database/Database/QueryCallback.h | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/src/server/database/Database/QueryCallback.h b/src/server/database/Database/QueryCallback.h index a0aa69ee952..6c4a8a81b4e 100644 --- a/src/server/database/Database/QueryCallback.h +++ b/src/server/database/Database/QueryCallback.h @@ -30,28 +30,6 @@ typedef std::promise<PreparedQueryResult> PreparedQueryResultPromise; class TC_DATABASE_API QueryCallbackNew { - struct String - { - explicit String(std::future<QueryResult>&& result) : Result(std::move(result)) { } - String(String&&) = default; - String& operator=(String&&) = default; - ~String() { } - - std::future<QueryResult> Result; - std::function<void(QueryResult)> Callback; - }; - - struct Prepared - { - explicit Prepared(std::future<PreparedQueryResult>&& result) : Result(std::move(result)) { } - Prepared(Prepared&&) = default; - Prepared& operator=(Prepared&&) = default; - ~Prepared() { } - - std::future<PreparedQueryResult> Result; - std::function<void(PreparedQueryResult)> Callback; - }; - public: explicit QueryCallbackNew(std::future<QueryResult>&& result); explicit QueryCallbackNew(std::future<PreparedQueryResult>&& result); @@ -72,15 +50,21 @@ public: Status InvokeIfReady(); private: - void MoveFrom(QueryCallbackNew&& other); - void DestroyCurrentMember(); + QueryCallbackNew(QueryCallbackNew const& right) = delete; + QueryCallbackNew& operator=(QueryCallbackNew const& right) = delete; + + template<typename T> friend void MoveFrom(T& to, T&& from); + template<typename T> friend void DestroyActiveMember(T& obj); union { - String _string; - Prepared _prepared; + std::future<QueryResult> _string; + std::future<PreparedQueryResult> _prepared; }; bool _isPrepared; + + struct QueryCallbackData; + std::queue<QueryCallbackData, std::list<QueryCallbackData>> _callbacks; }; template <typename Result, typename ParamType, bool chain = false> |