libzypp
11.13.5
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
Callback.h
Go to the documentation of this file.
1
/*---------------------------------------------------------------------\
2
| ____ _ __ __ ___ |
3
| |__ / \ / / . \ . \ |
4
| / / \ V /| _/ _/ |
5
| / /__ | | | | | | |
6
| /_____||_| |_| |_| |
7
| |
8
\---------------------------------------------------------------------*/
12
#ifndef ZYPP_CALLBACK_H
13
#define ZYPP_CALLBACK_H
14
15
#include "
zypp/base/NonCopyable.h
"
16
18
namespace
zypp
19
{
20
22
namespace
HACK {
23
class
Callback
24
{
25
};
26
}
// namespace HACK
27
29
129
namespace
callback
130
{
131
133
struct
ReportBase
134
{
135
virtual
~ReportBase
()
136
{}
137
};
138
140
template
<
class
_Report>
141
class
DistributeReport;
142
144
template
<
class
_Report>
145
struct
ReceiveReport
:
public
_Report
146
{
147
typedef
_Report
ReportType
;
148
typedef
ReceiveReport<_Report>
Receiver
;
149
typedef
DistributeReport<_Report>
Distributor
;
150
151
virtual
~ReceiveReport
()
152
{
disconnect
(); }
153
154
ReceiveReport
*
whoIsConnected
()
const
155
{
return
Distributor::instance
().
getReceiver
(); }
156
157
bool
connected
()
const
158
{
return
whoIsConnected
() ==
this
; }
159
160
void
connect
()
161
{
Distributor::instance
().
setReceiver
( *
this
); }
162
163
void
disconnect
()
164
{
Distributor::instance
().
unsetReceiver
( *
this
); }
165
166
virtual
void
reportbegin
()
167
{}
168
virtual
void
reportend
()
169
{}
170
};
171
173
template
<
class
_Report>
174
struct
DistributeReport
175
{
176
public
:
177
typedef
_Report
ReportType
;
178
typedef
ReceiveReport<_Report>
Receiver
;
179
typedef
DistributeReport<_Report>
Distributor
;
180
181
static
DistributeReport
&
instance
()
182
{
183
static
DistributeReport
_self;
184
return
_self;
185
}
186
187
Receiver
*
getReceiver
()
const
188
{
return
_receiver
== &
_noReceiver
? 0 :
_receiver
; }
189
190
void
setReceiver
(
Receiver
& rec_r )
191
{
_receiver
= &rec_r; }
192
193
void
unsetReceiver
(
Receiver
& rec_r )
194
{
if
(
_receiver
== &rec_r )
noReceiver
(); }
195
196
void
noReceiver
()
197
{
_receiver
= &
_noReceiver
; }
198
199
public
:
200
Receiver
*
operator->
()
201
{
return
_receiver
; }
202
203
private
:
204
DistributeReport
()
205
:
_receiver
( &
_noReceiver
)
206
{}
207
Receiver
_noReceiver
;
208
Receiver
*
_receiver
;
209
};
210
212
template
<
class
_Report>
213
struct
SendReport
:
private
zypp::base::NonCopyable
214
{
215
typedef
_Report
ReportType
;
216
typedef
ReceiveReport<_Report>
Receiver
;
217
typedef
DistributeReport<_Report>
Distributor
;
218
219
SendReport
()
220
{
Distributor::instance
()->reportbegin(); }
221
222
~SendReport
()
223
{
Distributor::instance
()->reportend(); }
224
225
Distributor
&
operator->
()
226
{
return
Distributor::instance
(); }
227
};
228
254
template
<
class
_Report>
255
struct
TempConnect
256
{
257
typedef
_Report
ReportType
;
258
typedef
ReceiveReport<_Report>
Receiver
;
259
typedef
DistributeReport<_Report>
Distributor
;
260
261
TempConnect
()
262
:
_oldRec
(
Distributor
::instance().getReceiver() )
263
{
264
Distributor::instance
().
noReceiver
();
265
}
266
267
TempConnect
(
Receiver
& rec_r )
268
:
_oldRec
(
Distributor
::instance().getReceiver() )
269
{
270
rec_r.connect();
271
}
272
273
~TempConnect
()
274
{
275
if
(
_oldRec
)
276
Distributor::instance
().
setReceiver
( *
_oldRec
);
277
else
278
Distributor::instance
().
noReceiver
();
279
}
280
private
:
281
Receiver
*
_oldRec
;
282
};
283
285
}
// namespace callback
288
}
// namespace zypp
290
#endif // ZYPP_CALLBACK_H
zypp
Callback.h
Generated by
1.8.1