TrinityCore
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 <list>
25#include <queue>
26
28{
29public:
30 explicit QueryCallback(QueryResultFuture&& result);
32 QueryCallback(QueryCallback&& right) noexcept;
33 QueryCallback& operator=(QueryCallback&& right) noexcept;
35
36 QueryCallback&& WithCallback(std::function<void(QueryResult)>&& callback);
37 QueryCallback&& WithPreparedCallback(std::function<void(PreparedQueryResult)>&& callback);
38
39 QueryCallback&& WithChainingCallback(std::function<void(QueryCallback&, QueryResult)>&& callback);
40 QueryCallback&& WithChainingPreparedCallback(std::function<void(QueryCallback&, PreparedQueryResult)>&& callback);
41
42 // Moves std::future from next to this object
43 void SetNextQuery(QueryCallback&& next);
44
45 // returns true when completed
46 bool InvokeIfReady();
47
48private:
49 QueryCallback(QueryCallback const& right) = delete;
50 QueryCallback& operator=(QueryCallback const& right) = delete;
51
52 template<typename T> friend void ConstructActiveMember(T* obj);
53 template<typename T> friend void DestroyActiveMember(T* obj);
54 template<typename T> friend void MoveFrom(T* to, T&& from);
55
56 union
57 {
60 };
62
63 struct QueryCallbackData;
64 std::queue<QueryCallbackData, std::list<QueryCallbackData>> _callbacks;
65};
66
67#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:111
void MoveFrom(T *to, T &&from)
void ConstructActiveMember(T *obj)
void DestroyActiveMember(T *obj)
std::queue< QueryCallbackData, std::list< QueryCallbackData > > _callbacks
Definition: QueryCallback.h:64
QueryResultFuture _string
Definition: QueryCallback.h:58
QueryCallback(QueryCallback const &right)=delete
PreparedQueryResultFuture _prepared
Definition: QueryCallback.h:59
QueryCallback(QueryResultFuture &&result)
QueryCallback(PreparedQueryResultFuture &&result)
QueryCallback & operator=(QueryCallback const &right)=delete