blob: 0847417e9e7f73b51dc15fdc563704728dd986d2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
/*
* Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _CALLBACK_H
#define _CALLBACK_H
#include <ace/Future.h>
#include <ace/Future_Set.h>
#include "QueryResult.h"
typedef ACE_Future<QueryResult> QueryResultFuture;
/*! A simple template using ACE_Future to manage callbacks from the thread and object that
issued the request. <ParamType> is variable type of parameter that is used as parameter
for the callback function.
*/
template <typename ParamType>
class QueryCallback
{
public:
QueryCallback() {}
void SetFutureResult(QueryResultFuture value)
{
result = value;
}
QueryResultFuture GetFutureResult()
{
return result;
}
int IsReady()
{
return result.ready();
}
void GetResult(QueryResult& res)
{
result.get(res);
}
void FreeResult()
{
result.cancel();
}
void SetParam(ParamType value)
{
param = value;
}
ParamType GetParam()
{
return param;
}
private:
QueryResultFuture result;
ParamType param;
};
template <typename ParamType1, typename ParamType2>
class QueryCallback_2
{
public:
QueryCallback_2() {}
void SetFutureResult(QueryResultFuture value)
{
result = value;
}
QueryResultFuture GetFutureResult()
{
return result;
}
int IsReady()
{
return result.ready();
}
void GetResult(QueryResult& res)
{
result.get(res);
}
void FreeResult()
{
result.cancel();
}
void SetFirstParam(ParamType1 value)
{
param_1 = value;
}
void SetSecondParam(ParamType2 value)
{
param_2 = value;
}
ParamType1 GetFirstParam()
{
return param_1;
}
ParamType2 GetSecondParam()
{
return param_2;
}
private:
QueryResultFuture result;
ParamType1 param_1;
ParamType2 param_2;
};
#endif
|