TrinityCore
Loading...
Searching...
No Matches
QueryCallback.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef _QUERY_CALLBACK_H
19#define _QUERY_CALLBACK_H
20
21#include "Define.h"
22#include "DatabaseEnvFwd.h"
23#include <functional>
24#include <future>
25#include <list>
26#include <queue>
27#include <utility>
28
30{
31public:
32 explicit QueryCallback(QueryResultFuture&& result);
35 QueryCallback& operator=(QueryCallback&& right);
37
38 QueryCallback&& WithCallback(std::function<void(QueryResult)>&& callback);
39 QueryCallback&& WithPreparedCallback(std::function<void(PreparedQueryResult)>&& callback);
40
41 QueryCallback&& WithChainingCallback(std::function<void(QueryCallback&, QueryResult)>&& callback);
42 QueryCallback&& WithChainingPreparedCallback(std::function<void(QueryCallback&, PreparedQueryResult)>&& callback);
43
44 // Moves std::future from next to this object
45 void SetNextQuery(QueryCallback&& next);
46
47 // returns true when completed
48 bool InvokeIfReady();
49
50private:
51 QueryCallback(QueryCallback const& right) = delete;
52 QueryCallback& operator=(QueryCallback const& right) = delete;
53
54 template<typename T> friend void ConstructActiveMember(T* obj);
55 template<typename T> friend void DestroyActiveMember(T* obj);
56 template<typename T> friend void MoveFrom(T* to, T&& from);
57
58 union
59 {
62 };
64
65 struct QueryCallbackData;
66 std::queue<QueryCallbackData, std::list<QueryCallbackData>> _callbacks;
67};
68
69inline bool InvokeAsyncCallbackIfReady(QueryCallback& callback) { return callback.InvokeIfReady(); }
70
71#endif // _QUERY_CALLBACK_H
std::future< PreparedQueryResult > PreparedQueryResultFuture
std::future< QueryResult > QueryResultFuture
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_DATABASE_API
Definition Define.h:102
void MoveFrom(T *to, T &&from)
void ConstructActiveMember(T *obj)
void DestroyActiveMember(T *obj)
bool InvokeAsyncCallbackIfReady(QueryCallback &callback)
std::queue< QueryCallbackData, std::list< QueryCallbackData > > _callbacks
QueryResultFuture _string
QueryCallback(QueryCallback const &right)=delete
PreparedQueryResultFuture _prepared
QueryCallback(QueryResultFuture &&result)
QueryCallback(PreparedQueryResultFuture &&result)
QueryCallback & operator=(QueryCallback const &right)=delete