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 "DatabaseEnvFwd.h"
22#include "Define.h"
23#include <functional>
24#include <future>
25#include <list>
26#include <queue>
27#include <variant>
28
30{
31public:
32 explicit QueryCallback(std::future<QueryResult>&& result);
33 explicit QueryCallback(std::future<PreparedQueryResult>&& result);
34 QueryCallback(QueryCallback&& right) noexcept;
35 QueryCallback& operator=(QueryCallback&& right) noexcept;
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 std::variant<std::future<QueryResult>, std::future<PreparedQueryResult>> _query;
55
56 using QueryCallbackData = std::variant<std::function<void(QueryCallback&, QueryResult)>, std::function<void(QueryCallback&, PreparedQueryResult)>>;
57 std::queue<QueryCallbackData, std::list<QueryCallbackData>> _callbacks;
58};
59
60inline bool InvokeAsyncCallbackIfReady(QueryCallback& callback) { return callback.InvokeIfReady(); }
61
62#endif // _QUERY_CALLBACK_H
std::shared_ptr< ResultSet > QueryResult
std::shared_ptr< PreparedResultSet > PreparedQueryResult
#define TC_DATABASE_API
Definition Define.h:111
bool InvokeAsyncCallbackIfReady(QueryCallback &callback)
std::queue< QueryCallbackData, std::list< QueryCallbackData > > _callbacks
QueryCallback(QueryCallback const &right)=delete
std::variant< std::function< void(QueryCallback &, QueryResult)>, std::function< void(QueryCallback &, PreparedQueryResult)> > QueryCallbackData
std::variant< std::future< QueryResult >, std::future< PreparedQueryResult > > _query
QueryCallback & operator=(QueryCallback const &right)=delete