diff --git a/doxygen/html/_delegate_8h_source.html b/doxygen/html/_delegate_8h_source.html index f958f0d..0729614 100644 --- a/doxygen/html/_delegate_8h_source.html +++ b/doxygen/html/_delegate_8h_source.html @@ -160,344 +160,390 @@
86
92 DelegateFree(const ClassType& rhs) { Assign(rhs); }
93
-
95 DelegateFree() = default;
-
96
-
102 void Bind(FreeFunc func) { m_func = func; }
-
103
-
-
109 virtual ClassType* Clone() const override {
-
110 return new ClassType(*this);
-
111 }
-
-
112
-
-
117 void Assign(const ClassType& rhs) {
-
118 m_func = rhs.m_func;
-
119 }
-
-
120
-
-
124 virtual RetType operator()(Args... args) override {
-
125 return std::invoke(m_func, args...);
-
126 }
-
-
127
-
-
131 ClassType& operator=(const ClassType& rhs) {
-
132 if (&rhs != this) {
-
133 Assign(rhs);
-
134 }
-
135 return *this;
-
136 }
-
-
137
-
-
141 virtual bool operator==(const DelegateBase& rhs) const override {
-
142 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
143 return derivedRhs &&
-
144 m_func == derivedRhs->m_func;
-
145 }
-
-
146
-
149 bool Empty() const { return !m_func; }
-
150
-
153 void Clear() { m_func = nullptr; }
-
154
-
157 explicit operator bool() const { return !Empty(); }
-
158
-
159private:
-
161 FreeFunc m_func = nullptr;
-
162};
- -
163
-
164template <class C, class R>
-
165struct DelegateMember; // Not defined
-
166
-
172template <class TClass, class RetType, class... Args>
-
-
173class DelegateMember<TClass, RetType(Args...)> : public Delegate<RetType(Args...)> {
-
174public:
-
175 typedef TClass* ObjectPtr;
-
176 typedef RetType(TClass::*MemberFunc)(Args...);
-
177 typedef RetType(TClass::*ConstMemberFunc)(Args...) const;
-
178 using ClassType = DelegateMember<TClass, RetType(Args...)>;
-
179
-
183 DelegateMember(ObjectPtr object, MemberFunc func) { Bind(object, func); }
-
184
-
188 DelegateMember(ObjectPtr object, ConstMemberFunc func) { Bind(object, func); }
-
189
-
195 DelegateMember(const ClassType& rhs) { Assign(rhs); }
-
196
-
198 DelegateMember() = default;
-
199
-
-
206 void Bind(ObjectPtr object, MemberFunc func) {
-
207 m_object = object;
-
208 m_func = func;
-
209 }
-
+
96 DelegateFree(ClassType&& rhs) noexcept : m_func(rhs.m_func) { }
+
97
+
99 DelegateFree() = default;
+
100
+
106 void Bind(FreeFunc func) { m_func = func; }
+
107
+
+
113 virtual ClassType* Clone() const override {
+
114 return new ClassType(*this);
+
115 }
+
+
116
+
+
121 void Assign(const ClassType& rhs) {
+
122 m_func = rhs.m_func;
+
123 }
+
+
124
+
+
128 virtual RetType operator()(Args... args) override {
+
129 return std::invoke(m_func, std::forward<Args>(args)...);
+
130 }
+
+
131
+
+ +
136 if (&rhs != this) {
+
137 Assign(rhs);
+
138 }
+
139 return *this;
+
140 }
+
+
141
+
+
145 ClassType& operator=(ClassType&& rhs) noexcept {
+
146 if (&rhs != this) {
+
147 m_func = rhs.m_func;
+
148 }
+
149 return *this;
+
150 }
+
+
151
+
+
155 virtual bool operator==(const DelegateBase& rhs) const override {
+
156 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
157 return derivedRhs &&
+
158 m_func == derivedRhs->m_func;
+
159 }
+
+
160
+
163 bool Empty() const noexcept { return !m_func; }
+
164
+
167 void Clear() noexcept { m_func = nullptr; }
+
168
+
171 explicit operator bool() const noexcept { return !Empty(); }
+
172
+
173private:
+
175 FreeFunc m_func = nullptr;
+
176};
+
+
177
+
178template <class C, class R>
+
179struct DelegateMember; // Not defined
+
180
+
186template <class TClass, class RetType, class... Args>
+
+
187class DelegateMember<TClass, RetType(Args...)> : public Delegate<RetType(Args...)> {
+
188public:
+
189 typedef TClass* ObjectPtr;
+
190 typedef RetType(TClass::*MemberFunc)(Args...);
+
191 typedef RetType(TClass::*ConstMemberFunc)(Args...) const;
+
192 using ClassType = DelegateMember<TClass, RetType(Args...)>;
+
193
+
197 DelegateMember(ObjectPtr object, MemberFunc func) { Bind(object, func); }
+
198
+
202 DelegateMember(ObjectPtr object, ConstMemberFunc func) { Bind(object, func); }
+
203
+
209 DelegateMember(const ClassType& rhs) { Assign(rhs); }
210
-
-
217 void Bind(ObjectPtr object, ConstMemberFunc func) {
-
218 m_object = object;
-
219 m_func = reinterpret_cast<MemberFunc>(func);
-
220 }
-
-
221
-
-
227 virtual ClassType* Clone() const override {
-
228 return new ClassType(*this);
-
229 }
-
-
230
+
213 DelegateMember(ClassType&& rhs) noexcept : m_object(rhs.m_object), m_func(rhs.m_func) { }
+
214
+
216 DelegateMember() = default;
+
217
+
+
224 void Bind(ObjectPtr object, MemberFunc func) {
+
225 m_object = object;
+
226 m_func = func;
+
227 }
+
+
228
-
235 void Assign(const ClassType& rhs) {
-
236 m_object = rhs.m_object;
-
237 m_func = rhs.m_func;
+
235 void Bind(ObjectPtr object, ConstMemberFunc func) {
+
236 m_object = object;
+
237 m_func = reinterpret_cast<MemberFunc>(func);
238 }
239
-
-
243 virtual RetType operator()(Args... args) override {
-
244 return std::invoke(m_func, m_object, args...);
-
245 }
-
-
246
-
- -
251 if (&rhs != this) {
-
252 Assign(rhs);
-
253 }
-
254 return *this;
-
255 }
-
-
256
-
-
260 virtual bool operator==(const DelegateBase& rhs) const override {
-
261 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
262 return derivedRhs &&
-
263 m_func == derivedRhs->m_func &&
-
264 m_object == derivedRhs->m_object;
-
265 }
-
-
266
-
269 bool Empty() const { return !(m_object && m_func); }
-
270
-
273 void Clear() { m_object = nullptr; m_func = nullptr; }
+
+
245 virtual ClassType* Clone() const override {
+
246 return new ClassType(*this);
+
247 }
+
+
248
+
+
253 void Assign(const ClassType& rhs) {
+
254 m_object = rhs.m_object;
+
255 m_func = rhs.m_func;
+
256 }
+
+
257
+
+
261 virtual RetType operator()(Args... args) override {
+
262 return std::invoke(m_func, m_object, std::forward<Args>(args)...);
+
263 }
+
+
264
+
+ +
269 if (&rhs != this) {
+
270 Assign(rhs);
+
271 }
+
272 return *this;
+
273 }
+
274
-
277 explicit operator bool() const { return !Empty(); }
-
278
-
279private:
-
281 ObjectPtr m_object = nullptr;
-
282
-
284 MemberFunc m_func = nullptr;
-
285};
-
-
286
-
287template <class C, class R>
-
288struct DelegateMemberSp; // Not defined
-
289
-
295template <class TClass, class RetType, class... Args>
-
-
296class DelegateMemberSp<TClass, RetType(Args...)> : public Delegate<RetType(Args...)> {
-
297public:
-
298 typedef std::shared_ptr<TClass> ObjectPtr;
-
299 typedef RetType(TClass::* MemberFunc)(Args...);
-
300 typedef RetType(TClass::* ConstMemberFunc)(Args...) const;
-
301 using ClassType = DelegateMemberSp<TClass, RetType(Args...)>;
-
302
-
306 DelegateMemberSp(ObjectPtr object, MemberFunc func) { Bind(object, func); }
+
+
278 ClassType& operator=(ClassType&& rhs) noexcept {
+
279 if (&rhs != this) {
+
280 m_object = rhs.m_object;
+
281 m_func = rhs.m_func;
+
282 }
+
283 return *this;
+
284 }
+
+
285
+
+
289 virtual bool operator==(const DelegateBase& rhs) const override {
+
290 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
291 return derivedRhs &&
+
292 m_func == derivedRhs->m_func &&
+
293 m_object == derivedRhs->m_object;
+
294 }
+
+
295
+
298 bool Empty() const noexcept { return !(m_object && m_func); }
+
299
+
302 void Clear() noexcept { m_object = nullptr; m_func = nullptr; }
+
303
+
306 explicit operator bool() const noexcept { return !Empty(); }
307
-
311 DelegateMemberSp(ObjectPtr object, ConstMemberFunc func) { Bind(object, func); }
-
312
-
318 DelegateMemberSp(const ClassType& rhs) { Assign(rhs); }
-
319
-
321 DelegateMemberSp() = default;
-
322
-
-
329 void Bind(ObjectPtr object, MemberFunc func) {
-
330 m_object = object;
-
331 m_func = func;
-
332 }
-
-
333
-
-
340 void Bind(ObjectPtr object, ConstMemberFunc func) {
-
341 m_object = object;
-
342 m_func = reinterpret_cast<MemberFunc>(func);
-
343 }
-
-
344
-
-
350 virtual ClassType* Clone() const override {
-
351 return new ClassType(*this);
-
352 }
-
-
353
-
-
358 void Assign(const ClassType& rhs) {
-
359 m_object = rhs.m_object;
-
360 m_func = rhs.m_func;
-
361 }
-
-
362
-
-
366 virtual RetType operator()(Args... args) override {
-
367 return std::invoke(m_func, m_object, args...);
-
368 }
-
-
369
+
308private:
+
310 ObjectPtr m_object = nullptr;
+
311
+
313 MemberFunc m_func = nullptr;
+
314};
+
+
315
+
316template <class C, class R>
+
317struct DelegateMemberSp; // Not defined
+
318
+
324template <class TClass, class RetType, class... Args>
+
+
325class DelegateMemberSp<TClass, RetType(Args...)> : public Delegate<RetType(Args...)> {
+
326public:
+
327 typedef std::shared_ptr<TClass> ObjectPtr;
+
328 typedef RetType(TClass::* MemberFunc)(Args...);
+
329 typedef RetType(TClass::* ConstMemberFunc)(Args...) const;
+
330 using ClassType = DelegateMemberSp<TClass, RetType(Args...)>;
+
331
+
335 DelegateMemberSp(ObjectPtr object, MemberFunc func) { Bind(object, func); }
+
336
+
340 DelegateMemberSp(ObjectPtr object, ConstMemberFunc func) { Bind(object, func); }
+
341
+
347 DelegateMemberSp(const ClassType& rhs) { Assign(rhs); }
+
348
+
351 DelegateMemberSp(ClassType&& rhs) noexcept : m_object(rhs.m_object), m_func(rhs.m_func) { }
+
352
+
354 DelegateMemberSp() = default;
+
355
+
+
362 void Bind(ObjectPtr object, MemberFunc func) {
+
363 m_object = object;
+
364 m_func = func;
+
365 }
+
+
366
- -
374 if (&rhs != this) {
-
375 Assign(rhs);
-
376 }
-
377 return *this;
-
378 }
-
-
379
+
373 void Bind(ObjectPtr object, ConstMemberFunc func) {
+
374 m_object = object;
+
375 m_func = reinterpret_cast<MemberFunc>(func);
+
376 }
+
+
377
-
383 virtual bool operator==(const DelegateBase& rhs) const override {
-
384 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
385 return derivedRhs &&
-
386 m_func == derivedRhs->m_func &&
-
387 m_object == derivedRhs->m_object;
-
388 }
-
-
389
-
392 bool Empty() const { return !(m_object && m_func); }
-
393
-
396 void Clear() { m_object = nullptr; m_func = nullptr; }
-
397
-
400 explicit operator bool() const { return !Empty(); }
-
401
-
402private:
-
404 ObjectPtr m_object = nullptr;
-
405
-
407 MemberFunc m_func = nullptr;
-
408};
- -
409
-
410template <class R>
-
411class DelegateFunction; // Not defined
+
383 virtual ClassType* Clone() const override {
+
384 return new ClassType(*this);
+
385 }
+ +
386
+
+
391 void Assign(const ClassType& rhs) {
+
392 m_object = rhs.m_object;
+
393 m_func = rhs.m_func;
+
394 }
+
+
395
+
+
399 virtual RetType operator()(Args... args) override {
+
400 return std::invoke(m_func, m_object, std::forward<Args>(args)...);
+
401 }
+
+
402
+
+
406 ClassType& operator=(const ClassType& rhs) {
+
407 if (&rhs != this) {
+
408 Assign(rhs);
+
409 }
+
410 return *this;
+
411 }
+
412
-
434template <class RetType, class... Args>
-
-
435class DelegateFunction<RetType(Args...)> : public Delegate<RetType(Args...)> {
-
436public:
-
437 using FunctionType = std::function<RetType(Args...)>;
-
438 using ClassType = DelegateFunction<RetType(Args...)>;
-
439
-
442 DelegateFunction(FunctionType func) { Bind(func); }
-
443
-
449 DelegateFunction(const ClassType& rhs) { Assign(rhs); }
-
450
-
452 DelegateFunction() = default;
+
+
416 ClassType& operator=(ClassType&& rhs) noexcept {
+
417 if (&rhs != this) {
+
418 m_object = rhs.m_object;
+
419 m_func = rhs.m_func;
+
420 }
+
421 return *this;
+
422 }
+
+
423
+
+
427 virtual bool operator==(const DelegateBase& rhs) const override {
+
428 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
429 return derivedRhs &&
+
430 m_func == derivedRhs->m_func &&
+
431 m_object == derivedRhs->m_object;
+
432 }
+
+
433
+
436 bool Empty() const noexcept { return !(m_object && m_func); }
+
437
+
440 void Clear() noexcept { m_object = nullptr; m_func = nullptr; }
+
441
+
444 explicit operator bool() const noexcept { return !Empty(); }
+
445
+
446private:
+
448 ObjectPtr m_object = nullptr;
+
449
+
451 MemberFunc m_func = nullptr;
+
452};
+
453
-
-
459 void Bind(FunctionType func) {
-
460 m_func = func;
-
461 }
-
-
462
-
-
468 virtual ClassType* Clone() const override {
-
469 return new ClassType(*this);
-
470 }
-
-
471
-
-
476 void Assign(const ClassType& rhs) {
-
477 m_func = rhs.m_func;
-
478 }
-
-
479
-
-
483 virtual RetType operator()(Args... args) override {
-
484 return m_func(std::forward<Args>(args)...);
-
485 }
-
-
486
-
-
490 ClassType& operator=(const ClassType& rhs) {
-
491 if (&rhs != this) {
-
492 Assign(rhs);
-
493 }
-
494 return *this;
-
495 }
-
-
496
-
-
500 virtual bool operator==(const DelegateBase& rhs) const override {
-
501 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
502 if (derivedRhs) {
-
503 // If both delegates are empty, they are equal
-
504 if (Empty() && derivedRhs->Empty())
-
505 return true;
-
506
-
507 if (m_func && derivedRhs->m_func)
-
508 return m_func.target_type() == derivedRhs->m_func.target_type();
-
509
-
510 return false;
-
511 }
-
512
-
513 return false; // Return false if dynamic cast failed
-
514 }
-
-
515
-
518 bool Empty() const { return !m_func; }
+
454template <class R>
+
455class DelegateFunction; // Not defined
+
456
+
478template <class RetType, class... Args>
+
+
479class DelegateFunction<RetType(Args...)> : public Delegate<RetType(Args...)> {
+
480public:
+
481 using FunctionType = std::function<RetType(Args...)>;
+
482 using ClassType = DelegateFunction<RetType(Args...)>;
+
483
+
486 DelegateFunction(FunctionType func) { Bind(func); }
+
487
+
493 DelegateFunction(const ClassType& rhs) { Assign(rhs); }
+
494
+
497 DelegateFunction(ClassType&& rhs) noexcept : m_func(rhs.m_func) { }
+
498
+
500 DelegateFunction() = default;
+
501
+
+
507 void Bind(FunctionType func) {
+
508 m_func = func;
+
509 }
+
+
510
+
+
516 virtual ClassType* Clone() const override {
+
517 return new ClassType(*this);
+
518 }
+
519
-
522 void Clear() { m_func = nullptr; }
-
523
-
526 explicit operator bool() const { return !Empty(); }
+
+
524 void Assign(const ClassType& rhs) {
+
525 m_func = rhs.m_func;
+
526 }
+
527
-
528private:
-
530 FunctionType m_func;
-
531};
-
-
532
-
538template <class RetType, class... Args>
-
-
539DelegateFree<RetType(Args...)> MakeDelegate(RetType(*func)(Args... args)) {
-
540 return DelegateFree<RetType(Args...)>(func);
-
541}
-
-
542
-
550template <class TClass, class RetType, class... Args>
-
-
551DelegateMember<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::*func)(Args... args)) {
-
552 return DelegateMember<TClass, RetType(Args...)>(object, func);
-
553}
+
+
531 virtual RetType operator()(Args... args) override {
+
532 return m_func(std::forward<Args>(args)...);
+
533 }
+
+
534
+
+ +
539 if (&rhs != this) {
+
540 Assign(rhs);
+
541 }
+
542 return *this;
+
543 }
+
+
544
+
+
548 ClassType& operator=(ClassType&& rhs) noexcept {
+
549 if (&rhs != this) {
+
550 m_func = rhs.m_func;
+
551 }
+
552 return *this;
+
553 }
554
-
562template <class TClass, class RetType, class... Args>
-
563DelegateMember<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::*func)(Args... args) const) {
-
564 return DelegateMember<TClass, RetType(Args...)>(object, func);
-
565}
-
566
-
574template <class TClass, class RetType, class... Args>
-
-
575DelegateMemberSp<TClass, RetType(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetType(TClass::* func)(Args... args)) {
-
576 return DelegateMemberSp<TClass, RetType(Args...)>(object, func);
-
577}
-
-
578
-
586template <class TClass, class RetType, class... Args>
-
587DelegateMemberSp<TClass, RetType(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetType(TClass::* func)(Args... args) const) {
-
588 return DelegateMemberSp<TClass, RetType(Args...)>(object, func);
-
589}
+
+
558 virtual bool operator==(const DelegateBase& rhs) const override {
+
559 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
560 if (derivedRhs) {
+
561 // If both delegates are empty, they are equal
+
562 if (Empty() && derivedRhs->Empty())
+
563 return true;
+
564
+
565 if (m_func && derivedRhs->m_func)
+
566 return m_func.target_type() == derivedRhs->m_func.target_type();
+
567
+
568 return false;
+
569 }
+
570
+
571 return false; // Return false if dynamic cast failed
+
572 }
+
+
573
+
576 bool Empty() const noexcept { return !m_func; }
+
577
+
580 void Clear() noexcept { m_func = nullptr; }
+
581
+
584 explicit operator bool() const noexcept { return !Empty(); }
+
585
+
586private:
+
588 FunctionType m_func;
+
589};
+
590
596template <class RetType, class... Args>
-
597DelegateFunction<RetType(Args...)> MakeDelegate(std::function<RetType(Args...)> func) {
-
598 return DelegateFunction<RetType(Args...)>(func);
+
597DelegateFree<RetType(Args...)> MakeDelegate(RetType(*func)(Args... args)) {
+
598 return DelegateFree<RetType(Args...)>(func);
599}
600
-
601}
- -
602
-
603#endif
+
608template <class TClass, class RetType, class... Args>
+
+
609DelegateMember<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::*func)(Args... args)) {
+
610 return DelegateMember<TClass, RetType(Args...)>(object, func);
+
611}
+
+
612
+
620template <class TClass, class RetType, class... Args>
+
621DelegateMember<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::*func)(Args... args) const) {
+
622 return DelegateMember<TClass, RetType(Args...)>(object, func);
+
623}
+
624
+
632template <class TClass, class RetType, class... Args>
+
+
633DelegateMemberSp<TClass, RetType(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetType(TClass::* func)(Args... args)) {
+
634 return DelegateMemberSp<TClass, RetType(Args...)>(object, func);
+
635}
+
+
636
+
644template <class TClass, class RetType, class... Args>
+
645DelegateMemberSp<TClass, RetType(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetType(TClass::* func)(Args... args) const) {
+
646 return DelegateMemberSp<TClass, RetType(Args...)>(object, func);
+
647}
+
648
+
654template <class RetType, class... Args>
+
+
655DelegateFunction<RetType(Args...)> MakeDelegate(std::function<RetType(Args...)> func) {
+
656 return DelegateFunction<RetType(Args...)>(func);
+
657}
+
+
658
+
659}
+ +
660
+
661#endif
DelegateOpt.h
Delegate library options header file.
XALLOCATOR
#define XALLOCATOR
Definition DelegateOpt.h:21
DelegateLib::Delegate< RetType(Args...)>::operator()
virtual RetType operator()(Args... args)=0
Invoke the bound callable function stored within the delegate instance.
@@ -508,66 +554,74 @@
DelegateLib::DelegateBase::~DelegateBase
virtual ~DelegateBase() noexcept=default
DelegateLib::DelegateFree< RetType(Args...)>
DelegateFree<> class synchronously invokes a free target function.
Definition Delegate.h:78
DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree
DelegateFree(FreeFunc func)
Constructor to create a class instance.
Definition Delegate.h:85
-
DelegateLib::DelegateFree< RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke the bound delegate function synchronously.
Definition Delegate.h:124
-
DelegateLib::DelegateFree< RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition Delegate.h:141
-
DelegateLib::DelegateFree< RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition Delegate.h:109
-
DelegateLib::DelegateFree< RetType(Args...)>::Bind
void Bind(FreeFunc func)
Bind a free function to the delegate.
Definition Delegate.h:102
+
DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree
DelegateFree(ClassType &&rhs) noexcept
Move constructor that transfers ownership of resources.
Definition Delegate.h:96
+
DelegateLib::DelegateFree< RetType(Args...)>::Clear
void Clear() noexcept
Clear the target function.
Definition Delegate.h:167
+
DelegateLib::DelegateFree< RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke the bound delegate function synchronously.
Definition Delegate.h:128
+
DelegateLib::DelegateFree< RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition Delegate.h:155
+
DelegateLib::DelegateFree< RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition Delegate.h:113
+
DelegateLib::DelegateFree< RetType(Args...)>::Bind
void Bind(FreeFunc func)
Bind a free function to the delegate.
Definition Delegate.h:106
DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree
DelegateFree()=default
Default constructor creates an empty delegate.
-
DelegateLib::DelegateFree< RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition Delegate.h:131
+
DelegateLib::DelegateFree< RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition Delegate.h:135
DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree
DelegateFree(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition Delegate.h:92
-
DelegateLib::DelegateFree< RetType(Args...)>::Empty
bool Empty() const
Check if the delegate is bound to a target function.
Definition Delegate.h:149
-
DelegateLib::DelegateFree< RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition Delegate.h:117
-
DelegateLib::DelegateFree< RetType(Args...)>::Clear
void Clear()
Clear the target function.
Definition Delegate.h:153
-
DelegateLib::DelegateFunction< RetType(Args...)>
DelegateFunction<> class synchronously invokes a std::function target function.
Definition Delegate.h:435
-
DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction
DelegateFunction(const ClassType &rhs)
Creates a copy of the current object.
Definition Delegate.h:449
-
DelegateLib::DelegateFunction< RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition Delegate.h:500
-
DelegateLib::DelegateFunction< RetType(Args...)>::Clear
void Clear()
Clear the target function.
Definition Delegate.h:522
-
DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction
DelegateFunction(FunctionType func)
Constructor to create a class instance.
Definition Delegate.h:442
+
DelegateLib::DelegateFree< RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition Delegate.h:121
+
DelegateLib::DelegateFree< RetType(Args...)>::operator=
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition Delegate.h:145
+
DelegateLib::DelegateFree< RetType(Args...)>::Empty
bool Empty() const noexcept
Check if the delegate is bound to a target function.
Definition Delegate.h:163
+
DelegateLib::DelegateFunction< RetType(Args...)>
DelegateFunction<> class synchronously invokes a std::function target function.
Definition Delegate.h:479
+
DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction
DelegateFunction(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition Delegate.h:493
+
DelegateLib::DelegateFunction< RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition Delegate.h:558
+
DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction
DelegateFunction(FunctionType func)
Constructor to create a class instance.
Definition Delegate.h:486
+
DelegateLib::DelegateFunction< RetType(Args...)>::operator=
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition Delegate.h:548
+
DelegateLib::DelegateFunction< RetType(Args...)>::Clear
void Clear() noexcept
Clear the target function.
Definition Delegate.h:580
DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction
DelegateFunction()=default
Default constructor creates an empty delegate.
-
DelegateLib::DelegateFunction< RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke the bound delegate function synchronously.
Definition Delegate.h:483
-
DelegateLib::DelegateFunction< RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition Delegate.h:476
-
DelegateLib::DelegateFunction< RetType(Args...)>::FunctionType
std::function< RetType(Args...)> FunctionType
Definition Delegate.h:437
-
DelegateLib::DelegateFunction< RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition Delegate.h:490
-
DelegateLib::DelegateFunction< RetType(Args...)>::Empty
bool Empty() const
Check if the delegate is bound to a target function.
Definition Delegate.h:518
-
DelegateLib::DelegateFunction< RetType(Args...)>::Bind
void Bind(FunctionType func)
Bind a member function to the delegate.
Definition Delegate.h:459
-
DelegateLib::DelegateFunction< RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition Delegate.h:468
-
DelegateLib::DelegateFunction
Definition Delegate.h:411
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>
DelegateMember<> class synchronously invokes a class member target function using a class object poin...
Definition Delegate.h:173
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, MemberFunc func)
Bind a member function to the delegate.
Definition Delegate.h:206
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, ConstMemberFunc func)
Bind a const member function to the delegate.
Definition Delegate.h:217
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember
DelegateMember(const ClassType &rhs)
Creates a copy of the current object.
Definition Delegate.h:195
+
DelegateLib::DelegateFunction< RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke the bound delegate function synchronously.
Definition Delegate.h:531
+
DelegateLib::DelegateFunction< RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition Delegate.h:524
+
DelegateLib::DelegateFunction< RetType(Args...)>::Empty
bool Empty() const noexcept
Check if the delegate is bound to a target function.
Definition Delegate.h:576
+
DelegateLib::DelegateFunction< RetType(Args...)>::FunctionType
std::function< RetType(Args...)> FunctionType
Definition Delegate.h:481
+
DelegateLib::DelegateFunction< RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition Delegate.h:538
+
DelegateLib::DelegateFunction< RetType(Args...)>::Bind
void Bind(FunctionType func)
Bind a member function to the delegate.
Definition Delegate.h:507
+
DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction
DelegateFunction(ClassType &&rhs) noexcept
Move constructor that transfers ownership of resources.
Definition Delegate.h:497
+
DelegateLib::DelegateFunction< RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition Delegate.h:516
+
DelegateLib::DelegateFunction
Definition Delegate.h:455
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>
DelegateMember<> class synchronously invokes a class member target function using a class object poin...
Definition Delegate.h:187
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, MemberFunc func)
Bind a member function to the delegate.
Definition Delegate.h:224
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, ConstMemberFunc func)
Bind a const member function to the delegate.
Definition Delegate.h:235
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember
DelegateMember(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition Delegate.h:209
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember
DelegateMember()=default
Default constructor creates an empty delegate.
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Empty
bool Empty() const
Check if the delegate is bound to a target function.
Definition Delegate.h:269
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition Delegate.h:260
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition Delegate.h:235
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember
DelegateMember(ObjectPtr object, ConstMemberFunc func)
Constructor to create a class instance.
Definition Delegate.h:188
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember
DelegateMember(ObjectPtr object, MemberFunc func)
Constructor to create a class instance.
Definition Delegate.h:183
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke the bound delegate function synchronously.
Definition Delegate.h:243
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition Delegate.h:250
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::ObjectPtr
TClass * ObjectPtr
Definition Delegate.h:175
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clear
void Clear()
Clear the target function.
Definition Delegate.h:273
-
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition Delegate.h:227
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>
DelegateMemberSp<> class synchronously invokes a class member target function using a std::shared_ptr...
Definition Delegate.h:296
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember
DelegateMember(ClassType &&rhs) noexcept
Move constructor that transfers ownership of resources.
Definition Delegate.h:213
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition Delegate.h:289
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clear
void Clear() noexcept
Clear the target function.
Definition Delegate.h:302
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Empty
bool Empty() const noexcept
Check if the delegate is bound to a target function.
Definition Delegate.h:298
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition Delegate.h:253
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember
DelegateMember(ObjectPtr object, ConstMemberFunc func)
Constructor to create a class instance.
Definition Delegate.h:202
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember
DelegateMember(ObjectPtr object, MemberFunc func)
Constructor to create a class instance.
Definition Delegate.h:197
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke the bound delegate function synchronously.
Definition Delegate.h:261
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition Delegate.h:268
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition Delegate.h:278
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::ObjectPtr
TClass * ObjectPtr
Definition Delegate.h:189
+
DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition Delegate.h:245
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>
DelegateMemberSp<> class synchronously invokes a class member target function using a std::shared_ptr...
Definition Delegate.h:325
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp
DelegateMemberSp()=default
Default constructor creates an empty delegate.
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Empty
bool Empty() const
Check if the delegate is bound to a target function.
Definition Delegate.h:392
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition Delegate.h:373
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp
DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)
Constructor to create a class instance.
Definition Delegate.h:311
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition Delegate.h:358
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition Delegate.h:350
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clear
void Clear()
Clear the target function.
Definition Delegate.h:396
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp
DelegateMemberSp(ObjectPtr object, MemberFunc func)
Constructor to create a class instance.
Definition Delegate.h:306
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, ConstMemberFunc func)
Bind a const member function to the delegate.
Definition Delegate.h:340
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::ObjectPtr
std::shared_ptr< TClass > ObjectPtr
Definition Delegate.h:298
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition Delegate.h:383
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke the bound delegate function synchronously.
Definition Delegate.h:366
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, MemberFunc func)
Bind a member function to the delegate.
Definition Delegate.h:329
-
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp
DelegateMemberSp(const ClassType &rhs)
Creates a copy of the current object.
Definition Delegate.h:318
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition Delegate.h:406
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp
DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)
Constructor to create a class instance.
Definition Delegate.h:340
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition Delegate.h:391
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition Delegate.h:383
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Empty
bool Empty() const noexcept
Check if the delegate is bound to a target function.
Definition Delegate.h:436
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp
DelegateMemberSp(ObjectPtr object, MemberFunc func)
Constructor to create a class instance.
Definition Delegate.h:335
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, ConstMemberFunc func)
Bind a const member function to the delegate.
Definition Delegate.h:373
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition Delegate.h:416
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::ObjectPtr
std::shared_ptr< TClass > ObjectPtr
Definition Delegate.h:327
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp
DelegateMemberSp(ClassType &&rhs) noexcept
Move constructor that transfers ownership of resources.
Definition Delegate.h:351
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition Delegate.h:427
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke the bound delegate function synchronously.
Definition Delegate.h:399
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, MemberFunc func)
Bind a member function to the delegate.
Definition Delegate.h:362
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clear
void Clear() noexcept
Clear the target function.
Definition Delegate.h:440
+
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp
DelegateMemberSp(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition Delegate.h:347
DelegateLib
Definition Delegate.h:18
-
DelegateLib::MakeDelegate
DelegateFree< RetType(Args...)> MakeDelegate(RetType(*func)(Args... args))
Creates a delegate that binds to a free function.
Definition Delegate.h:539
+
DelegateLib::MakeDelegate
DelegateFree< RetType(Args...)> MakeDelegate(RetType(*func)(Args... args))
Creates a delegate that binds to a free function.
Definition Delegate.h:597
DelegateLib::DelegateFree
Definition Delegate.h:72
DelegateLib::Delegate
Definition Delegate.h:51
-
DelegateLib::DelegateMember
Definition Delegate.h:165
-
DelegateLib::DelegateMemberSp
Definition Delegate.h:288
+
DelegateLib::DelegateMember
Definition Delegate.h:179
+
DelegateLib::DelegateMemberSp
Definition Delegate.h:317
diff --git a/doxygen/html/_delegate_async_8h.html b/doxygen/html/_delegate_async_8h.html index dbb3dd6..e2abebc 100644 --- a/doxygen/html/_delegate_async_8h.html +++ b/doxygen/html/_delegate_async_8h.html @@ -122,7 +122,7 @@  DelegateFreeAsync<> class asynchronously invokes a free target function. More...
  class  DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>DelegateMemberAsync<> class asynchronously invokes a class member target function. @tprarm TClass The class type that contains the member function. More...
DelegateMemberAsync<> class asynchronously invokes a class member target function. More...
  class  DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>  DelegateMemberSpAsync<> class asynchronously invokes a std::shared_ptr target function. More...
diff --git a/doxygen/html/_delegate_async_8h_source.html b/doxygen/html/_delegate_async_8h_source.html index daf33a7..a0a7f0a 100644 --- a/doxygen/html/_delegate_async_8h_source.html +++ b/doxygen/html/_delegate_async_8h_source.html @@ -121,750 +121,787 @@
34public:
38 DelegateAsyncMsg(std::shared_ptr<IDelegateInvoker> invoker, Args... args) : DelegateMsg(invoker),
-
39 m_args(make_tuple_heap(m_heapMem, m_start, args...))
-
40 {
-
41 }
+
39 m_args(make_tuple_heap(m_heapMem, m_start, std::forward<Args>(args)...)) { }
+
40
+
41 virtual ~DelegateAsyncMsg() = default;
42
-
43 virtual ~DelegateAsyncMsg() = default;
-
44
-
47 std::tuple<Args...>& GetArgs() { return m_args; }
-
48
-
49private:
-
51 xlist<std::shared_ptr<heap_arg_deleter_base>> m_heapMem;
-
52
-
54 std::tuple<> m_start;
-
55
-
57 std::tuple<Args...> m_args;
-
58};
- -
59
-
60template <class R>
-
61struct DelegateFreeAsync; // Not defined
-
62
-
66template <class RetType, class... Args>
-
-
67class DelegateFreeAsync<RetType(Args...)> : public DelegateFree<RetType(Args...)>, public IDelegateInvoker {
-
68public:
-
69 typedef RetType(*FreeFunc)(Args...);
-
70 using ClassType = DelegateFreeAsync<RetType(Args...)>;
-
71 using BaseType = DelegateFree<RetType(Args...)>;
-
72
-
-
76 DelegateFreeAsync(FreeFunc func, DelegateThread& thread) :
-
77 BaseType(func), m_thread(thread) {
-
78 Bind(func, thread);
-
79 }
-
-
80
-
- -
87 BaseType(rhs), m_thread(rhs.m_thread) {
-
88 Assign(rhs);
-
89 }
-
-
90
-
91 DelegateFreeAsync() = delete;
-
92
-
-
99 void Bind(FreeFunc func, DelegateThread& thread) {
-
100 m_thread = thread;
-
101 BaseType::Bind(func);
-
102 }
-
-
103
-
104 // <common_code>
-
105
-
-
110 void Assign(const ClassType& rhs) {
-
111 m_thread = rhs.m_thread;
-
112 BaseType::Assign(rhs);
-
113 }
-
-
-
119 virtual ClassType* Clone() const override {
-
120 return new ClassType(*this);
-
121 }
-
-
122
-
- -
127 if (&rhs != this) {
-
128 BaseType::operator=(rhs);
-
129 Assign(rhs);
-
130 }
-
131 return *this;
-
132 }
-
-
133
-
-
137 virtual bool operator==(const DelegateBase& rhs) const override {
-
138 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
139 return derivedRhs &&
-
140 &m_thread == &derivedRhs->m_thread &&
-
141 BaseType::operator==(rhs);
-
142 }
-
-
143
-
-
158 virtual RetType operator()(Args... args) override {
-
159 // Synchronously invoke the target function?
-
160 if (this->GetSync())
-
161 {
-
162 // Invoke the target function directly
-
163 return BaseType::operator()(args...);
-
164 }
-
165 else
-
166 {
-
167 // Create a clone instance of this delegate
-
168 auto delegate = std::shared_ptr<ClassType>(Clone());
-
169
-
170 // Create a new message instance for sending to the destination thread
-
171 auto msg = std::make_shared<DelegateAsyncMsg<Args...>>(delegate, args...);
-
172
-
173 // Dispatch message onto the callback destination thread. DelegateInvoke()
-
174 // will be called by the destintation thread.
-
175 GetThread().DispatchDelegate(msg);
-
176
-
177 // Do not wait for destination thread return value from async function call
-
178 return RetType();
-
179
-
180 // Check if any argument is a shared_ptr with wrong usage
-
181 // std::shared_ptr reference arguments are not allowed with asynchronous delegates as the behavior is
-
182 // undefined. In other words:
-
183 // void MyFunc(std::shared_ptr<T> data) // Ok!
-
184 // void MyFunc(std::shared_ptr<T>& data) // Error if DelegateAsync or DelegateSpAsync target!
-
185 static_assert(!(std::disjunction_v<is_shared_ptr<Args>...> &&
-
186 (std::disjunction_v<std::is_lvalue_reference<Args>, std::is_pointer<Args>> || ...)),
-
187 "std::shared_ptr reference argument not allowed");
-
188 }
-
189 }
-
-
190
-
-
195 void AsyncInvoke(Args... args) {
-
196 operator()(args...);
-
197 }
-
-
198
+
45 std::tuple<Args...>& GetArgs() { return m_args; }
+
46
+
47private:
+
49 xlist<std::shared_ptr<heap_arg_deleter_base>> m_heapMem;
+
50
+
52 std::tuple<> m_start;
+
53
+
55 std::tuple<Args...> m_args;
+
56};
+
+
57
+
58template <class R>
+
59struct DelegateFreeAsync; // Not defined
+
60
+
64template <class RetType, class... Args>
+
+
65class DelegateFreeAsync<RetType(Args...)> : public DelegateFree<RetType(Args...)>, public IDelegateInvoker {
+
66public:
+
67 typedef RetType(*FreeFunc)(Args...);
+
68 using ClassType = DelegateFreeAsync<RetType(Args...)>;
+
69 using BaseType = DelegateFree<RetType(Args...)>;
+
70
+
+
74 DelegateFreeAsync(FreeFunc func, DelegateThread& thread) :
+
75 BaseType(func), m_thread(thread) {
+
76 Bind(func, thread);
+
77 }
+
+
78
+
+ +
85 BaseType(rhs), m_thread(rhs.m_thread) {
+
86 Assign(rhs);
+
87 }
+
+
88
+
+
91 DelegateFreeAsync(ClassType&& rhs) noexcept :
+
92 BaseType(rhs), m_thread(rhs.m_thread) {
+
93 }
+
+
94
+
95 DelegateFreeAsync() = delete;
+
96
+
+
103 void Bind(FreeFunc func, DelegateThread& thread) {
+
104 m_thread = thread;
+
105 BaseType::Bind(func);
+
106 }
+
+
107
+
108 // <common_code>
+
109
+
+
114 void Assign(const ClassType& rhs) {
+
115 m_thread = rhs.m_thread;
+
116 BaseType::Assign(rhs);
+
117 }
+
+
+
123 virtual ClassType* Clone() const override {
+
124 return new ClassType(*this);
+
125 }
+
+
126
+
+ +
131 if (&rhs != this) {
+
132 BaseType::operator=(rhs);
+
133 Assign(rhs);
+
134 }
+
135 return *this;
+
136 }
+
+
137
+
+
141 ClassType& operator=(ClassType&& rhs) noexcept {
+
142 if (&rhs != this) {
+
143 BaseType::operator=(std::move(rhs));
+
144 m_thread = rhs.m_thread; // Use the resource
+
145 }
+
146 return *this;
+
147 }
+
+
148
+
+
152 virtual bool operator==(const DelegateBase& rhs) const override {
+
153 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
154 return derivedRhs &&
+
155 &m_thread == &derivedRhs->m_thread &&
+
156 BaseType::operator==(rhs);
+
157 }
+
+
158
+
+
173 virtual RetType operator()(Args... args) override {
+
174 // Synchronously invoke the target function?
+
175 if (this->GetSync()) {
+
176 // Invoke the target function directly
+
177 return BaseType::operator()(std::forward<Args>(args)...);
+
178 } else {
+
179 // Create a clone instance of this delegate
+
180 auto delegate = std::shared_ptr<ClassType>(Clone());
+
181
+
182 // Create a new message instance for sending to the destination thread
+
183 auto msg = std::make_shared<DelegateAsyncMsg<Args...>>(delegate, std::forward<Args>(args)...);
+
184
+
185 // Dispatch message onto the callback destination thread. DelegateInvoke()
+
186 // will be called by the destintation thread.
+
187 GetThread().DispatchDelegate(msg);
+
188
+
189 // Do not wait for destination thread return value from async function call
+
190 return RetType();
+
191
+
192 // Check if any argument is a shared_ptr with wrong usage
+
193 // std::shared_ptr reference arguments are not allowed with asynchronous delegates as the behavior is
+
194 // undefined. In other words:
+
195 // void MyFunc(std::shared_ptr<T> data) // Ok!
+
196 // void MyFunc(std::shared_ptr<T>& data) // Error if DelegateAsync or DelegateSpAsync target!
+
197 static_assert(!(std::disjunction_v<is_shared_ptr<Args>...> &&
+
198 (std::disjunction_v<std::is_lvalue_reference<Args>, std::is_pointer<Args>> || ...)),
+
199 "std::shared_ptr reference argument not allowed");
+
200 }
+
201 }
+
+
202
-
206 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) {
-
207 // Typecast the base pointer to back correct derived to instance
-
208 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncMsg<Args...>>(msg);
-
209 if (delegateMsg == nullptr)
-
210 throw std::invalid_argument("Invalid DelegateAsyncMsg cast");
-
211
-
212 // Invoke the delegate function asynchronously
-
213 SetSync(true);
-
214
-
215 // Invoke the target function using the source thread supplied function arguments
-
216 std::apply(&BaseType::operator(),
-
217 std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
218 }
-
-
219
-
221 // @return The target thread.
-
222 DelegateThread& GetThread() { return m_thread; }
-
223
-
224protected:
-
228 bool GetSync() { return m_sync; }
-
229
-
232 void SetSync(bool sync) { m_sync = sync; }
-
233
-
234private:
-
236 DelegateThread& m_thread;
-
237
-
239 bool m_sync = false;
+
206 void AsyncInvoke(Args... args) {
+
207 operator()(std::forward<Args>(args)...);
+
208 }
+
+
209
+
+
217 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) {
+
218 // Typecast the base pointer to back correct derived to instance
+
219 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncMsg<Args...>>(msg);
+
220 if (delegateMsg == nullptr)
+
221 throw std::invalid_argument("Invalid DelegateAsyncMsg cast");
+
222
+
223 // Invoke the delegate function asynchronously
+
224 SetSync(true);
+
225
+
226 // Invoke the target function using the source thread supplied function arguments
+
227 std::apply(&BaseType::operator(),
+
228 std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
229 }
+
+
230
+
232 // @return The target thread.
+
233 DelegateThread& GetThread() noexcept { return m_thread; }
+
234
+
235protected:
+
239 bool GetSync() { return m_sync; }
240
-
241 // </common_code>
-
242};
- -
243
-
244template <class C, class R>
-
245struct DelegateMemberAsync; // Not defined
-
246
-
251template <class TClass, class RetType, class... Args>
-
-
252class DelegateMemberAsync<TClass, RetType(Args...)> : public DelegateMember<TClass, RetType(Args...)>, public IDelegateInvoker {
-
253public:
-
254 typedef TClass* ObjectPtr;
-
255 typedef RetType (TClass::*MemberFunc)(Args...);
-
256 typedef RetType (TClass::*ConstMemberFunc)(Args...) const;
-
257 using ClassType = DelegateMemberAsync<TClass, RetType(Args...)>;
-
258 using BaseType = DelegateMember<TClass, RetType(Args...)>;
-
259
-
-
264 DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread& thread) : BaseType(object, func), m_thread(thread)
-
265 { Bind(object, func, thread); }
-
-
266
-
-
271 DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) : BaseType(object, func), m_thread(thread)
-
272 { Bind(object, func, thread); }
-
-
273
-
- -
280 BaseType(rhs), m_thread(rhs.m_thread) {
-
281 Assign(rhs);
-
282 }
-
-
283
-
284 DelegateMemberAsync() = delete;
-
285
-
-
293 void Bind(ObjectPtr object, MemberFunc func, DelegateThread& thread) {
-
294 m_thread = thread;
-
295 BaseType::Bind(object, func);
-
296 }
-
-
297
-
-
305 void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) {
-
306 m_thread = thread;
-
307 BaseType::Bind(object, func);
-
308 }
-
-
309
-
310 // <common_code>
-
311
+
243 void SetSync(bool sync) { m_sync = sync; }
+
244
+
245private:
+
247 DelegateThread& m_thread;
+
248
+
250 bool m_sync = false;
+
251
+
252 // </common_code>
+
253};
+
+
254
+
255template <class C, class R>
+
256struct DelegateMemberAsync; // Not defined
+
257
+
262template <class TClass, class RetType, class... Args>
+
+
263class DelegateMemberAsync<TClass, RetType(Args...)> : public DelegateMember<TClass, RetType(Args...)>, public IDelegateInvoker {
+
264public:
+
265 typedef TClass* ObjectPtr;
+
266 typedef RetType (TClass::*MemberFunc)(Args...);
+
267 typedef RetType (TClass::*ConstMemberFunc)(Args...) const;
+
268 using ClassType = DelegateMemberAsync<TClass, RetType(Args...)>;
+
269 using BaseType = DelegateMember<TClass, RetType(Args...)>;
+
270
+
+
275 DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread& thread) : BaseType(object, func), m_thread(thread)
+
276 { Bind(object, func, thread); }
+
+
277
+
+
282 DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) : BaseType(object, func), m_thread(thread)
+
283 { Bind(object, func, thread); }
+
+
284
+
+ +
291 BaseType(rhs), m_thread(rhs.m_thread) {
+
292 Assign(rhs);
+
293 }
+
+
294
+
295 DelegateMemberAsync() = delete;
+
296
+
+
304 void Bind(ObjectPtr object, MemberFunc func, DelegateThread& thread) {
+
305 m_thread = thread;
+
306 BaseType::Bind(object, func);
+
307 }
+
+
308
-
316 void Assign(const ClassType& rhs) {
-
317 m_thread = rhs.m_thread;
-
318 BaseType::Assign(rhs);
+
316 void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) {
+
317 m_thread = thread;
+
318 BaseType::Bind(object, func);
319 }
-
-
325 virtual ClassType* Clone() const override {
-
326 return new ClassType(*this);
-
327 }
-
-
328
-
- -
333 if (&rhs != this) {
-
334 BaseType::operator=(rhs);
-
335 Assign(rhs);
-
336 }
-
337 return *this;
+
320
+
321 // <common_code>
+
322
+
+
327 void Assign(const ClassType& rhs) {
+
328 m_thread = rhs.m_thread;
+
329 BaseType::Assign(rhs);
+
330 }
+
+
+
336 virtual ClassType* Clone() const override {
+
337 return new ClassType(*this);
338 }
339
-
343 virtual bool operator==(const DelegateBase& rhs) const override {
-
344 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
345 return derivedRhs &&
-
346 &m_thread == &derivedRhs->m_thread &&
-
347 BaseType::operator==(rhs);
-
348 }
-
-
349
-
-
364 virtual RetType operator()(Args... args) override {
-
365 // Synchronously invoke the target function?
-
366 if (this->GetSync())
-
367 {
-
368 // Invoke the target function directly
-
369 return BaseType::operator()(args...);
-
370 }
-
371 else
-
372 {
-
373 // Create a clone instance of this delegate
-
374 auto delegate = std::shared_ptr<ClassType>(Clone());
-
375
-
376 // Create a new message instance for sending to the destination thread
-
377 auto msg = std::make_shared<DelegateAsyncMsg<Args...>>(delegate, args...);
-
378
-
379 // Dispatch message onto the callback destination thread. DelegateInvoke()
-
380 // will be called by the destintation thread.
-
381 GetThread().DispatchDelegate(msg);
-
382
-
383 // Do not wait for destination thread return value from async function call
-
384 return RetType();
-
385
-
386 // Check if any argument is a shared_ptr with wrong usage
-
387 // std::shared_ptr reference arguments are not allowed with asynchronous delegates as the behavior is
-
388 // undefined. In other words:
-
389 // void MyFunc(std::shared_ptr<T> data) // Ok!
-
390 // void MyFunc(std::shared_ptr<T>& data) // Error if DelegateAsync or DelegateSpAsync target!
-
391 static_assert(!(std::disjunction_v<is_shared_ptr<Args>...> &&
-
392 (std::disjunction_v<std::is_lvalue_reference<Args>, std::is_pointer<Args>> || ...)),
-
393 "std::shared_ptr reference argument not allowed");
-
394 }
-
395 }
-
-
396
-
-
401 void AsyncInvoke(Args... args) {
-
402 operator()(args...);
-
403 }
-
+ +
344 if (&rhs != this) {
+
345 BaseType::operator=(rhs);
+
346 Assign(rhs);
+
347 }
+
348 return *this;
+
349 }
+
+
350
+
+
354 ClassType& operator=(ClassType&& rhs) noexcept {
+
355 if (&rhs != this) {
+
356 BaseType::operator=(std::move(rhs));
+
357 m_thread = rhs.m_thread; // Use the resource
+
358 }
+
359 return *this;
+
360 }
+
+
361
+
+
365 virtual bool operator==(const DelegateBase& rhs) const override {
+
366 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
367 return derivedRhs &&
+
368 &m_thread == &derivedRhs->m_thread &&
+
369 BaseType::operator==(rhs);
+
370 }
+
+
371
+
+
386 virtual RetType operator()(Args... args) override {
+
387 // Synchronously invoke the target function?
+
388 if (this->GetSync()) {
+
389 // Invoke the target function directly
+
390 return BaseType::operator()(std::forward<Args>(args)...);
+
391 } else {
+
392 // Create a clone instance of this delegate
+
393 auto delegate = std::shared_ptr<ClassType>(Clone());
+
394
+
395 // Create a new message instance for sending to the destination thread
+
396 auto msg = std::make_shared<DelegateAsyncMsg<Args...>>(delegate, std::forward<Args>(args)...);
+
397
+
398 // Dispatch message onto the callback destination thread. DelegateInvoke()
+
399 // will be called by the destintation thread.
+
400 GetThread().DispatchDelegate(msg);
+
401
+
402 // Do not wait for destination thread return value from async function call
+
403 return RetType();
404
-
-
411 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) {
-
412 // Typecast the base pointer to back correct derived to instance
-
413 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncMsg<Args...>>(msg);
-
414 if (delegateMsg == nullptr)
-
415 throw std::invalid_argument("Invalid DelegateAsyncMsg cast");
-
416
-
417 // Invoke the delegate function asynchronously
-
418 SetSync(true);
-
419
-
420 // Invoke the target function using the source thread supplied function arguments
-
421 std::apply(&BaseType::operator(),
-
422 std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
423 }
-
-
424
-
426 // @return The target thread.
-
427 DelegateThread& GetThread() { return m_thread; }
-
428
-
429protected:
-
433 bool GetSync() { return m_sync; }
-
434
-
437 void SetSync(bool sync) { m_sync = sync; }
+
405 // Check if any argument is a shared_ptr with wrong usage
+
406 // std::shared_ptr reference arguments are not allowed with asynchronous delegates as the behavior is
+
407 // undefined. In other words:
+
408 // void MyFunc(std::shared_ptr<T> data) // Ok!
+
409 // void MyFunc(std::shared_ptr<T>& data) // Error if DelegateAsync or DelegateSpAsync target!
+
410 static_assert(!(std::disjunction_v<is_shared_ptr<Args>...> &&
+
411 (std::disjunction_v<std::is_lvalue_reference<Args>, std::is_pointer<Args>> || ...)),
+
412 "std::shared_ptr reference argument not allowed");
+
413 }
+
414 }
+
+
415
+
+
419 void AsyncInvoke(Args... args) {
+
420 operator()(std::forward<Args>(args)...);
+
421 }
+
+
422
+
+
430 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) {
+
431 // Typecast the base pointer to back correct derived to instance
+
432 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncMsg<Args...>>(msg);
+
433 if (delegateMsg == nullptr)
+
434 throw std::invalid_argument("Invalid DelegateAsyncMsg cast");
+
435
+
436 // Invoke the delegate function asynchronously
+
437 SetSync(true);
438
-
439private:
-
441 DelegateThread& m_thread;
-
442
-
444 bool m_sync = false;
-
445
-
446 // </common_code>
-
447};
-
-
448
-
449template <class C, class R>
-
450struct DelegateMemberSpAsync; // Not defined
-
451
-
456template <class TClass, class RetType, class... Args>
-
-
457class DelegateMemberSpAsync<TClass, RetType(Args...)> : public DelegateMemberSp<TClass, RetType(Args...)>, public IDelegateInvoker {
-
458public:
-
459 typedef std::shared_ptr<TClass> ObjectPtr;
-
460 typedef RetType(TClass::* MemberFunc)(Args...);
-
461 typedef RetType(TClass::* ConstMemberFunc)(Args...) const;
-
462 using ClassType = DelegateMemberSpAsync<TClass, RetType(Args...)>;
-
463 using BaseType = DelegateMemberSp<TClass, RetType(Args...)>;
+
439 // Invoke the target function using the source thread supplied function arguments
+
440 std::apply(&BaseType::operator(),
+
441 std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
442 }
+
+
443
+
445 // @return The target thread.
+
446 DelegateThread& GetThread() noexcept { return m_thread; }
+
447
+
448protected:
+
452 bool GetSync() { return m_sync; }
+
453
+
456 void SetSync(bool sync) { m_sync = sync; }
+
457
+
458private:
+
460 DelegateThread& m_thread;
+
461
+
463 bool m_sync = false;
464
-
-
469 DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread& thread) : BaseType(object, func), m_thread(thread) {
-
470 Bind(object, func, thread);
-
471 }
-
-
472
-
-
477 DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) : BaseType(object, func), m_thread(thread) {
-
478 Bind(object, func, thread);
-
479 }
-
-
480
-
- -
487 BaseType(rhs), m_thread(rhs.m_thread) {
-
488 Assign(rhs);
-
489 }
-
-
490
-
491 DelegateMemberSpAsync() = delete;
-
492
-
-
499 void Bind(ObjectPtr object, MemberFunc func, DelegateThread& thread) {
-
500 m_thread = thread;
-
501 BaseType::Bind(object, func);
-
502 }
-
-
503
-
-
511 void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) {
-
512 m_thread = thread;
-
513 BaseType::Bind(object, func);
-
514 }
-
-
515
-
516 // <common_code>
-
517
-
-
522 void Assign(const ClassType& rhs) {
-
523 m_thread = rhs.m_thread;
-
524 BaseType::Assign(rhs);
-
525 }
-
-
-
531 virtual ClassType* Clone() const override {
-
532 return new ClassType(*this);
+
465 // </common_code>
+
466};
+
+
467
+
468template <class C, class R>
+
469struct DelegateMemberSpAsync; // Not defined
+
470
+
475template <class TClass, class RetType, class... Args>
+
+
476class DelegateMemberSpAsync<TClass, RetType(Args...)> : public DelegateMemberSp<TClass, RetType(Args...)>, public IDelegateInvoker {
+
477public:
+
478 typedef std::shared_ptr<TClass> ObjectPtr;
+
479 typedef RetType(TClass::* MemberFunc)(Args...);
+
480 typedef RetType(TClass::* ConstMemberFunc)(Args...) const;
+
481 using ClassType = DelegateMemberSpAsync<TClass, RetType(Args...)>;
+
482 using BaseType = DelegateMemberSp<TClass, RetType(Args...)>;
+
483
+
+
488 DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread& thread) : BaseType(object, func), m_thread(thread) {
+
489 Bind(object, func, thread);
+
490 }
+
+
491
+
+
496 DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) : BaseType(object, func), m_thread(thread) {
+
497 Bind(object, func, thread);
+
498 }
+
+
499
+
+ +
506 BaseType(rhs), m_thread(rhs.m_thread) {
+
507 Assign(rhs);
+
508 }
+
+
509
+ +
511
+
+
518 void Bind(ObjectPtr object, MemberFunc func, DelegateThread& thread) {
+
519 m_thread = thread;
+
520 BaseType::Bind(object, func);
+
521 }
+
+
522
+
+
530 void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) {
+
531 m_thread = thread;
+
532 BaseType::Bind(object, func);
533 }
534
-
- -
539 if (&rhs != this) {
-
540 BaseType::operator=(rhs);
-
541 Assign(rhs);
-
542 }
-
543 return *this;
+
535 // <common_code>
+
536
+
+
541 void Assign(const ClassType& rhs) {
+
542 m_thread = rhs.m_thread;
+
543 BaseType::Assign(rhs);
544 }
-
545
-
-
549 virtual bool operator==(const DelegateBase& rhs) const override {
-
550 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
551 return derivedRhs &&
-
552 &m_thread == &derivedRhs->m_thread &&
-
553 BaseType::operator==(rhs);
-
554 }
-
-
555
-
-
570 virtual RetType operator()(Args... args) override {
-
571 // Synchronously invoke the target function?
-
572 if (this->GetSync())
-
573 {
-
574 // Invoke the target function directly
-
575 return BaseType::operator()(args...);
-
576 }
-
577 else
-
578 {
-
579 // Create a clone instance of this delegate
-
580 auto delegate = std::shared_ptr<ClassType>(Clone());
-
581
-
582 // Create a new message instance for sending to the destination thread
-
583 auto msg = std::make_shared<DelegateAsyncMsg<Args...>>(delegate, args...);
-
584
-
585 // Dispatch message onto the callback destination thread. DelegateInvoke()
-
586 // will be called by the destintation thread.
-
587 GetThread().DispatchDelegate(msg);
-
588
-
589 // Do not wait for destination thread return value from async function call
-
590 return RetType();
-
591
-
592 // Check if any argument is a shared_ptr with wrong usage
-
593 // std::shared_ptr reference arguments are not allowed with asynchronous delegates as the behavior is
-
594 // undefined. In other words:
-
595 // void MyFunc(std::shared_ptr<T> data) // Ok!
-
596 // void MyFunc(std::shared_ptr<T>& data) // Error if DelegateAsync or DelegateSpAsync target!
-
597 static_assert(!(std::disjunction_v<is_shared_ptr<Args>...> &&
-
598 (std::disjunction_v<std::is_lvalue_reference<Args>, std::is_pointer<Args>> || ...)),
-
599 "std::shared_ptr reference argument not allowed");
-
600 }
-
601 }
-
-
602
-
-
607 void AsyncInvoke(Args... args) {
-
608 operator()(args...);
-
609 }
-
-
610
-
-
617 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) {
-
618 // Typecast the base pointer to back correct derived to instance
-
619 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncMsg<Args...>>(msg);
-
620 if (delegateMsg == nullptr)
-
621 throw std::invalid_argument("Invalid DelegateAsyncMsg cast");
-
622
-
623 // Invoke the delegate function asynchronously
-
624 SetSync(true);
-
625
-
626 // Invoke the target function using the source thread supplied function arguments
-
627 std::apply(&BaseType::operator(),
-
628 std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
629 }
-
-
630
-
632 // @return The target thread.
-
633 DelegateThread& GetThread() { return m_thread; }
-
634
-
635protected:
-
639 bool GetSync() { return m_sync; }
-
640
-
643 void SetSync(bool sync) { m_sync = sync; }
-
644
-
645private:
-
647 DelegateThread& m_thread;
-
648
-
650 bool m_sync = false;
-
651
-
652 // </common_code>
-
653};
-
-
654
-
655template <class R>
-
656struct DelegateFunctionAsync; // Not defined
+
+
550 virtual ClassType* Clone() const override {
+
551 return new ClassType(*this);
+
552 }
+
+
553
+
+ +
558 if (&rhs != this) {
+
559 BaseType::operator=(rhs);
+
560 Assign(rhs);
+
561 }
+
562 return *this;
+
563 }
+
+
564
+
+
568 ClassType& operator=(ClassType&& rhs) noexcept {
+
569 if (&rhs != this) {
+
570 BaseType::operator=(std::move(rhs));
+
571 m_thread = rhs.m_thread; // Use the resource
+
572 }
+
573 return *this;
+
574 }
+
+
575
+
+
579 virtual bool operator==(const DelegateBase& rhs) const override {
+
580 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
581 return derivedRhs &&
+
582 &m_thread == &derivedRhs->m_thread &&
+
583 BaseType::operator==(rhs);
+
584 }
+
+
585
+
+
600 virtual RetType operator()(Args... args) override {
+
601 // Synchronously invoke the target function?
+
602 if (this->GetSync()) {
+
603 // Invoke the target function directly
+
604 return BaseType::operator()(std::forward<Args>(args)...);
+
605 } else {
+
606 // Create a clone instance of this delegate
+
607 auto delegate = std::shared_ptr<ClassType>(Clone());
+
608
+
609 // Create a new message instance for sending to the destination thread
+
610 auto msg = std::make_shared<DelegateAsyncMsg<Args...>>(delegate, std::forward<Args>(args)...);
+
611
+
612 // Dispatch message onto the callback destination thread. DelegateInvoke()
+
613 // will be called by the destintation thread.
+
614 GetThread().DispatchDelegate(msg);
+
615
+
616 // Do not wait for destination thread return value from async function call
+
617 return RetType();
+
618
+
619 // Check if any argument is a shared_ptr with wrong usage
+
620 // std::shared_ptr reference arguments are not allowed with asynchronous delegates as the behavior is
+
621 // undefined. In other words:
+
622 // void MyFunc(std::shared_ptr<T> data) // Ok!
+
623 // void MyFunc(std::shared_ptr<T>& data) // Error if DelegateAsync or DelegateSpAsync target!
+
624 static_assert(!(std::disjunction_v<is_shared_ptr<Args>...> &&
+
625 (std::disjunction_v<std::is_lvalue_reference<Args>, std::is_pointer<Args>> || ...)),
+
626 "std::shared_ptr reference argument not allowed");
+
627 }
+
628 }
+
+
629
+
+
633 void AsyncInvoke(Args... args) {
+
634 operator()(std::forward<Args>(args)...);
+
635 }
+
+
636
+
+
644 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) {
+
645 // Typecast the base pointer to back correct derived to instance
+
646 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncMsg<Args...>>(msg);
+
647 if (delegateMsg == nullptr)
+
648 throw std::invalid_argument("Invalid DelegateAsyncMsg cast");
+
649
+
650 // Invoke the delegate function asynchronously
+
651 SetSync(true);
+
652
+
653 // Invoke the target function using the source thread supplied function arguments
+
654 std::apply(&BaseType::operator(),
+
655 std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
656 }
+
657
-
667template <class RetType, class... Args>
-
-
668class DelegateFunctionAsync<RetType(Args...)> : public DelegateFunction<RetType(Args...)>, public IDelegateInvoker {
-
669public:
-
670 using FunctionType = std::function<RetType(Args...)>;
-
671 using ClassType = DelegateFunctionAsync<RetType(Args...)>;
-
672 using BaseType = DelegateFunction<RetType(Args...)>;
-
673
-
- -
678 BaseType(func), m_thread(thread) {
-
679 Bind(func, thread);
-
680 }
+
659 // @return The target thread.
+
660 DelegateThread& GetThread() noexcept { return m_thread; }
+
661
+
662protected:
+
666 bool GetSync() { return m_sync; }
+
667
+
670 void SetSync(bool sync) { m_sync = sync; }
+
671
+
672private:
+
674 DelegateThread& m_thread;
+
675
+
677 bool m_sync = false;
+
678
+
679 // </common_code>
+
680};
681
-
- -
688 BaseType(rhs), m_thread(rhs.m_thread) {
-
689 Assign(rhs);
-
690 }
-
-
691
- -
693
-
-
700 void Bind(FunctionType func, DelegateThread& thread) {
-
701 m_thread = thread;
-
702 BaseType::Bind(func);
-
703 }
-
-
704
-
705 // <common_code>
-
706
-
-
711 void Assign(const ClassType& rhs) {
-
712 m_thread = rhs.m_thread;
-
713 BaseType::Assign(rhs);
-
714 }
-
-
-
720 virtual ClassType* Clone() const override {
-
721 return new ClassType(*this);
-
722 }
-
-
723
+
682template <class R>
+
683struct DelegateFunctionAsync; // Not defined
+
684
+
694template <class RetType, class... Args>
+
+
695class DelegateFunctionAsync<RetType(Args...)> : public DelegateFunction<RetType(Args...)>, public IDelegateInvoker {
+
696public:
+
697 using FunctionType = std::function<RetType(Args...)>;
+
698 using ClassType = DelegateFunctionAsync<RetType(Args...)>;
+
699 using BaseType = DelegateFunction<RetType(Args...)>;
+
700
+
+ +
705 BaseType(func), m_thread(thread) {
+
706 Bind(func, thread);
+
707 }
+
+
708
+
+ +
715 BaseType(rhs), m_thread(rhs.m_thread) {
+
716 Assign(rhs);
+
717 }
+
+
718
+ +
720
- -
728 if (&rhs != this) {
-
729 BaseType::operator=(rhs);
-
730 Assign(rhs);
-
731 }
-
732 return *this;
-
733 }
-
-
734
+
727 void Bind(FunctionType func, DelegateThread& thread) {
+
728 m_thread = thread;
+
729 BaseType::Bind(func);
+
730 }
+
+
731
+
732 // <common_code>
+
733
-
738 virtual bool operator==(const DelegateBase& rhs) const override {
-
739 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
740 return derivedRhs &&
-
741 &m_thread == &derivedRhs->m_thread &&
-
742 BaseType::operator==(rhs);
-
743 }
-
-
744
-
-
759 virtual RetType operator()(Args... args) override {
-
760 // Synchronously invoke the target function?
-
761 if (this->GetSync())
-
762 {
-
763 // Invoke the target function directly
-
764 return BaseType::operator()(args...);
-
765 }
-
766 else
-
767 {
-
768 // Create a clone instance of this delegate
-
769 auto delegate = std::shared_ptr<ClassType>(Clone());
-
770
-
771 // Create a new message instance for sending to the destination thread
-
772 auto msg = std::make_shared<DelegateAsyncMsg<Args...>>(delegate, args...);
-
773
-
774 // Dispatch message onto the callback destination thread. DelegateInvoke()
-
775 // will be called by the destintation thread.
-
776 GetThread().DispatchDelegate(msg);
-
777
-
778 // Do not wait for destination thread return value from async function call
-
779 return RetType();
-
780
-
781 // Check if any argument is a shared_ptr with wrong usage
-
782 // std::shared_ptr reference arguments are not allowed with asynchronous delegates as the behavior is
-
783 // undefined. In other words:
-
784 // void MyFunc(std::shared_ptr<T> data) // Ok!
-
785 // void MyFunc(std::shared_ptr<T>& data) // Error if DelegateAsync or DelegateSpAsync target!
-
786 static_assert(!(std::disjunction_v<is_shared_ptr<Args>...> &&
-
787 (std::disjunction_v<std::is_lvalue_reference<Args>, std::is_pointer<Args>> || ...)),
-
788 "std::shared_ptr reference argument not allowed");
-
789 }
-
790 }
-
-
791
-
-
796 void AsyncInvoke(Args... args) {
-
797 operator()(args...);
-
798 }
-
-
799
-
-
806 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) {
-
807 // Typecast the base pointer to back correct derived to instance
-
808 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncMsg<Args...>>(msg);
-
809 if (delegateMsg == nullptr)
-
810 throw std::invalid_argument("Invalid DelegateAsyncMsg cast");
-
811
-
812 // Invoke the delegate function asynchronously
-
813 SetSync(true);
-
814
-
815 // Invoke the target function using the source thread supplied function arguments
-
816 std::apply(&BaseType::operator(),
-
817 std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
818 }
-
-
819
-
821 // @return The target thread.
-
822 DelegateThread& GetThread() { return m_thread; }
-
823
-
824protected:
-
828 bool GetSync() { return m_sync; }
-
829
-
832 void SetSync(bool sync) { m_sync = sync; }
+
738 void Assign(const ClassType& rhs) {
+
739 m_thread = rhs.m_thread;
+
740 BaseType::Assign(rhs);
+
741 }
+
+
+
747 virtual ClassType* Clone() const override {
+
748 return new ClassType(*this);
+
749 }
+
+
750
+
+ +
755 if (&rhs != this) {
+
756 BaseType::operator=(rhs);
+
757 Assign(rhs);
+
758 }
+
759 return *this;
+
760 }
+
+
761
+
+
765 ClassType& operator=(ClassType&& rhs) noexcept {
+
766 if (&rhs != this) {
+
767 BaseType::operator=(std::move(rhs));
+
768 m_thread = rhs.m_thread; // Use the resource
+
769 }
+
770 return *this;
+
771 }
+
+
772
+
+
776 virtual bool operator==(const DelegateBase& rhs) const override {
+
777 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
778 return derivedRhs &&
+
779 &m_thread == &derivedRhs->m_thread &&
+
780 BaseType::operator==(rhs);
+
781 }
+
+
782
+
+
797 virtual RetType operator()(Args... args) override {
+
798 // Synchronously invoke the target function?
+
799 if (this->GetSync()) {
+
800 // Invoke the target function directly
+
801 return BaseType::operator()(std::forward<Args>(args)...);
+
802 } else {
+
803 // Create a clone instance of this delegate
+
804 auto delegate = std::shared_ptr<ClassType>(Clone());
+
805
+
806 // Create a new message instance for sending to the destination thread
+
807 auto msg = std::make_shared<DelegateAsyncMsg<Args...>>(delegate, std::forward<Args>(args)...);
+
808
+
809 // Dispatch message onto the callback destination thread. DelegateInvoke()
+
810 // will be called by the destintation thread.
+
811 GetThread().DispatchDelegate(msg);
+
812
+
813 // Do not wait for destination thread return value from async function call
+
814 return RetType();
+
815
+
816 // Check if any argument is a shared_ptr with wrong usage
+
817 // std::shared_ptr reference arguments are not allowed with asynchronous delegates as the behavior is
+
818 // undefined. In other words:
+
819 // void MyFunc(std::shared_ptr<T> data) // Ok!
+
820 // void MyFunc(std::shared_ptr<T>& data) // Error if DelegateAsync or DelegateSpAsync target!
+
821 static_assert(!(std::disjunction_v<is_shared_ptr<Args>...> &&
+
822 (std::disjunction_v<std::is_lvalue_reference<Args>, std::is_pointer<Args>> || ...)),
+
823 "std::shared_ptr reference argument not allowed");
+
824 }
+
825 }
+
+
826
+
+
830 void AsyncInvoke(Args... args) {
+
831 operator()(std::forward<Args>(args)...);
+
832 }
+
833
-
834private:
-
836 DelegateThread& m_thread;
-
837
-
839 bool m_sync = false;
-
840
-
841 // </common_code>
-
842};
-
-
843
-
850template <class RetType, class... Args>
-
-
851DelegateFreeAsync<RetType(Args...)> MakeDelegate(RetType(*func)(Args... args), DelegateThread& thread) {
-
852 return DelegateFreeAsync<RetType(Args...)>(func, thread);
-
853}
+
+
841 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) {
+
842 // Typecast the base pointer to back correct derived to instance
+
843 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncMsg<Args...>>(msg);
+
844 if (delegateMsg == nullptr)
+
845 throw std::invalid_argument("Invalid DelegateAsyncMsg cast");
+
846
+
847 // Invoke the delegate function asynchronously
+
848 SetSync(true);
+
849
+
850 // Invoke the target function using the source thread supplied function arguments
+
851 std::apply(&BaseType::operator(),
+
852 std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
853 }
854
-
863template <class TClass, class RetType, class... Args>
-
-
864DelegateMemberAsync<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::* func)(Args... args), DelegateThread& thread) {
-
865 return DelegateMemberAsync<TClass, RetType(Args...)>(object, func, thread);
-
866}
-
-
867
-
876template <class TClass, class RetType, class... Args>
-
877DelegateMemberAsync<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::* func)(Args... args) const, DelegateThread& thread) {
-
878 return DelegateMemberAsync<TClass, RetType(Args...)>(object, func, thread);
-
879}
-
880
-
889template <class TClass, class RetVal, class... Args>
-
-
890DelegateMemberSpAsync<TClass, RetVal(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetVal(TClass::* func)(Args... args), DelegateThread& thread) {
-
891 return DelegateMemberSpAsync<TClass, RetVal(Args...)>(object, func, thread);
-
892}
-
-
893
-
894
-
903template <class TClass, class RetVal, class... Args>
-
904DelegateMemberSpAsync<TClass, RetVal(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetVal(TClass::* func)(Args... args) const, DelegateThread& thread) {
-
905 return DelegateMemberSpAsync<TClass, RetVal(Args...)>(object, func, thread);
-
906}
-
907
-
914template <class RetType, class... Args>
-
-
915DelegateFunctionAsync<RetType(Args...)> MakeDelegate(std::function<RetType(Args...)> func, DelegateThread& thread) {
-
916 return DelegateFunctionAsync<RetType(Args...)>(func, thread);
-
917}
-
-
918
-
919}
-
920
-
921#endif
+
856 // @return The target thread.
+
857 DelegateThread& GetThread() noexcept { return m_thread; }
+
858
+
859protected:
+
863 bool GetSync() { return m_sync; }
+
864
+
867 void SetSync(bool sync) { m_sync = sync; }
+
868
+
869private:
+
871 DelegateThread& m_thread;
+
872
+
874 bool m_sync = false;
+
875
+
876 // </common_code>
+
877};
+
+
878
+
885template <class RetType, class... Args>
+
+
886DelegateFreeAsync<RetType(Args...)> MakeDelegate(RetType(*func)(Args... args), DelegateThread& thread) {
+
887 return DelegateFreeAsync<RetType(Args...)>(func, thread);
+
888}
+
+
889
+
898template <class TClass, class RetType, class... Args>
+
+
899DelegateMemberAsync<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::* func)(Args... args), DelegateThread& thread) {
+
900 return DelegateMemberAsync<TClass, RetType(Args...)>(object, func, thread);
+
901}
+
+
902
+
911template <class TClass, class RetType, class... Args>
+
912DelegateMemberAsync<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::* func)(Args... args) const, DelegateThread& thread) {
+
913 return DelegateMemberAsync<TClass, RetType(Args...)>(object, func, thread);
+
914}
+
915
+
924template <class TClass, class RetVal, class... Args>
+
+
925DelegateMemberSpAsync<TClass, RetVal(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetVal(TClass::* func)(Args... args), DelegateThread& thread) {
+
926 return DelegateMemberSpAsync<TClass, RetVal(Args...)>(object, func, thread);
+
927}
+
+
928
+
929
+
938template <class TClass, class RetVal, class... Args>
+
939DelegateMemberSpAsync<TClass, RetVal(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetVal(TClass::* func)(Args... args) const, DelegateThread& thread) {
+
940 return DelegateMemberSpAsync<TClass, RetVal(Args...)>(object, func, thread);
+
941}
+
942
+
949template <class RetType, class... Args>
+
+
950DelegateFunctionAsync<RetType(Args...)> MakeDelegate(std::function<RetType(Args...)> func, DelegateThread& thread) {
+
951 return DelegateFunctionAsync<RetType(Args...)>(func, thread);
+
952}
+
+
953
+
954}
+
955
+
956#endif
Delegate series of classes are used to invoke a function synchronously.
Delegate inter-thread invoker base class.
std::list< T, Alloc > xlist
Definition DelegateOpt.h:19
A base class for a delegate enabled execution thread.
Stores all function arguments suitable for non-blocking asynchronous calls. Argument data is stored i...
Definition DelegateAsync.h:33
-
std::tuple< Args... > & GetArgs()
Definition DelegateAsync.h:47
+
std::tuple< Args... > & GetArgs()
Definition DelegateAsync.h:45
DelegateAsyncMsg(std::shared_ptr< IDelegateInvoker > invoker, Args... args)
Definition DelegateAsync.h:38
virtual ~DelegateAsyncMsg()=default
Non-template base class for all delegates.
Definition Delegate.h:21
DelegateFree<> class synchronously invokes a free target function.
Definition Delegate.h:78
-
DelegateFreeAsync<> class asynchronously invokes a free target function.
Definition DelegateAsync.h:67
-
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg)
Invoke the delegate function on the destination thread. Called by the destintation thread.
Definition DelegateAsync.h:206
-
void AsyncInvoke(Args... args)
Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
Definition DelegateAsync.h:195
-
DelegateThread & GetThread()
Get the destination thread that the target function is invoked on.
Definition DelegateAsync.h:222
-
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsync.h:126
-
bool GetSync()
Get the synchronous target invoke flag.
Definition DelegateAsync.h:228
+
DelegateFreeAsync<> class asynchronously invokes a free target function.
Definition DelegateAsync.h:65
+
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg)
Invoke the delegate function on the destination thread. Called by the destintation thread.
Definition DelegateAsync.h:217
+
void AsyncInvoke(Args... args)
Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
Definition DelegateAsync.h:206
+
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsync.h:130
+
bool GetSync()
Get the synchronous target invoke flag.
Definition DelegateAsync.h:239
DelegateFreeAsync()=delete
-
virtual RetType operator()(Args... args) override
Invoke the bound delegate function asynchronously. Called by the source thread.
Definition DelegateAsync.h:158
-
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsync.h:110
-
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsync.h:137
-
DelegateFreeAsync(FreeFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:76
-
void Bind(FreeFunc func, DelegateThread &thread)
Bind a free function to the delegate.
Definition DelegateAsync.h:99
-
void SetSync(bool sync)
Set the synchronous target invoke flag.
Definition DelegateAsync.h:232
-
DelegateFreeAsync(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition DelegateAsync.h:86
-
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsync.h:119
-
DelegateFunction<> class synchronously invokes a std::function target function.
Definition Delegate.h:435
-
DelegateFunctionAsync<> class asynchronously invokes a std::function target function.
Definition DelegateAsync.h:668
-
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsync.h:720
-
virtual RetType operator()(Args... args) override
Invoke the bound delegate function asynchronously.
Definition DelegateAsync.h:759
-
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsync.h:727
-
bool GetSync()
Get the synchronous target invoke flag.
Definition DelegateAsync.h:828
-
DelegateFunctionAsync(const ClassType &rhs)
Creates a copy of the current object.
Definition DelegateAsync.h:687
-
std::function< RetType(Args...)> FunctionType
Definition DelegateAsync.h:670
-
DelegateFunctionAsync(FunctionType func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:677
-
DelegateThread & GetThread()
Get the destination thread that the target function is invoked on.
Definition DelegateAsync.h:822
-
void Bind(FunctionType func, DelegateThread &thread)
Bind a std::function to the delegate.
Definition DelegateAsync.h:700
-
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg)
Invoke the delegate function on the destination thread.
Definition DelegateAsync.h:806
-
void AsyncInvoke(Args... args)
Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
Definition DelegateAsync.h:796
-
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsync.h:738
-
void SetSync(bool sync)
Set the synchronous target invoke flag.
Definition DelegateAsync.h:832
+
DelegateFreeAsync(ClassType &&rhs) noexcept
Move constructor that transfers ownership of resources.
Definition DelegateAsync.h:91
+
virtual RetType operator()(Args... args) override
Invoke the bound delegate function asynchronously. Called by the source thread.
Definition DelegateAsync.h:173
+
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsync.h:114
+
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsync.h:152
+
DelegateFreeAsync(FreeFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:74
+
void Bind(FreeFunc func, DelegateThread &thread)
Bind a free function to the delegate.
Definition DelegateAsync.h:103
+
DelegateThread & GetThread() noexcept
Get the destination thread that the target function is invoked on.
Definition DelegateAsync.h:233
+
void SetSync(bool sync)
Set the synchronous target invoke flag.
Definition DelegateAsync.h:243
+
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition DelegateAsync.h:141
+
DelegateFreeAsync(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition DelegateAsync.h:84
+
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsync.h:123
+
DelegateFunction<> class synchronously invokes a std::function target function.
Definition Delegate.h:479
+
DelegateFunctionAsync<> class asynchronously invokes a std::function target function.
Definition DelegateAsync.h:695
+
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsync.h:747
+
virtual RetType operator()(Args... args) override
Invoke the bound delegate function asynchronously. Called by the source thread.
Definition DelegateAsync.h:797
+
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsync.h:754
+
bool GetSync()
Get the synchronous target invoke flag.
Definition DelegateAsync.h:863
+
DelegateFunctionAsync(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition DelegateAsync.h:714
+
std::function< RetType(Args...)> FunctionType
Definition DelegateAsync.h:697
+
DelegateFunctionAsync(FunctionType func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:704
+
void Bind(FunctionType func, DelegateThread &thread)
Bind a std::function to the delegate.
Definition DelegateAsync.h:727
+
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg)
Invoke the delegate function on the destination thread. Called by the destintation thread.
Definition DelegateAsync.h:841
+
void AsyncInvoke(Args... args)
Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
Definition DelegateAsync.h:830
+
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsync.h:776
+
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition DelegateAsync.h:765
+
void SetSync(bool sync)
Set the synchronous target invoke flag.
Definition DelegateAsync.h:867
DelegateFunctionAsync()=delete
-
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsync.h:711
-
Definition Delegate.h:411
-
DelegateMember<> class synchronously invokes a class member target function using a class object poin...
Definition Delegate.h:173
-
DelegateMemberAsync<> class asynchronously invokes a class member target function....
Definition DelegateAsync.h:252
-
void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Bind a member function to the delegate.
Definition DelegateAsync.h:305
-
DelegateMemberAsync(const ClassType &rhs)
Creates a copy of the current object.
Definition DelegateAsync.h:279
-
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsync.h:343
-
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsync.h:332
+
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsync.h:738
+
DelegateThread & GetThread() noexcept
Get the destination thread that the target function is invoked on.
Definition DelegateAsync.h:857
+
Definition Delegate.h:455
+
DelegateMember<> class synchronously invokes a class member target function using a class object poin...
Definition Delegate.h:187
+
DelegateMemberAsync<> class asynchronously invokes a class member target function.
Definition DelegateAsync.h:263
+
void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Bind a member function to the delegate.
Definition DelegateAsync.h:316
+
DelegateMemberAsync(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition DelegateAsync.h:290
+
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsync.h:365
+
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsync.h:343
DelegateMemberAsync()=delete
-
void AsyncInvoke(Args... args)
Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
Definition DelegateAsync.h:401
-
DelegateThread & GetThread()
Get the destination thread that the target function is invoked on.
Definition DelegateAsync.h:427
-
DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:271
-
DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:264
-
void SetSync(bool sync)
Set the synchronous target invoke flag.
Definition DelegateAsync.h:437
-
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg)
Invoke the delegate function on the destination thread.
Definition DelegateAsync.h:411
-
virtual RetType operator()(Args... args) override
Invoke the bound delegate function asynchronously.
Definition DelegateAsync.h:364
-
void Bind(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Bind a const member function to the delegate.
Definition DelegateAsync.h:293
-
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsync.h:316
-
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsync.h:325
-
TClass * ObjectPtr
Definition DelegateAsync.h:254
-
bool GetSync()
Get the synchronous target invoke flag.
Definition DelegateAsync.h:433
-
DelegateMemberSp<> class synchronously invokes a class member target function using a std::shared_ptr...
Definition Delegate.h:296
-
DelegateMemberSpAsync<> class asynchronously invokes a std::shared_ptr target function.
Definition DelegateAsync.h:457
-
DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:477
-
std::shared_ptr< TClass > ObjectPtr
Definition DelegateAsync.h:459
-
void SetSync(bool sync)
Set the synchronous target invoke flag.
Definition DelegateAsync.h:643
-
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg)
Invoke the delegate function on the destination thread.
Definition DelegateAsync.h:617
-
virtual RetType operator()(Args... args) override
Invoke the bound delegate function asynchronously.
Definition DelegateAsync.h:570
-
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsync.h:522
-
bool GetSync()
Get the synchronous target invoke flag.
Definition DelegateAsync.h:639
-
void Bind(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Bind a const member function to the delegate.
Definition DelegateAsync.h:499
-
DelegateMemberSpAsync(const ClassType &rhs)
Creates a copy of the current object.
Definition DelegateAsync.h:486
-
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsync.h:549
-
void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Bind a const member function to the delegate.
Definition DelegateAsync.h:511
+
void AsyncInvoke(Args... args)
Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
Definition DelegateAsync.h:419
+
DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:282
+
DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:275
+
void SetSync(bool sync)
Set the synchronous target invoke flag.
Definition DelegateAsync.h:456
+
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg)
Invoke the delegate function on the destination thread. Called by the destintation thread.
Definition DelegateAsync.h:430
+
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition DelegateAsync.h:354
+
virtual RetType operator()(Args... args) override
Invoke the bound delegate function asynchronously. Called by the source thread.
Definition DelegateAsync.h:386
+
void Bind(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Bind a const member function to the delegate.
Definition DelegateAsync.h:304
+
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsync.h:327
+
DelegateThread & GetThread() noexcept
Get the destination thread that the target function is invoked on.
Definition DelegateAsync.h:446
+
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsync.h:336
+
TClass * ObjectPtr
Definition DelegateAsync.h:265
+
bool GetSync()
Get the synchronous target invoke flag.
Definition DelegateAsync.h:452
+
DelegateMemberSp<> class synchronously invokes a class member target function using a std::shared_ptr...
Definition Delegate.h:325
+
DelegateMemberSpAsync<> class asynchronously invokes a std::shared_ptr target function.
Definition DelegateAsync.h:476
+
DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:496
+
std::shared_ptr< TClass > ObjectPtr
Definition DelegateAsync.h:478
+
void SetSync(bool sync)
Set the synchronous target invoke flag.
Definition DelegateAsync.h:670
+
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg)
Invoke the delegate function on the destination thread. Called by the destintation thread.
Definition DelegateAsync.h:644
+
virtual RetType operator()(Args... args) override
Invoke the bound delegate function asynchronously. Called by the source thread.
Definition DelegateAsync.h:600
+
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsync.h:541
+
bool GetSync()
Get the synchronous target invoke flag.
Definition DelegateAsync.h:666
+
void Bind(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Bind a const member function to the delegate.
Definition DelegateAsync.h:518
+
DelegateMemberSpAsync(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition DelegateAsync.h:505
+
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition DelegateAsync.h:568
+
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsync.h:579
+
void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Bind a const member function to the delegate.
Definition DelegateAsync.h:530
DelegateMemberSpAsync()=delete
-
DelegateThread & GetThread()
Get the destination thread that the target function is invoked on.
Definition DelegateAsync.h:633
-
void AsyncInvoke(Args... args)
Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
Definition DelegateAsync.h:607
-
DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:469
-
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsync.h:538
-
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsync.h:531
+
void AsyncInvoke(Args... args)
Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
Definition DelegateAsync.h:633
+
DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Constructor to create a class instance.
Definition DelegateAsync.h:488
+
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsync.h:557
+
DelegateThread & GetThread() noexcept
Get the destination thread that the target function is invoked on.
Definition DelegateAsync.h:660
+
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsync.h:550
Base class for all delegate inter-thread messages.
Definition DelegateMsg.h:22
Definition DelegateThread.h:16
Abstract base class to support asynchronous delegate function invoke on destination thread of control...
Definition DelegateInvoker.h:27
Definition Delegate.h:18
-
DelegateFree< RetType(Args...)> MakeDelegate(RetType(*func)(Args... args))
Creates a delegate that binds to a free function.
Definition Delegate.h:539
+
DelegateFree< RetType(Args...)> MakeDelegate(RetType(*func)(Args... args))
Creates a delegate that binds to a free function.
Definition Delegate.h:597
auto make_tuple_heap(xlist< std::shared_ptr< heap_arg_deleter_base > > &heapArgs, std::tuple< Ts... > tup)
Terminate the template metaprogramming argument loop. This function is called when there are no more ...
Definition make_tuple_heap.h:178
-
Definition DelegateAsync.h:61
+
Definition DelegateAsync.h:59
Definition Delegate.h:72
-
Definition DelegateAsync.h:656
-
Definition DelegateAsync.h:245
-
Definition Delegate.h:165
-
Definition DelegateAsync.h:450
-
Definition Delegate.h:288
+
Definition DelegateAsync.h:683
+
Definition DelegateAsync.h:256
+
Definition Delegate.h:179
+
Definition DelegateAsync.h:469
+
Definition Delegate.h:317
diff --git a/doxygen/html/_delegate_async_wait_8h_source.html b/doxygen/html/_delegate_async_wait_8h_source.html index 747f307..acdf9c9 100644 --- a/doxygen/html/_delegate_async_wait_8h_source.html +++ b/doxygen/html/_delegate_async_wait_8h_source.html @@ -126,7 +126,7 @@
57public:
61 DelegateAsyncWaitMsg(std::shared_ptr<IDelegateInvoker> invoker, Args... args) : DelegateMsg(invoker),
-
62 m_args(args...)
+
62 m_args(std::forward<Args>(args)...)
63 {
64 }
@@ -168,7 +168,7 @@
120 using BaseType = DelegateFreeAsync<RetType(Args...)>;
121
-
127 DelegateFreeAsyncWait(FreeFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) :
+
127 DelegateFreeAsyncWait(FreeFunc func, DelegateThread& thread, std::chrono::milliseconds timeout = WAIT_INFINITE) :
128 BaseType(func, thread), m_timeout(timeout) {
129 Bind(func, thread);
130 }
@@ -181,776 +181,802 @@
140 }
141
-
142 DelegateFreeAsyncWait() = delete;
-
143
-
-
150 void Bind(FreeFunc func, DelegateThread& thread) {
-
151 BaseType::Bind(func, thread);
-
152 }
-
-
153
-
154 // <common_code>
-
155
-
-
160 void Assign(const ClassType& rhs) {
-
161 m_timeout = rhs.m_timeout;
-
162 BaseType::Assign(rhs);
-
163 }
-
-
164
-
-
170 virtual ClassType* Clone() const override {
-
171 return new ClassType(*this);
-
172 }
-
-
173
-
-
177 ClassType& operator=(const ClassType& rhs) {
-
178 if (&rhs != this) {
-
179 BaseType::operator=(rhs);
-
180 Assign(rhs);
-
181 }
-
182 return *this;
-
183 }
-
-
184
-
-
188 virtual bool operator==(const DelegateBase& rhs) const override {
-
189 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
190 return derivedRhs &&
-
191 m_timeout == derivedRhs->m_timeout &&
-
192 BaseType::operator==(rhs);
-
193 }
-
-
194
-
-
216 virtual RetType operator()(Args... args) override {
-
217 // Synchronously invoke the target function?
-
218 if (this->GetSync())
-
219 {
-
220 // Invoke the target function directly
-
221 return BaseType::operator()(args...);
-
222 }
-
223 else
-
224 {
-
225 // Create a clone instance of this delegate
-
226 auto delegate = std::shared_ptr<ClassType>(Clone());
-
227
-
228 // Create a new message instance for sending to the destination thread.
-
229 auto msg = std::make_shared<DelegateAsyncWaitMsg<Args...>>(delegate, args...);
-
230 msg->SetInvokerWaiting(true);
-
231
-
232 // Dispatch message onto the callback destination thread. DelegateInvoke()
-
233 // will be called by the destination thread.
-
234 this->GetThread().DispatchDelegate(msg);
-
235
-
236 // Wait for destination thread to execute the delegate function and get return value
-
237 if ((m_success = msg->GetSema().Wait(m_timeout)))
-
238 m_retVal = delegate->m_retVal;
-
239
-
240 // Protect data shared between source and destination threads
-
241 const std::lock_guard<std::mutex> lock(msg->GetLock());
-
242
-
243 // Set flag that source is not waiting anymore
-
244 msg->SetInvokerWaiting(false);
+
+ +
145 BaseType(rhs), m_timeout(rhs.m_timeout) {
+
146 }
+
+
147
+
148 DelegateFreeAsyncWait() = delete;
+
149
+
+
156 void Bind(FreeFunc func, DelegateThread& thread) {
+
157 BaseType::Bind(func, thread);
+
158 }
+
+
159
+
160 // <common_code>
+
161
+
+
166 void Assign(const ClassType& rhs) {
+
167 m_timeout = rhs.m_timeout;
+
168 BaseType::Assign(rhs);
+
169 }
+
+
170
+
+
176 virtual ClassType* Clone() const override {
+
177 return new ClassType(*this);
+
178 }
+
+
179
+
+ +
184 if (&rhs != this) {
+
185 BaseType::operator=(rhs);
+
186 Assign(rhs);
+
187 }
+
188 return *this;
+
189 }
+
+
190
+
+
194 ClassType& operator=(ClassType&& rhs) noexcept {
+
195 if (&rhs != this) {
+
196 BaseType::operator=(std::move(rhs));
+
197 m_timeout = rhs.m_timeout; // Use the resource
+
198 }
+
199 return *this;
+
200 }
+
+
201
+
+
205 virtual bool operator==(const DelegateBase& rhs) const override {
+
206 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
207 return derivedRhs &&
+
208 m_timeout == derivedRhs->m_timeout &&
+
209 BaseType::operator==(rhs);
+
210 }
+
+
211
+
+
233 virtual RetType operator()(Args... args) override {
+
234 // Synchronously invoke the target function?
+
235 if (this->GetSync()) {
+
236 // Invoke the target function directly
+
237 return BaseType::operator()(std::forward<Args>(args)...);
+
238 } else {
+
239 // Create a clone instance of this delegate
+
240 auto delegate = std::shared_ptr<ClassType>(Clone());
+
241
+
242 // Create a new message instance for sending to the destination thread.
+
243 auto msg = std::make_shared<DelegateAsyncWaitMsg<Args...>>(delegate, std::forward<Args>(args)...);
+
244 msg->SetInvokerWaiting(true);
245
-
246 // Does the target function have a return value?
-
247 if constexpr (std::is_void<RetType>::value == false)
-
248 {
-
249 // Is the return value valid?
-
250 if (m_retVal.has_value())
-
251 {
-
252 // Return the destination thread target function return value
-
253 return std::any_cast<RetType>(m_retVal);
-
254 }
-
255 else
-
256 {
-
257 // Return a default return value
-
258 return RetType();
-
259 }
-
260 }
-
261 }
-
262 }
-
-
263
-
-
270 auto AsyncInvoke(Args... args) {
-
271 if constexpr (std::is_void<RetType>::value == true)
-
272 {
-
273 operator()(args...);
-
274 return IsSuccess() ? std::optional<bool>(true) : std::optional<bool>();
-
275 }
-
276 else
-
277 {
-
278 auto retVal = operator()(args...);
-
279 return IsSuccess() ? std::optional<RetType>(retVal) : std::optional<RetType>();
-
280 }
-
281 }
-
-
282
-
-
293 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) override {
-
294 // Typecast the base pointer to back correct derived to instance
-
295 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncWaitMsg<Args...>>(msg);
-
296 if (delegateMsg == nullptr)
-
297 throw std::invalid_argument("Invalid DelegateAsyncWaitMsg cast");
-
298
-
299 // Protect data shared between source and destination threads
-
300 const std::lock_guard<std::mutex> lock(delegateMsg->GetLock());
-
301
-
302 // Is the source thread waiting for the target function invoke to complete?
-
303 if (delegateMsg->GetInvokerWaiting())
-
304 {
-
305 // Invoke the delegate function synchronously
-
306 this->SetSync(true);
-
307
-
308 // Does target function have a void return value?
-
309 if constexpr (std::is_void<RetType>::value == true)
-
310 {
-
311 // Invoke the target function using the source thread supplied function arguments
-
312 std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
313 }
-
314 else
-
315 {
-
316 // Invoke the target function using the source thread supplied function arguments
-
317 // and get the return value
-
318 m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
319 }
-
320
-
321 // Signal the source thread that the destination thread function call is complete
-
322 delegateMsg->GetSema().Signal();
-
323 }
-
324 }
-
-
325
-
329 bool IsSuccess() { return m_success; }
-
330
-
333 RetType GetRetVal() { return std::any_cast<RetType>(m_retVal); }
-
334
-
335private:
-
337 bool m_success = false;
-
338
-
340 std::chrono::milliseconds m_timeout;
-
341
-
343 std::any m_retVal;
+
246 // Dispatch message onto the callback destination thread. DelegateInvoke()
+
247 // will be called by the destination thread.
+
248 this->GetThread().DispatchDelegate(msg);
+
249
+
250 // Wait for destination thread to execute the delegate function and get return value
+
251 if ((m_success = msg->GetSema().Wait(m_timeout)))
+
252 m_retVal = delegate->m_retVal;
+
253
+
254 // Protect data shared between source and destination threads
+
255 const std::lock_guard<std::mutex> lock(msg->GetLock());
+
256
+
257 // Set flag that source is not waiting anymore
+
258 msg->SetInvokerWaiting(false);
+
259
+
260 // Does the target function have a return value?
+
261 if constexpr (std::is_void<RetType>::value == false) {
+
262 // Is the return value valid?
+
263 if (m_retVal.has_value()) {
+
264 // Return the destination thread target function return value
+
265 return GetRetVal();
+
266 } else {
+
267 // Return a default return value
+
268 return RetType{};
+
269 }
+
270 }
+
271 }
+
272 }
+
+
273
+
+
280 auto AsyncInvoke(Args... args) {
+
281 if constexpr (std::is_void<RetType>::value == true) {
+
282 operator()(args...);
+
283 return IsSuccess() ? std::optional<bool>(true) : std::optional<bool>();
+
284 } else {
+
285 auto retVal = operator()(args...);
+
286 return IsSuccess() ? std::optional<RetType>(retVal) : std::optional<RetType>();
+
287 }
+
288 }
+
+
289
+
+
300 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) override {
+
301 // Typecast the base pointer to back correct derived to instance
+
302 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncWaitMsg<Args...>>(msg);
+
303 if (delegateMsg == nullptr)
+
304 throw std::invalid_argument("Invalid DelegateAsyncWaitMsg cast");
+
305
+
306 // Protect data shared between source and destination threads
+
307 const std::lock_guard<std::mutex> lock(delegateMsg->GetLock());
+
308
+
309 // Is the source thread waiting for the target function invoke to complete?
+
310 if (delegateMsg->GetInvokerWaiting()) {
+
311 // Invoke the delegate function synchronously
+
312 this->SetSync(true);
+
313
+
314 // Does target function have a void return value?
+
315 if constexpr (std::is_void<RetType>::value == true) {
+
316 // Invoke the target function using the source thread supplied function arguments
+
317 std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
318 } else {
+
319 // Invoke the target function using the source thread supplied function arguments
+
320 // and get the return value
+
321 m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
322 }
+
323
+
324 // Signal the source thread that the destination thread function call is complete
+
325 delegateMsg->GetSema().Signal();
+
326 }
+
327 }
+
+
328
+
332 bool IsSuccess() noexcept { return m_success; }
+
333
+
+
336 RetType GetRetVal() noexcept {
+
337 try {
+
338 return std::any_cast<RetType>(m_retVal);
+
339 }
+
340 catch (const std::bad_any_cast&) {
+
341 return RetType{}; // Return a default value if error
+
342 }
+
343 }
+
344
-
345 // </common_code>
-
346};
- -
347
-
348template <class C, class R>
-
349struct DelegateMemberAsyncWait; // Not defined
-
350
-
355template <class TClass, class RetType, class... Args>
-
-
356class DelegateMemberAsyncWait<TClass, RetType(Args...)> : public DelegateMemberAsync<TClass, RetType(Args...)> {
-
357public:
-
358 typedef TClass* ObjectPtr;
-
359 typedef RetType(TClass::*MemberFunc)(Args...);
-
360 typedef RetType(TClass::*ConstMemberFunc)(Args...) const;
-
361 using ClassType = DelegateMemberAsyncWait<TClass, RetType(Args...)>;
-
362 using BaseType = DelegateMemberAsync<TClass, RetType(Args...)>;
-
363
-
364 // Contructors take a class instance, member function, and delegate thread
-
-
365 DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) :
-
366 BaseType(object, func, thread), m_timeout(timeout) {
-
367 Bind(object, func, thread);
-
368 }
-
-
-
369 DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) :
-
370 BaseType(object, func, thread), m_timeout(timeout) {
-
371 Bind(object, func, thread);
-
372 }
-
-
- -
374 BaseType(rhs) {
-
375 Assign(rhs);
-
376 }
-
-
377 DelegateMemberAsyncWait() = delete;
-
378
-
-
380 void Bind(ObjectPtr object, MemberFunc func, DelegateThread& thread) {
-
381 BaseType::Bind(object, func, thread);
+
345private:
+
347 bool m_success = false;
+
348
+
350 std::chrono::milliseconds m_timeout;
+
351
+
353 std::any m_retVal;
+
354
+
355 // </common_code>
+
356};
+
+
357
+
358template <class C, class R>
+
359struct DelegateMemberAsyncWait; // Not defined
+
360
+
365template <class TClass, class RetType, class... Args>
+
+
366class DelegateMemberAsyncWait<TClass, RetType(Args...)> : public DelegateMemberAsync<TClass, RetType(Args...)> {
+
367public:
+
368 typedef TClass* ObjectPtr;
+
369 typedef RetType(TClass::*MemberFunc)(Args...);
+
370 typedef RetType(TClass::*ConstMemberFunc)(Args...) const;
+
371 using ClassType = DelegateMemberAsyncWait<TClass, RetType(Args...)>;
+
372 using BaseType = DelegateMemberAsync<TClass, RetType(Args...)>;
+
373
+
374 // Contructors take a class instance, member function, and delegate thread
+
+
375 DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout = WAIT_INFINITE) :
+
376 BaseType(object, func, thread), m_timeout(timeout) {
+
377 Bind(object, func, thread);
+
378 }
+
+
+
379 DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) :
+
380 BaseType(object, func, thread), m_timeout(timeout) {
+
381 Bind(object, func, thread);
382 }
-
383
-
-
385 void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) {
-
386 BaseType::Bind(object, func, thread);
-
387 }
+
+ +
384 BaseType(rhs) {
+
385 Assign(rhs);
+
386 }
+
388
-
389 // <common_code>
-
390
+
+
390 void Bind(ObjectPtr object, MemberFunc func, DelegateThread& thread) {
+
391 BaseType::Bind(object, func, thread);
+
392 }
+
+
393
-
395 void Assign(const ClassType& rhs) {
-
396 m_timeout = rhs.m_timeout;
-
397 BaseType::Assign(rhs);
-
398 }
+
395 void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) {
+
396 BaseType::Bind(object, func, thread);
+
397 }
-
399
+
398
+
399 // <common_code>
+
400
-
405 virtual ClassType* Clone() const override {
-
406 return new ClassType(*this);
-
407 }
-
-
408
-
- -
413 if (&rhs != this) {
-
414 BaseType::operator=(rhs);
-
415 Assign(rhs);
-
416 }
-
417 return *this;
-
418 }
-
-
419
-
-
423 virtual bool operator==(const DelegateBase& rhs) const override {
-
424 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
425 return derivedRhs &&
-
426 m_timeout == derivedRhs->m_timeout &&
-
427 BaseType::operator==(rhs);
+
405 void Assign(const ClassType& rhs) {
+
406 m_timeout = rhs.m_timeout;
+
407 BaseType::Assign(rhs);
+
408 }
+
+
409
+
+
415 virtual ClassType* Clone() const override {
+
416 return new ClassType(*this);
+
417 }
+
+
418
+
+ +
423 if (&rhs != this) {
+
424 BaseType::operator=(rhs);
+
425 Assign(rhs);
+
426 }
+
427 return *this;
428 }
429
-
-
450 virtual RetType operator()(Args... args) override {
-
451 // Synchronously invoke the target function?
-
452 if (this->GetSync())
-
453 {
-
454 // Invoke the target function directly
-
455 return BaseType::operator()(args...);
-
456 }
-
457 else
-
458 {
-
459 // Create a clone instance of this delegate
-
460 auto delegate = std::shared_ptr<ClassType>(Clone());
-
461
-
462 // Create a new message instance for sending to the destination thread.
-
463 auto msg = std::make_shared<DelegateAsyncWaitMsg<Args...>>(delegate, args...);
-
464 msg->SetInvokerWaiting(true);
-
465
-
466 // Dispatch message onto the callback destination thread. DelegateInvoke()
-
467 // will be called by the destination thread.
-
468 this->GetThread().DispatchDelegate(msg);
-
469
-
470 // Wait for destination thread to execute the delegate function and get return value
-
471 if ((m_success = msg->GetSema().Wait(m_timeout)))
-
472 m_retVal = delegate->m_retVal;
-
473
-
474 // Protect data shared between source and destination threads
-
475 const std::lock_guard<std::mutex> lock(msg->GetLock());
-
476
-
477 // Set flag that source is not waiting anymore
-
478 msg->SetInvokerWaiting(false);
-
479
-
480 // Does the target function have a return value?
-
481 if constexpr (std::is_void<RetType>::value == false)
-
482 {
-
483 // Is the return value valid?
-
484 if (m_retVal.has_value())
-
485 {
-
486 // Return the destination thread target function return value
-
487 return std::any_cast<RetType>(m_retVal);
-
488 }
-
489 else
-
490 {
-
491 // Return a default return value
-
492 return RetType();
-
493 }
-
494 }
-
495 }
-
496 }
-
-
497
-
-
504 auto AsyncInvoke(Args... args) {
-
505 if constexpr (std::is_void<RetType>::value == true)
-
506 {
-
507 operator()(args...);
-
508 return IsSuccess() ? std::optional<bool>(true) : std::optional<bool>();
-
509 }
-
510 else
-
511 {
-
512 auto retVal = operator()(args...);
-
513 return IsSuccess() ? std::optional<RetType>(retVal) : std::optional<RetType>();
-
514 }
-
515 }
-
-
516
-
-
526 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) override {
-
527 // Typecast the base pointer to back correct derived to instance
-
528 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncWaitMsg<Args...>>(msg);
-
529 if (delegateMsg == nullptr)
-
530 throw std::invalid_argument("Invalid DelegateAsyncWaitMsg cast");
-
531
-
532 // Protect data shared between source and destination threads
-
533 const std::lock_guard<std::mutex> lock(delegateMsg->GetLock());
-
534
-
535 // Is the source thread waiting for the target function invoke to complete?
-
536 if (delegateMsg->GetInvokerWaiting())
-
537 {
-
538 // Invoke the delegate function synchronously
-
539 this->SetSync(true);
-
540
-
541 // Does target function have a void return value?
-
542 if constexpr (std::is_void<RetType>::value == true)
-
543 {
-
544 // Invoke the target function using the source thread supplied function arguments
-
545 std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
546 }
-
547 else
-
548 {
-
549 // Invoke the target function using the source thread supplied function arguments
-
550 // and get the return value
-
551 m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
552 }
-
553
-
554 // Signal the source thread that the destination thread function call is complete
-
555 delegateMsg->GetSema().Signal();
-
556 }
-
557 }
-
-
558
-
562 bool IsSuccess() { return m_success; }
-
563
-
566 RetType GetRetVal() { return std::any_cast<RetType>(m_retVal); }
+
+
433 ClassType& operator=(ClassType&& rhs) noexcept {
+
434 if (&rhs != this) {
+
435 BaseType::operator=(std::move(rhs));
+
436 m_timeout = rhs.m_timeout; // Use the resource
+
437 }
+
438 return *this;
+
439 }
+
+
440
+
+
444 virtual bool operator==(const DelegateBase& rhs) const override {
+
445 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
446 return derivedRhs &&
+
447 m_timeout == derivedRhs->m_timeout &&
+
448 BaseType::operator==(rhs);
+
449 }
+
+
450
+
+
472 virtual RetType operator()(Args... args) override {
+
473 // Synchronously invoke the target function?
+
474 if (this->GetSync()) {
+
475 // Invoke the target function directly
+
476 return BaseType::operator()(std::forward<Args>(args)...);
+
477 } else {
+
478 // Create a clone instance of this delegate
+
479 auto delegate = std::shared_ptr<ClassType>(Clone());
+
480
+
481 // Create a new message instance for sending to the destination thread.
+
482 auto msg = std::make_shared<DelegateAsyncWaitMsg<Args...>>(delegate, std::forward<Args>(args)...);
+
483 msg->SetInvokerWaiting(true);
+
484
+
485 // Dispatch message onto the callback destination thread. DelegateInvoke()
+
486 // will be called by the destination thread.
+
487 this->GetThread().DispatchDelegate(msg);
+
488
+
489 // Wait for destination thread to execute the delegate function and get return value
+
490 if ((m_success = msg->GetSema().Wait(m_timeout)))
+
491 m_retVal = delegate->m_retVal;
+
492
+
493 // Protect data shared between source and destination threads
+
494 const std::lock_guard<std::mutex> lock(msg->GetLock());
+
495
+
496 // Set flag that source is not waiting anymore
+
497 msg->SetInvokerWaiting(false);
+
498
+
499 // Does the target function have a return value?
+
500 if constexpr (std::is_void<RetType>::value == false) {
+
501 // Is the return value valid?
+
502 if (m_retVal.has_value()) {
+
503 // Return the destination thread target function return value
+
504 return GetRetVal();
+
505 } else {
+
506 // Return a default return value
+
507 return RetType{};
+
508 }
+
509 }
+
510 }
+
511 }
+
+
512
+
+
519 auto AsyncInvoke(Args... args) {
+
520 if constexpr (std::is_void<RetType>::value == true) {
+
521 operator()(args...);
+
522 return IsSuccess() ? std::optional<bool>(true) : std::optional<bool>();
+
523 } else {
+
524 auto retVal = operator()(args...);
+
525 return IsSuccess() ? std::optional<RetType>(retVal) : std::optional<RetType>();
+
526 }
+
527 }
+
+
528
+
+
539 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) override {
+
540 // Typecast the base pointer to back correct derived to instance
+
541 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncWaitMsg<Args...>>(msg);
+
542 if (delegateMsg == nullptr)
+
543 throw std::invalid_argument("Invalid DelegateAsyncWaitMsg cast");
+
544
+
545 // Protect data shared between source and destination threads
+
546 const std::lock_guard<std::mutex> lock(delegateMsg->GetLock());
+
547
+
548 // Is the source thread waiting for the target function invoke to complete?
+
549 if (delegateMsg->GetInvokerWaiting()) {
+
550 // Invoke the delegate function synchronously
+
551 this->SetSync(true);
+
552
+
553 // Does target function have a void return value?
+
554 if constexpr (std::is_void<RetType>::value == true) {
+
555 // Invoke the target function using the source thread supplied function arguments
+
556 std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
557 } else {
+
558 // Invoke the target function using the source thread supplied function arguments
+
559 // and get the return value
+
560 m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
561 }
+
562
+
563 // Signal the source thread that the destination thread function call is complete
+
564 delegateMsg->GetSema().Signal();
+
565 }
+
566 }
+
567
-
568private:
-
570 bool m_success = false;
-
571
-
573 std::chrono::milliseconds m_timeout;
-
574
-
576 std::any m_retVal;
-
577
-
578 // </common_code>
-
579};
-
-
580
-
581template <class C, class R>
-
582struct DelegateMemberSpAsyncWait; // Not defined
+
571 bool IsSuccess() noexcept { return m_success; }
+
572
+
+
575 RetType GetRetVal() noexcept {
+
576 try {
+
577 return std::any_cast<RetType>(m_retVal);
+
578 }
+
579 catch (const std::bad_any_cast&) {
+
580 return RetType{}; // Return a default value if error
+
581 }
+
582 }
+
583
-
588template <class TClass, class RetType, class... Args>
-
-
589class DelegateMemberSpAsyncWait<TClass, RetType(Args...)> : public DelegateMemberSpAsync<TClass, RetType(Args...)> {
-
590public:
-
591 typedef std::shared_ptr<TClass> ObjectPtr;
-
592 typedef RetType(TClass::* MemberFunc)(Args...);
-
593 typedef RetType(TClass::* ConstMemberFunc)(Args...) const;
-
594 using ClassType = DelegateMemberSpAsyncWait<TClass, RetType(Args...)>;
-
595 using BaseType = DelegateMemberSpAsync<TClass, RetType(Args...)>;
+
584private:
+
586 bool m_success = false;
+
587
+
589 std::chrono::milliseconds m_timeout;
+
590
+
592 std::any m_retVal;
+
593
+
594 // </common_code>
+
595};
+
596
-
597 // Contructors take a class instance, member function, and delegate thread
-
-
598 DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) :
-
599 BaseType(object, func, thread), m_timeout(timeout) {
-
600 Bind(object, func, thread);
-
601 }
-
-
-
602 DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) :
-
603 BaseType(object, func, thread), m_timeout(timeout) {
-
604 Bind(object, func, thread);
-
605 }
-
-
- -
607 BaseType(rhs) {
-
608 Assign(rhs);
-
609 }
-
- -
611
-
-
613 void Bind(ObjectPtr object, MemberFunc func, DelegateThread& thread) {
-
614 BaseType::Bind(object, func, thread);
-
615 }
-
-
616
+
597template <class C, class R>
+
598struct DelegateMemberSpAsyncWait; // Not defined
+
599
+
604template <class TClass, class RetType, class... Args>
+
+
605class DelegateMemberSpAsyncWait<TClass, RetType(Args...)> : public DelegateMemberSpAsync<TClass, RetType(Args...)> {
+
606public:
+
607 typedef std::shared_ptr<TClass> ObjectPtr;
+
608 typedef RetType(TClass::* MemberFunc)(Args...);
+
609 typedef RetType(TClass::* ConstMemberFunc)(Args...) const;
+
610 using ClassType = DelegateMemberSpAsyncWait<TClass, RetType(Args...)>;
+
611 using BaseType = DelegateMemberSpAsync<TClass, RetType(Args...)>;
+
612
+
613 // Contructors take a class instance, member function, and delegate thread
+
+
614 DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout = WAIT_INFINITE) :
+
615 BaseType(object, func, thread), m_timeout(timeout) {
+
616 Bind(object, func, thread);
+
617 }
+
-
618 void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) {
-
619 BaseType::Bind(object, func, thread);
-
620 }
-
-
621
-
622 // <common_code>
-
623
-
-
628 void Assign(const ClassType& rhs) {
-
629 m_timeout = rhs.m_timeout;
-
630 BaseType::Assign(rhs);
+
618 DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) :
+
619 BaseType(object, func, thread), m_timeout(timeout) {
+
620 Bind(object, func, thread);
+
621 }
+
+
+ +
623 BaseType(rhs) {
+
624 Assign(rhs);
+
625 }
+
+ +
627
+
+
629 void Bind(ObjectPtr object, MemberFunc func, DelegateThread& thread) {
+
630 BaseType::Bind(object, func, thread);
631 }
632
-
-
638 virtual ClassType* Clone() const override {
-
639 return new ClassType(*this);
-
640 }
-
-
641
-
- -
646 if (&rhs != this) {
-
647 BaseType::operator=(rhs);
-
648 Assign(rhs);
-
649 }
-
650 return *this;
-
651 }
-
-
652
-
-
656 virtual bool operator==(const DelegateBase& rhs) const override {
-
657 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
658 return derivedRhs &&
-
659 m_timeout == derivedRhs->m_timeout &&
-
660 BaseType::operator==(rhs);
-
661 }
-
-
662
+
+
634 void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread& thread) {
+
635 BaseType::Bind(object, func, thread);
+
636 }
+
+
637
+
638 // <common_code>
+
639
+
+
644 void Assign(const ClassType& rhs) {
+
645 m_timeout = rhs.m_timeout;
+
646 BaseType::Assign(rhs);
+
647 }
+
+
648
+
+
654 virtual ClassType* Clone() const override {
+
655 return new ClassType(*this);
+
656 }
+
+
657
+
+ +
662 if (&rhs != this) {
+
663 BaseType::operator=(rhs);
+
664 Assign(rhs);
+
665 }
+
666 return *this;
+
667 }
+
+
668
+
+
672 ClassType& operator=(ClassType&& rhs) noexcept {
+
673 if (&rhs != this) {
+
674 BaseType::operator=(std::move(rhs));
+
675 m_timeout = rhs.m_timeout; // Use the resource
+
676 }
+
677 return *this;
+
678 }
+
+
679
-
683 virtual RetType operator()(Args... args) override {
-
684 // Synchronously invoke the target function?
-
685 if (this->GetSync())
-
686 {
-
687 // Invoke the target function directly
-
688 return BaseType::operator()(args...);
-
689 }
-
690 else
-
691 {
-
692 // Create a clone instance of this delegate
-
693 auto delegate = std::shared_ptr<ClassType>(Clone());
-
694
-
695 // Create a new message instance for sending to the destination thread.
-
696 auto msg = std::make_shared<DelegateAsyncWaitMsg<Args...>>(delegate, args...);
-
697 msg->SetInvokerWaiting(true);
-
698
-
699 // Dispatch message onto the callback destination thread. DelegateInvoke()
-
700 // will be called by the destination thread.
-
701 this->GetThread().DispatchDelegate(msg);
-
702
-
703 // Wait for destination thread to execute the delegate function and get return value
-
704 if ((m_success = msg->GetSema().Wait(m_timeout)))
-
705 m_retVal = delegate->m_retVal;
-
706
-
707 // Protect data shared between source and destination threads
-
708 const std::lock_guard<std::mutex> lock(msg->GetLock());
-
709
-
710 // Set flag that source is not waiting anymore
-
711 msg->SetInvokerWaiting(false);
-
712
-
713 // Does the target function have a return value?
-
714 if constexpr (std::is_void<RetType>::value == false)
-
715 {
-
716 // Is the return value valid?
-
717 if (m_retVal.has_value())
-
718 {
-
719 // Return the destination thread target function return value
-
720 return std::any_cast<RetType>(m_retVal);
-
721 }
-
722 else
-
723 {
-
724 // Return a default return value
-
725 return RetType();
-
726 }
-
727 }
-
728 }
-
729 }
-
-
730
-
-
737 auto AsyncInvoke(Args... args) {
-
738 if constexpr (std::is_void<RetType>::value == true)
-
739 {
-
740 operator()(args...);
-
741 return IsSuccess() ? std::optional<bool>(true) : std::optional<bool>();
-
742 }
-
743 else
-
744 {
-
745 auto retVal = operator()(args...);
-
746 return IsSuccess() ? std::optional<RetType>(retVal) : std::optional<RetType>();
-
747 }
-
748 }
-
-
749
-
-
759 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) override {
-
760 // Typecast the base pointer to back correct derived to instance
-
761 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncWaitMsg<Args...>>(msg);
-
762 if (delegateMsg == nullptr)
-
763 throw std::invalid_argument("Invalid DelegateAsyncWaitMsg cast");
-
764
-
765 // Protect data shared between source and destination threads
-
766 const std::lock_guard<std::mutex> lock(delegateMsg->GetLock());
+
683 virtual bool operator==(const DelegateBase& rhs) const override {
+
684 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
685 return derivedRhs &&
+
686 m_timeout == derivedRhs->m_timeout &&
+
687 BaseType::operator==(rhs);
+
688 }
+
+
689
+
+
711 virtual RetType operator()(Args... args) override {
+
712 // Synchronously invoke the target function?
+
713 if (this->GetSync()) {
+
714 // Invoke the target function directly
+
715 return BaseType::operator()(std::forward<Args>(args)...);
+
716 } else {
+
717 // Create a clone instance of this delegate
+
718 auto delegate = std::shared_ptr<ClassType>(Clone());
+
719
+
720 // Create a new message instance for sending to the destination thread.
+
721 auto msg = std::make_shared<DelegateAsyncWaitMsg<Args...>>(delegate, std::forward<Args>(args)...);
+
722 msg->SetInvokerWaiting(true);
+
723
+
724 // Dispatch message onto the callback destination thread. DelegateInvoke()
+
725 // will be called by the destination thread.
+
726 this->GetThread().DispatchDelegate(msg);
+
727
+
728 // Wait for destination thread to execute the delegate function and get return value
+
729 if ((m_success = msg->GetSema().Wait(m_timeout)))
+
730 m_retVal = delegate->m_retVal;
+
731
+
732 // Protect data shared between source and destination threads
+
733 const std::lock_guard<std::mutex> lock(msg->GetLock());
+
734
+
735 // Set flag that source is not waiting anymore
+
736 msg->SetInvokerWaiting(false);
+
737
+
738 // Does the target function have a return value?
+
739 if constexpr (std::is_void<RetType>::value == false) {
+
740 // Is the return value valid?
+
741 if (m_retVal.has_value()) {
+
742 // Return the destination thread target function return value
+
743 return GetRetVal();
+
744 } else {
+
745 // Return a default return value
+
746 return RetType{};
+
747 }
+
748 }
+
749 }
+
750 }
+
+
751
+
+
758 auto AsyncInvoke(Args... args) {
+
759 if constexpr (std::is_void<RetType>::value == true) {
+
760 operator()(args...);
+
761 return IsSuccess() ? std::optional<bool>(true) : std::optional<bool>();
+
762 } else {
+
763 auto retVal = operator()(args...);
+
764 return IsSuccess() ? std::optional<RetType>(retVal) : std::optional<RetType>();
+
765 }
+
766 }
+
767
-
768 // Is the source thread waiting for the target function invoke to complete?
-
769 if (delegateMsg->GetInvokerWaiting())
-
770 {
-
771 // Invoke the delegate function synchronously
-
772 this->SetSync(true);
-
773
-
774 // Does target function have a void return value?
-
775 if constexpr (std::is_void<RetType>::value == true)
-
776 {
-
777 // Invoke the target function using the source thread supplied function arguments
-
778 std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
779 }
-
780 else
-
781 {
-
782 // Invoke the target function using the source thread supplied function arguments
-
783 // and get the return value
-
784 m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
785 }
+
+
778 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) override {
+
779 // Typecast the base pointer to back correct derived to instance
+
780 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncWaitMsg<Args...>>(msg);
+
781 if (delegateMsg == nullptr)
+
782 throw std::invalid_argument("Invalid DelegateAsyncWaitMsg cast");
+
783
+
784 // Protect data shared between source and destination threads
+
785 const std::lock_guard<std::mutex> lock(delegateMsg->GetLock());
786
-
787 // Signal the source thread that the destination thread function call is complete
-
788 delegateMsg->GetSema().Signal();
-
789 }
-
790 }
-
+
787 // Is the source thread waiting for the target function invoke to complete?
+
788 if (delegateMsg->GetInvokerWaiting()) {
+
789 // Invoke the delegate function synchronously
+
790 this->SetSync(true);
791
-
795 bool IsSuccess() { return m_success; }
-
796
-
799 RetType GetRetVal() { return std::any_cast<RetType>(m_retVal); }
-
800
-
801private:
-
803 bool m_success = false;
-
804
-
806 std::chrono::milliseconds m_timeout;
-
807
-
809 std::any m_retVal;
-
810
-
811 // </common_code>
-
812};
-
-
813
-
814template <class R>
-
815struct DelegateFunctionAsyncWait; // Not defined
-
816
-
823template <class RetType, class... Args>
-
-
824class DelegateFunctionAsyncWait<RetType(Args...)> : public DelegateFunctionAsync<RetType(Args...)> {
-
825public:
-
826 using FunctionType = std::function<RetType(Args...)>;
-
827 using ClassType = DelegateFunctionAsyncWait<RetType(Args...)>;
-
828 using BaseType = DelegateFunctionAsync<RetType(Args...)>;
+
792 // Does target function have a void return value?
+
793 if constexpr (std::is_void<RetType>::value == true) {
+
794 // Invoke the target function using the source thread supplied function arguments
+
795 std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
796 } else {
+
797 // Invoke the target function using the source thread supplied function arguments
+
798 // and get the return value
+
799 m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
800 }
+
801
+
802 // Signal the source thread that the destination thread function call is complete
+
803 delegateMsg->GetSema().Signal();
+
804 }
+
805 }
+
+
806
+
810 bool IsSuccess() noexcept { return m_success; }
+
811
+
+
814 RetType GetRetVal() noexcept {
+
815 try {
+
816 return std::any_cast<RetType>(m_retVal);
+
817 }
+
818 catch (const std::bad_any_cast&) {
+
819 return RetType{}; // Return a default value if error
+
820 }
+
821 }
+
+
822
+
823private:
+
825 bool m_success = false;
+
826
+
828 std::chrono::milliseconds m_timeout;
829
-
830 // Contructors take a std::function, delegate thread and timeout
-
-
831 DelegateFunctionAsyncWait(FunctionType func, DelegateThread& thread, std::chrono::milliseconds timeout) :
-
832 BaseType(func, thread), m_timeout(timeout) {
-
833 Bind(func, thread);
-
834 }
-
-
- -
836 BaseType(rhs) {
-
837 Assign(rhs);
-
838 }
-
- -
840
-
-
842 void Bind(FunctionType func, DelegateThread& thread) {
-
843 BaseType::Bind(func, thread);
-
844 }
-
-
845
-
846 // <common_code>
-
847
-
-
852 void Assign(const ClassType& rhs) {
-
853 m_timeout = rhs.m_timeout;
-
854 BaseType::Assign(rhs);
-
855 }
-
-
856
-
-
862 virtual ClassType* Clone() const override {
-
863 return new ClassType(*this);
-
864 }
-
-
865
-
- -
870 if (&rhs != this) {
-
871 BaseType::operator=(rhs);
-
872 Assign(rhs);
-
873 }
-
874 return *this;
-
875 }
-
-
876
-
-
880 virtual bool operator==(const DelegateBase& rhs) const override {
-
881 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
-
882 return derivedRhs &&
-
883 m_timeout == derivedRhs->m_timeout &&
-
884 BaseType::operator==(rhs);
-
885 }
-
-
886
-
-
907 virtual RetType operator()(Args... args) override {
-
908 // Synchronously invoke the target function?
-
909 if (this->GetSync())
-
910 {
-
911 // Invoke the target function directly
-
912 return BaseType::operator()(args...);
-
913 }
-
914 else
-
915 {
-
916 // Create a clone instance of this delegate
-
917 auto delegate = std::shared_ptr<ClassType>(Clone());
-
918
-
919 // Create a new message instance for sending to the destination thread.
-
920 auto msg = std::make_shared<DelegateAsyncWaitMsg<Args...>>(delegate, args...);
-
921 msg->SetInvokerWaiting(true);
-
922
-
923 // Dispatch message onto the callback destination thread. DelegateInvoke()
-
924 // will be called by the destination thread.
-
925 this->GetThread().DispatchDelegate(msg);
-
926
-
927 // Wait for destination thread to execute the delegate function and get return value
-
928 if ((m_success = msg->GetSema().Wait(m_timeout)))
-
929 m_retVal = delegate->m_retVal;
-
930
-
931 // Protect data shared between source and destination threads
-
932 const std::lock_guard<std::mutex> lock(msg->GetLock());
-
933
-
934 // Set flag that source is not waiting anymore
-
935 msg->SetInvokerWaiting(false);
-
936
-
937 // Does the target function have a return value?
-
938 if constexpr (std::is_void<RetType>::value == false)
-
939 {
-
940 // Is the return value valid?
-
941 if (m_retVal.has_value())
-
942 {
-
943 // Return the destination thread target function return value
-
944 return std::any_cast<RetType>(m_retVal);
-
945 }
-
946 else
-
947 {
-
948 // Return a default return value
-
949 return RetType();
-
950 }
-
951 }
-
952 }
-
953 }
-
-
954
-
-
961 auto AsyncInvoke(Args... args) {
-
962 if constexpr (std::is_void<RetType>::value == true)
-
963 {
-
964 operator()(args...);
-
965 return IsSuccess() ? std::optional<bool>(true) : std::optional<bool>();
-
966 }
-
967 else
-
968 {
-
969 auto retVal = operator()(args...);
-
970 return IsSuccess() ? std::optional<RetType>(retVal) : std::optional<RetType>();
-
971 }
-
972 }
-
-
973
-
-
983 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) override {
-
984 // Typecast the base pointer to back correct derived to instance
-
985 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncWaitMsg<Args...>>(msg);
-
986 if (delegateMsg == nullptr)
-
987 throw std::invalid_argument("Invalid DelegateAsyncWaitMsg cast");
-
988
-
989 // Protect data shared between source and destination threads
-
990 const std::lock_guard<std::mutex> lock(delegateMsg->GetLock());
-
991
-
992 // Is the source thread waiting for the target function invoke to complete?
-
993 if (delegateMsg->GetInvokerWaiting())
-
994 {
-
995 // Invoke the delegate function synchronously
-
996 this->SetSync(true);
+
831 std::any m_retVal;
+
832
+
833 // </common_code>
+
834};
+
+
835
+
836template <class R>
+
837struct DelegateFunctionAsyncWait; // Not defined
+
838
+
845template <class RetType, class... Args>
+
+
846class DelegateFunctionAsyncWait<RetType(Args...)> : public DelegateFunctionAsync<RetType(Args...)> {
+
847public:
+
848 using FunctionType = std::function<RetType(Args...)>;
+
849 using ClassType = DelegateFunctionAsyncWait<RetType(Args...)>;
+
850 using BaseType = DelegateFunctionAsync<RetType(Args...)>;
+
851
+
852 // Contructors take a std::function, delegate thread and timeout
+
+
853 DelegateFunctionAsyncWait(FunctionType func, DelegateThread& thread, std::chrono::milliseconds timeout = WAIT_INFINITE) :
+
854 BaseType(func, thread), m_timeout(timeout) {
+
855 Bind(func, thread);
+
856 }
+
+
+ +
858 BaseType(rhs) {
+
859 Assign(rhs);
+
860 }
+
+ +
862
+
+
864 void Bind(FunctionType func, DelegateThread& thread) {
+
865 BaseType::Bind(func, thread);
+
866 }
+
+
867
+
868 // <common_code>
+
869
+
+
874 void Assign(const ClassType& rhs) {
+
875 m_timeout = rhs.m_timeout;
+
876 BaseType::Assign(rhs);
+
877 }
+
+
878
+
+
884 virtual ClassType* Clone() const override {
+
885 return new ClassType(*this);
+
886 }
+
+
887
+
+ +
892 if (&rhs != this) {
+
893 BaseType::operator=(rhs);
+
894 Assign(rhs);
+
895 }
+
896 return *this;
+
897 }
+
+
898
+
+
902 ClassType& operator=(ClassType&& rhs) noexcept {
+
903 if (&rhs != this) {
+
904 BaseType::operator=(std::move(rhs));
+
905 m_timeout = rhs.m_timeout; // Use the resource
+
906 }
+
907 return *this;
+
908 }
+
+
909
+
+
913 virtual bool operator==(const DelegateBase& rhs) const override {
+
914 auto derivedRhs = dynamic_cast<const ClassType*>(&rhs);
+
915 return derivedRhs &&
+
916 m_timeout == derivedRhs->m_timeout &&
+
917 BaseType::operator==(rhs);
+
918 }
+
+
919
+
+
941 virtual RetType operator()(Args... args) override {
+
942 // Synchronously invoke the target function?
+
943 if (this->GetSync()) {
+
944 // Invoke the target function directly
+
945 return BaseType::operator()(std::forward<Args>(args)...);
+
946 } else {
+
947 // Create a clone instance of this delegate
+
948 auto delegate = std::shared_ptr<ClassType>(Clone());
+
949
+
950 // Create a new message instance for sending to the destination thread.
+
951 auto msg = std::make_shared<DelegateAsyncWaitMsg<Args...>>(delegate, std::forward<Args>(args)...);
+
952 msg->SetInvokerWaiting(true);
+
953
+
954 // Dispatch message onto the callback destination thread. DelegateInvoke()
+
955 // will be called by the destination thread.
+
956 this->GetThread().DispatchDelegate(msg);
+
957
+
958 // Wait for destination thread to execute the delegate function and get return value
+
959 if ((m_success = msg->GetSema().Wait(m_timeout)))
+
960 m_retVal = delegate->m_retVal;
+
961
+
962 // Protect data shared between source and destination threads
+
963 const std::lock_guard<std::mutex> lock(msg->GetLock());
+
964
+
965 // Set flag that source is not waiting anymore
+
966 msg->SetInvokerWaiting(false);
+
967
+
968 // Does the target function have a return value?
+
969 if constexpr (std::is_void<RetType>::value == false) {
+
970 // Is the return value valid?
+
971 if (m_retVal.has_value()) {
+
972 // Return the destination thread target function return value
+
973 return GetRetVal();
+
974 } else {
+
975 // Return a default return value
+
976 return RetType{};
+
977 }
+
978 }
+
979 }
+
980 }
+
+
981
+
+
988 auto AsyncInvoke(Args... args) {
+
989 if constexpr (std::is_void<RetType>::value == true) {
+
990 operator()(args...);
+
991 return IsSuccess() ? std::optional<bool>(true) : std::optional<bool>();
+
992 } else {
+
993 auto retVal = operator()(args...);
+
994 return IsSuccess() ? std::optional<RetType>(retVal) : std::optional<RetType>();
+
995 }
+
996 }
+
997
-
998 // Does target function have a void return value?
-
999 if constexpr (std::is_void<RetType>::value == true)
-
1000 {
-
1001 // Invoke the target function using the source thread supplied function arguments
-
1002 std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
1003 }
-
1004 else
-
1005 {
-
1006 // Invoke the target function using the source thread supplied function arguments
-
1007 // and get the return value
-
1008 m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
-
1009 }
-
1010
-
1011 // Signal the source thread that the destination thread function call is complete
-
1012 delegateMsg->GetSema().Signal();
-
1013 }
-
1014 }
-
-
1015
-
1019 bool IsSuccess() { return m_success; }
-
1020
-
1023 RetType GetRetVal() { return std::any_cast<RetType>(m_retVal); }
-
1024
-
1025private:
-
1027 bool m_success = false;
-
1028
-
1030 std::chrono::milliseconds m_timeout;
+
+
1008 virtual void DelegateInvoke(std::shared_ptr<DelegateMsg> msg) override {
+
1009 // Typecast the base pointer to back correct derived to instance
+
1010 auto delegateMsg = std::dynamic_pointer_cast<DelegateAsyncWaitMsg<Args...>>(msg);
+
1011 if (delegateMsg == nullptr)
+
1012 throw std::invalid_argument("Invalid DelegateAsyncWaitMsg cast");
+
1013
+
1014 // Protect data shared between source and destination threads
+
1015 const std::lock_guard<std::mutex> lock(delegateMsg->GetLock());
+
1016
+
1017 // Is the source thread waiting for the target function invoke to complete?
+
1018 if (delegateMsg->GetInvokerWaiting()) {
+
1019 // Invoke the delegate function synchronously
+
1020 this->SetSync(true);
+
1021
+
1022 // Does target function have a void return value?
+
1023 if constexpr (std::is_void<RetType>::value == true) {
+
1024 // Invoke the target function using the source thread supplied function arguments
+
1025 std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
1026 } else {
+
1027 // Invoke the target function using the source thread supplied function arguments
+
1028 // and get the return value
+
1029 m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs()));
+
1030 }
1031
-
1033 std::any m_retVal;
-
1034
-
1035 // </common_code>
-
1036};
-
-
1037
-
1045template <class RetType, class... Args>
-
-
1046DelegateFreeAsyncWait<RetType(Args...)> MakeDelegate(RetType(*func)(Args... args), DelegateThread& thread, std::chrono::milliseconds timeout) {
-
1047 return DelegateFreeAsyncWait<RetType(Args...)>(func, thread, timeout);
-
1048}
-
-
1049
-
1059template <class TClass, class RetType, class... Args>
-
-
1060DelegateMemberAsyncWait<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::*func)(Args... args), DelegateThread& thread, std::chrono::milliseconds timeout) {
-
1061 return DelegateMemberAsyncWait<TClass, RetType(Args...)>(object, func, thread, timeout);
-
1062}
-
-
1063
-
1073template <class TClass, class RetType, class... Args>
-
1074DelegateMemberAsyncWait<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::*func)(Args... args) const, DelegateThread& thread, std::chrono::milliseconds timeout) {
-
1075 return DelegateMemberAsyncWait<TClass, RetType(Args...)>(object, func, thread, timeout);
+
1032 // Signal the source thread that the destination thread function call is complete
+
1033 delegateMsg->GetSema().Signal();
+
1034 }
+
1035 }
+
+
1036
+
1040 bool IsSuccess() noexcept { return m_success; }
+
1041
+
+
1044 RetType GetRetVal() noexcept {
+
1045 try {
+
1046 return std::any_cast<RetType>(m_retVal);
+
1047 }
+
1048 catch (const std::bad_any_cast&) {
+
1049 return RetType{}; // Return a default value if error
+
1050 }
+
1051 }
+
+
1052
+
1053private:
+
1055 bool m_success = false;
+
1056
+
1058 std::chrono::milliseconds m_timeout;
+
1059
+
1061 std::any m_retVal;
+
1062
+
1063 // </common_code>
+
1064};
+
+
1065
+
1073template <class RetType, class... Args>
+
+
1074DelegateFreeAsyncWait<RetType(Args...)> MakeDelegate(RetType(*func)(Args... args), DelegateThread& thread, std::chrono::milliseconds timeout) {
+
1075 return DelegateFreeAsyncWait<RetType(Args...)>(func, thread, timeout);
1076}
+
1077
-
1078
-
1088template <class TClass, class RetVal, class... Args>
-
-
1089DelegateMemberSpAsyncWait<TClass, RetVal(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetVal(TClass::* func)(Args... args), DelegateThread& thread, std::chrono::milliseconds timeout) {
-
1090 return DelegateMemberSpAsyncWait<TClass, RetVal(Args...)>(object, func, thread, timeout);
-
1091}
-
-
1092
-
1102template <class TClass, class RetVal, class... Args>
-
1103DelegateMemberSpAsyncWait<TClass, RetVal(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetVal(TClass::* func)(Args... args) const, DelegateThread& thread, std::chrono::milliseconds timeout) {
-
1104 return DelegateMemberSpAsyncWait<TClass, RetVal(Args...)>(object, func, thread, timeout);
-
1105}
+
1087template <class TClass, class RetType, class... Args>
+
+
1088DelegateMemberAsyncWait<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::*func)(Args... args), DelegateThread& thread, std::chrono::milliseconds timeout) {
+
1089 return DelegateMemberAsyncWait<TClass, RetType(Args...)>(object, func, thread, timeout);
+
1090}
+
+
1091
+
1101template <class TClass, class RetType, class... Args>
+
1102DelegateMemberAsyncWait<TClass, RetType(Args...)> MakeDelegate(TClass* object, RetType(TClass::*func)(Args... args) const, DelegateThread& thread, std::chrono::milliseconds timeout) {
+
1103 return DelegateMemberAsyncWait<TClass, RetType(Args...)>(object, func, thread, timeout);
+
1104}
+
1105
1106
-
1114template <class RetType, class... Args>
-
-
1115DelegateFunctionAsyncWait<RetType(Args...)> MakeDelegate(std::function<RetType(Args...)> func, DelegateThread& thread, std::chrono::milliseconds timeout) {
-
1116 return DelegateFunctionAsyncWait<RetType(Args...)>(func, thread, timeout);
-
1117}
-
-
1118
-
1119}
+
1116template <class TClass, class RetVal, class... Args>
+
+
1117DelegateMemberSpAsyncWait<TClass, RetVal(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetVal(TClass::* func)(Args... args), DelegateThread& thread, std::chrono::milliseconds timeout) {
+
1118 return DelegateMemberSpAsyncWait<TClass, RetVal(Args...)>(object, func, thread, timeout);
+
1119}
+
1120
-
1121#endif
+
1130template <class TClass, class RetVal, class... Args>
+
1131DelegateMemberSpAsyncWait<TClass, RetVal(Args...)> MakeDelegate(std::shared_ptr<TClass> object, RetVal(TClass::* func)(Args... args) const, DelegateThread& thread, std::chrono::milliseconds timeout) {
+
1132 return DelegateMemberSpAsyncWait<TClass, RetVal(Args...)>(object, func, thread, timeout);
+
1133}
+
1134
+
1142template <class RetType, class... Args>
+
+
1143DelegateFunctionAsyncWait<RetType(Args...)> MakeDelegate(std::function<RetType(Args...)> func, DelegateThread& thread, std::chrono::milliseconds timeout) {
+
1144 return DelegateFunctionAsyncWait<RetType(Args...)>(func, thread, timeout);
+
1145}
+
+
1146
+
1147}
+
1148
+
1149#endif
DelegateAsync.h
Delegate "`Async`" series of classes used to invoke a function asynchronously.
DelegateInvoker.h
Delegate inter-thread invoker base class.
DelegateThread.h
A base class for a delegate enabled execution thread.
@@ -963,87 +989,92 @@
DelegateLib::DelegateAsyncWaitMsg::~DelegateAsyncWaitMsg
virtual ~DelegateAsyncWaitMsg()
Definition DelegateAsyncWait.h:66
DelegateLib::DelegateAsyncWaitMsg::DelegateAsyncWaitMsg
DelegateAsyncWaitMsg(std::shared_ptr< IDelegateInvoker > invoker, Args... args)
Definition DelegateAsyncWait.h:61
DelegateLib::DelegateBase
Non-template base class for all delegates.
Definition Delegate.h:21
-
DelegateLib::DelegateFreeAsync< RetType(Args...)>
DelegateFreeAsync<> class asynchronously invokes a free target function.
Definition DelegateAsync.h:67
+
DelegateLib::DelegateFreeAsync< RetType(Args...)>
DelegateFreeAsync<> class asynchronously invokes a free target function.
Definition DelegateAsync.h:65
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>
DelegateFreeAsyncWait<> class asynchronously block invokes a free target function.
Definition DelegateAsyncWait.h:116
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait
DelegateFreeAsyncWait(const ClassType &rhs)
Copy constructor that creates a copy of the given instance.
Definition DelegateAsyncWait.h:137
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait
DelegateFreeAsyncWait(ClassType &&rhs) noexcept
Move constructor that transfers ownership of resources.
Definition DelegateAsyncWait.h:144
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::IsSuccess
bool IsSuccess() noexcept
Definition DelegateAsyncWait.h:332
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait
DelegateFreeAsyncWait()=delete
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::GetRetVal
RetType GetRetVal()
Definition DelegateAsyncWait.h:333
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:216
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait
DelegateFreeAsyncWait(FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
Constructor to create a class instance.
Definition DelegateAsyncWait.h:127
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::Bind
void Bind(FreeFunc func, DelegateThread &thread)
Bind a free function to the delegate.
Definition DelegateAsyncWait.h:150
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::IsSuccess
bool IsSuccess()
Definition DelegateAsyncWait.h:329
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsyncWait.h:170
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::AsyncInvoke
auto AsyncInvoke(Args... args)
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:270
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsyncWait.h:177
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsyncWait.h:160
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsyncWait.h:188
-
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateInvoke
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg) override
Invoke the delegate function on the destination thread. Called by the destination thread.
Definition DelegateAsyncWait.h:293
-
DelegateLib::DelegateFunctionAsync< RetType(Args...)>
DelegateFunctionAsync<> class asynchronously invokes a std::function target function.
Definition DelegateAsync.h:668
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>
DelegateFunctionAsyncWait<> class asynchronously block invokes a std::function target function.
Definition DelegateAsyncWait.h:824
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsyncWait.h:862
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsyncWait.h:852
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsyncWait.h:880
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::IsSuccess
bool IsSuccess()
Definition DelegateAsyncWait.h:1019
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::AsyncInvoke
auto AsyncInvoke(Args... args)
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:961
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait
DelegateFunctionAsyncWait(const ClassType &rhs)
Definition DelegateAsyncWait.h:835
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::Bind
void Bind(FunctionType func, DelegateThread &thread)
Bind a std::function to a delegate.
Definition DelegateAsyncWait.h:842
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait
DelegateFunctionAsyncWait(FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout)
Definition DelegateAsyncWait.h:831
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsyncWait.h:869
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::GetRetVal
RetType GetRetVal()
Definition DelegateAsyncWait.h:1023
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::FunctionType
std::function< RetType(Args...)> FunctionType
Definition DelegateAsyncWait.h:826
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateInvoke
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg) override
Invoke the delegate function on the destination thread.
Definition DelegateAsyncWait.h:983
-
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke delegate function asynchronously and block for function return value.
Definition DelegateAsyncWait.h:907
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::GetRetVal
RetType GetRetVal() noexcept
Definition DelegateAsyncWait.h:336
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:233
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::Bind
void Bind(FreeFunc func, DelegateThread &thread)
Bind a free function to the delegate.
Definition DelegateAsyncWait.h:156
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait
DelegateFreeAsyncWait(FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)
Constructor to create a class instance.
Definition DelegateAsyncWait.h:127
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition DelegateAsyncWait.h:194
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsyncWait.h:176
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::AsyncInvoke
auto AsyncInvoke(Args... args)
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:280
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsyncWait.h:183
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsyncWait.h:166
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsyncWait.h:205
+
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateInvoke
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg) override
Invoke the delegate function on the destination thread. Called by the destination thread.
Definition DelegateAsyncWait.h:300
+
DelegateLib::DelegateFunctionAsync< RetType(Args...)>
DelegateFunctionAsync<> class asynchronously invokes a std::function target function.
Definition DelegateAsync.h:695
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>
DelegateFunctionAsyncWait<> class asynchronously block invokes a std::function target function.
Definition DelegateAsyncWait.h:846
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsyncWait.h:884
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsyncWait.h:874
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsyncWait.h:913
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait
DelegateFunctionAsyncWait(FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)
Definition DelegateAsyncWait.h:853
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::GetRetVal
RetType GetRetVal() noexcept
Definition DelegateAsyncWait.h:1044
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::AsyncInvoke
auto AsyncInvoke(Args... args)
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:988
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait
DelegateFunctionAsyncWait(const ClassType &rhs)
Definition DelegateAsyncWait.h:857
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::Bind
void Bind(FunctionType func, DelegateThread &thread)
Bind a std::function to a delegate.
Definition DelegateAsyncWait.h:864
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::IsSuccess
bool IsSuccess() noexcept
Definition DelegateAsyncWait.h:1040
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsyncWait.h:891
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::FunctionType
std::function< RetType(Args...)> FunctionType
Definition DelegateAsyncWait.h:848
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateInvoke
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg) override
Invoke the delegate function on the destination thread. Called by the destination thread.
Definition DelegateAsyncWait.h:1008
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:941
+
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition DelegateAsyncWait.h:902
DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait
DelegateFunctionAsyncWait()=delete
-
DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>
DelegateMemberAsync<> class asynchronously invokes a class member target function....
Definition DelegateAsync.h:252
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>
DelegateMemberAsyncWait<> class asynchronously block invokes a class member target function.
Definition DelegateAsyncWait.h:356
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait
DelegateMemberAsyncWait(const ClassType &rhs)
Definition DelegateAsyncWait.h:373
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsyncWait.h:395
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateInvoke
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg) override
Invoke the delegate function on the destination thread.
Definition DelegateAsyncWait.h:526
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Bind a member function to a delegate.
Definition DelegateAsyncWait.h:380
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsyncWait.h:405
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke delegate function asynchronously and block for function return value.
Definition DelegateAsyncWait.h:450
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait
DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
Definition DelegateAsyncWait.h:369
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsyncWait.h:412
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::AsyncInvoke
auto AsyncInvoke(Args... args)
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:504
+
DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>
DelegateMemberAsync<> class asynchronously invokes a class member target function.
Definition DelegateAsync.h:263
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>
DelegateMemberAsyncWait<> class asynchronously block invokes a class member target function.
Definition DelegateAsyncWait.h:366
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait
DelegateMemberAsyncWait(const ClassType &rhs)
Definition DelegateAsyncWait.h:383
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsyncWait.h:405
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateInvoke
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg) override
Invoke the delegate function on the destination thread. Called by the destination thread.
Definition DelegateAsyncWait.h:539
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Bind a member function to a delegate.
Definition DelegateAsyncWait.h:390
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsyncWait.h:415
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:472
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait
DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
Definition DelegateAsyncWait.h:379
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::GetRetVal
RetType GetRetVal() noexcept
Definition DelegateAsyncWait.h:575
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsyncWait.h:422
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::AsyncInvoke
auto AsyncInvoke(Args... args)
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:519
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait
DelegateMemberAsyncWait()=delete
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait
DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
Definition DelegateAsyncWait.h:365
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::ObjectPtr
TClass * ObjectPtr
Definition DelegateAsyncWait.h:358
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsyncWait.h:423
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::IsSuccess
bool IsSuccess()
Definition DelegateAsyncWait.h:562
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::GetRetVal
RetType GetRetVal()
Definition DelegateAsyncWait.h:566
-
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Bind a const member function to a delegate.
Definition DelegateAsyncWait.h:385
-
DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>
DelegateMemberSpAsync<> class asynchronously invokes a std::shared_ptr target function.
Definition DelegateAsync.h:457
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>
DelegateMemberSpAsyncWait<> class asynchronously block invokes a std::shared_ptr target function.
Definition DelegateAsyncWait.h:589
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsyncWait.h:628
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::ObjectPtr
std::shared_ptr< TClass > ObjectPtr
Definition DelegateAsyncWait.h:591
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Bind a const member function to a delegate.
Definition DelegateAsyncWait.h:618
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::AsyncInvoke
auto AsyncInvoke(Args... args)
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:737
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsyncWait.h:645
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait
DelegateMemberSpAsyncWait(const ClassType &rhs)
Definition DelegateAsyncWait.h:606
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait
DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
Definition DelegateAsyncWait.h:598
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateInvoke
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg) override
Invoke the delegate function on the destination thread.
Definition DelegateAsyncWait.h:759
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait
DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
Definition DelegateAsyncWait.h:602
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Bind a member function to a delegate.
Definition DelegateAsyncWait.h:613
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait
DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)
Definition DelegateAsyncWait.h:375
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::ObjectPtr
TClass * ObjectPtr
Definition DelegateAsyncWait.h:368
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsyncWait.h:444
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition DelegateAsyncWait.h:433
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::IsSuccess
bool IsSuccess() noexcept
Definition DelegateAsyncWait.h:571
+
DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Bind a const member function to a delegate.
Definition DelegateAsyncWait.h:395
+
DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>
DelegateMemberSpAsync<> class asynchronously invokes a std::shared_ptr target function.
Definition DelegateAsync.h:476
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>
DelegateMemberSpAsyncWait<> class asynchronously block invokes a std::shared_ptr target function.
Definition DelegateAsyncWait.h:605
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=
ClassType & operator=(ClassType &&rhs) noexcept
Move assignment operator that transfers ownership of resources.
Definition DelegateAsyncWait.h:672
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Assign
void Assign(const ClassType &rhs)
Assigns the state of one object to another.
Definition DelegateAsyncWait.h:644
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::ObjectPtr
std::shared_ptr< TClass > ObjectPtr
Definition DelegateAsyncWait.h:607
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::GetRetVal
RetType GetRetVal() noexcept
Definition DelegateAsyncWait.h:814
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)
Bind a const member function to a delegate.
Definition DelegateAsyncWait.h:634
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::AsyncInvoke
auto AsyncInvoke(Args... args)
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:758
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=
ClassType & operator=(const ClassType &rhs)
Assignment operator that assigns the state of one object to another.
Definition DelegateAsyncWait.h:661
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait
DelegateMemberSpAsyncWait(const ClassType &rhs)
Definition DelegateAsyncWait.h:622
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateInvoke
virtual void DelegateInvoke(std::shared_ptr< DelegateMsg > msg) override
Invoke the delegate function on the destination thread. Called by the destination thread.
Definition DelegateAsyncWait.h:778
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait
DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
Definition DelegateAsyncWait.h:618
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait
DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)
Definition DelegateAsyncWait.h:614
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Bind
void Bind(ObjectPtr object, MemberFunc func, DelegateThread &thread)
Bind a member function to a delegate.
Definition DelegateAsyncWait.h:629
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait
DelegateMemberSpAsyncWait()=delete
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsyncWait.h:656
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsyncWait.h:638
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::IsSuccess
bool IsSuccess()
Definition DelegateAsyncWait.h:795
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke delegate function asynchronously and block for function return value.
Definition DelegateAsyncWait.h:683
-
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::GetRetVal
RetType GetRetVal()
Definition DelegateAsyncWait.h:799
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator==
virtual bool operator==(const DelegateBase &rhs) const override
Compares two delegate objects for equality.
Definition DelegateAsyncWait.h:683
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Clone
virtual ClassType * Clone() const override
Creates a copy of the current object.
Definition DelegateAsyncWait.h:654
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator()
virtual RetType operator()(Args... args) override
Invoke delegate function asynchronously and block for function return value. Called by the source thr...
Definition DelegateAsyncWait.h:711
+
DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::IsSuccess
bool IsSuccess() noexcept
Definition DelegateAsyncWait.h:810
DelegateLib::DelegateMsg
Base class for all delegate inter-thread messages.
Definition DelegateMsg.h:22
DelegateLib::DelegateThread
Definition DelegateThread.h:16
DelegateLib::Semaphore
A semaphore wrapper class.
Definition Semaphore.h:19
DelegateLib
Definition Delegate.h:18
-
DelegateLib::MakeDelegate
DelegateFree< RetType(Args...)> MakeDelegate(RetType(*func)(Args... args))
Creates a delegate that binds to a free function.
Definition Delegate.h:539
+
DelegateLib::MakeDelegate
DelegateFree< RetType(Args...)> MakeDelegate(RetType(*func)(Args... args))
Creates a delegate that binds to a free function.
Definition Delegate.h:597
DelegateLib::WAIT_INFINITE
constexpr auto WAIT_INFINITE
Definition DelegateAsyncWait.h:49
-
DelegateLib::DelegateFreeAsync
Definition DelegateAsync.h:61
+
DelegateLib::DelegateFreeAsync
Definition DelegateAsync.h:59
DelegateLib::DelegateFreeAsyncWait
Definition DelegateAsyncWait.h:110
-
DelegateLib::DelegateFunctionAsync
Definition DelegateAsync.h:656
-
DelegateLib::DelegateFunctionAsyncWait
Definition DelegateAsyncWait.h:815
-
DelegateLib::DelegateMemberAsync
Definition DelegateAsync.h:245
-
DelegateLib::DelegateMemberAsyncWait
Definition DelegateAsyncWait.h:349
-
DelegateLib::DelegateMemberSpAsync
Definition DelegateAsync.h:450
-
DelegateLib::DelegateMemberSpAsyncWait
Definition DelegateAsyncWait.h:582
+
DelegateLib::DelegateFunctionAsync
Definition DelegateAsync.h:683
+
DelegateLib::DelegateFunctionAsyncWait
Definition DelegateAsyncWait.h:837
+
DelegateLib::DelegateMemberAsync
Definition DelegateAsync.h:256
+
DelegateLib::DelegateMemberAsyncWait
Definition DelegateAsyncWait.h:359
+
DelegateLib::DelegateMemberSpAsync
Definition DelegateAsync.h:469
+
DelegateLib::DelegateMemberSpAsyncWait
Definition DelegateAsyncWait.h:598
diff --git a/doxygen/html/_multicast_delegate_8h_source.html b/doxygen/html/_multicast_delegate_8h_source.html index 3878aab..0822569 100644 --- a/doxygen/html/_multicast_delegate_8h_source.html +++ b/doxygen/html/_multicast_delegate_8h_source.html @@ -123,7 +123,7 @@
30 void operator()(Args... args) {
31 for (Delegate<RetType(Args...)>* delegate : m_delegates)
-
32 (*delegate)(args...); // Invoke delegate callback
+
32 (*delegate)(std::forward<Args>(args)...); // Invoke delegate callback
33 }
34
diff --git a/doxygen/html/_singlecast_delegate_8h_source.html b/doxygen/html/_singlecast_delegate_8h_source.html index 83fcb71..8790340 100644 --- a/doxygen/html/_singlecast_delegate_8h_source.html +++ b/doxygen/html/_singlecast_delegate_8h_source.html @@ -120,7 +120,7 @@
23
24 RetType operator()(Args... args) {
-
25 return (*m_delegate)(args...); // Invoke delegate callback
+
25 return (*m_delegate)(std::forward<Args>(args)...); // Invoke delegate callback
26 }
27
diff --git a/doxygen/html/annotated.html b/doxygen/html/annotated.html index f524385..f24cb48 100644 --- a/doxygen/html/annotated.html +++ b/doxygen/html/annotated.html @@ -122,7 +122,7 @@  CDelegateMember  CDelegateMember< TClass, RetType(Args...)>DelegateMember<> class synchronously invokes a class member target function using a class object pointer  CDelegateMemberAsync - CDelegateMemberAsync< TClass, RetType(Args...)>DelegateMemberAsync<> class asynchronously invokes a class member target function. @tprarm TClass The class type that contains the member function + CDelegateMemberAsync< TClass, RetType(Args...)>DelegateMemberAsync<> class asynchronously invokes a class member target function  CDelegateMemberAsyncWait  CDelegateMemberAsyncWait< TClass, RetType(Args...)>DelegateMemberAsyncWait<> class asynchronously block invokes a class member target function  CDelegateMemberSp diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_3_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_3_01_ret_type_07_args_8_8_8_08_4.html index 879f977..0a00186 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_3_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_3_01_ret_type_07_args_8_8_8_08_4.html @@ -120,7 +120,7 @@ DelegateLib::DelegateMemberSp< TClass, RetType(Args...)> DelegateLib::DelegateFreeAsync< RetType(Args...)> DelegateLib::DelegateFunctionAsync< RetType(Args...)> -DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> +DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> DelegateLib::DelegateFreeAsyncWait< RetType(Args...)> DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)> diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_base.html b/doxygen/html/class_delegate_lib_1_1_delegate_base.html index a4374fb..db9005a 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_base.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_base.html @@ -120,7 +120,7 @@ DelegateLib::DelegateMemberSp< TClass, RetType(Args...)> DelegateLib::DelegateFreeAsync< RetType(Args...)> DelegateLib::DelegateFunctionAsync< RetType(Args...)> -DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> +DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> DelegateLib::DelegateFreeAsyncWait< RetType(Args...)> DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)> diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4-members.html index 0ca81b4..c1335c2 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4-members.html @@ -105,18 +105,20 @@ Assign(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline Bind(FreeFunc func)DelegateLib::DelegateFree< RetType(Args...)>inline ClassType typedefDelegateLib::DelegateFree< RetType(Args...)> - Clear()DelegateLib::DelegateFree< RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateFree< RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateFree< RetType(Args...)>inlinevirtual DelegateBase()=defaultDelegateLib::DelegateBase DelegateFree(FreeFunc func)DelegateLib::DelegateFree< RetType(Args...)>inline DelegateFree(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline - DelegateFree()=defaultDelegateLib::DelegateFree< RetType(Args...)> - Empty() constDelegateLib::DelegateFree< RetType(Args...)>inline - FreeFunc typedefDelegateLib::DelegateFree< RetType(Args...)> - operator bool() constDelegateLib::DelegateFree< RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateFree< RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline + DelegateFree(ClassType &&rhs) noexceptDelegateLib::DelegateFree< RetType(Args...)>inline + DelegateFree()=defaultDelegateLib::DelegateFree< RetType(Args...)> + Empty() const noexceptDelegateLib::DelegateFree< RetType(Args...)>inline + FreeFunc typedefDelegateLib::DelegateFree< RetType(Args...)> + operator bool() const noexceptDelegateLib::DelegateFree< RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateFree< RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFree< RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateFree< RetType(Args...)>inlinevirtual ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html index 999c3d2..31e9fbe 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html @@ -136,6 +136,9 @@  DelegateFree (const ClassType &rhs)  Copy constructor that creates a copy of the given instance.
  + DelegateFree (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateFree ()=default  Default constructor creates an empty delegate.
  @@ -154,18 +157,21 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  virtual bool operator== (const DelegateBase &rhs) const override  Compares two delegate objects for equality.
  -bool Empty () const - Check if the delegate is bound to a target function.
-  -void Clear () - Clear the target function.
-  - operator bool () const - Implicit conversion operator to bool.
-  +bool Empty () const noexcept + Check if the delegate is bound to a target function.
+  +void Clear () noexcept + Clear the target function.
+  + operator bool () const noexcept + Implicit conversion operator to bool.
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)> - Public Member Functions inherited from DelegateLib::DelegateBase  DelegateBase ()=default @@ -221,7 +227,7 @@

Constructor & Destructor Documentation

-

◆ DelegateFree() [1/3]

+

◆ DelegateFree() [1/4]

@@ -256,7 +262,7 @@

-

◆ DelegateFree() [2/3]

+

◆ DelegateFree() [2/4]

@@ -288,10 +294,45 @@

+

◆ DelegateFree() [3/4]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move constructor that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
-

◆ DelegateFree() [3/3]

+

◆ DelegateFree() [4/4]

@@ -390,8 +431,8 @@

-

◆ Clear()

+ +

◆ Clear()

@@ -410,7 +451,7 @@

-inline +inlinenoexcept

@@ -455,8 +496,8 @@

-

◆ Empty()

+ +

◆ Empty()

@@ -475,7 +516,7 @@

-inline +inlinenoexcept

@@ -485,8 +526,8 @@

-

◆ operator bool()

+ +

◆ operator bool()

+ +

◆ operator=() [1/2]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateFree< RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.js index d4e09ff..36f2c0f 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.js @@ -4,14 +4,16 @@ var class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4 = [ "FreeFunc", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a675cfeb6a9d7e08307ee60747977b795", null ], [ "DelegateFree", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a0394e77858e71a549cf0c21eca681323", null ], [ "DelegateFree", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4d544e9255d64999dc12c465de903ee", null ], + [ "DelegateFree", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a07def835ede6815d619f525440faf21a", null ], [ "DelegateFree", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8", null ], [ "Assign", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad50bc3385f014ff12cf61c16c030f9c0", null ], [ "Bind", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a73c64a35a3d0cbae23a6779a6a53aa19", null ], - [ "Clear", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ae4485878a0799f970db1d8f283bc80a0", null ], + [ "Clear", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a32daf44235f34ed06a33fb5cdf768842", null ], [ "Clone", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a6d5ded6c118f909f556b9596737a2347", null ], - [ "Empty", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad443789fc8236d866f21a6082254a5cb", null ], - [ "operator bool", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ada97e2f083a3745b45221ec3f99763c7", null ], + [ "Empty", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#af8f7c7ac3313f9d219d92272b104024a", null ], + [ "operator bool", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7ded9bcd5b51d3d15d9470c9f21af216", null ], [ "operator()", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a3e31fdd4391c352138672960a50e973d", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aeaff06f2a709a7602af82cb936e68bbf", null ], [ "operator=", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137", null ], [ "operator==", "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a487de94ebd8c683330785e755a6539c2", null ] ]; \ No newline at end of file diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4-members.html index 7ee861b..4634514 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4-members.html @@ -109,25 +109,29 @@ Bind(FreeFunc func, DelegateThread &thread)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline DelegateLib::DelegateFree< RetType(Args...)>::Bind(FreeFunc func)DelegateLib::DelegateFree< RetType(Args...)>inline ClassType typedefDelegateLib::DelegateFreeAsync< RetType(Args...)> - Clear()DelegateLib::DelegateFree< RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateFree< RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateFreeAsync< RetType(Args...)>inlinevirtual DelegateBase()=defaultDelegateLib::DelegateBase DelegateFree(FreeFunc func)DelegateLib::DelegateFree< RetType(Args...)>inline DelegateFree(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline - DelegateFree()=defaultDelegateLib::DelegateFree< RetType(Args...)> - DelegateFreeAsync(FreeFunc func, DelegateThread &thread)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline - DelegateFreeAsync(const ClassType &rhs)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline + DelegateFree(ClassType &&rhs) noexceptDelegateLib::DelegateFree< RetType(Args...)>inline + DelegateFree()=defaultDelegateLib::DelegateFree< RetType(Args...)> + DelegateFreeAsync(FreeFunc func, DelegateThread &thread)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline + DelegateFreeAsync(const ClassType &rhs)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline + DelegateFreeAsync(ClassType &&rhs) noexceptDelegateLib::DelegateFreeAsync< RetType(Args...)>inline DelegateFreeAsync()=deleteDelegateLib::DelegateFreeAsync< RetType(Args...)> DelegateInvoke(std::shared_ptr< DelegateMsg > msg)DelegateLib::DelegateFreeAsync< RetType(Args...)>inlinevirtual - Empty() constDelegateLib::DelegateFree< RetType(Args...)>inline + Empty() const noexceptDelegateLib::DelegateFree< RetType(Args...)>inline FreeFunc typedefDelegateLib::DelegateFreeAsync< RetType(Args...)> GetSync()DelegateLib::DelegateFreeAsync< RetType(Args...)>inlineprotected - GetThread()DelegateLib::DelegateFreeAsync< RetType(Args...)>inline - operator bool() constDelegateLib::DelegateFree< RetType(Args...)>inlineexplicit + GetThread() noexceptDelegateLib::DelegateFreeAsync< RetType(Args...)>inline + operator bool() const noexceptDelegateLib::DelegateFree< RetType(Args...)>inlineexplicit operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual operator()(Args... args) overrideDelegateLib::DelegateFreeAsync< RetType(Args...)>inlinevirtual operator=(const ClassType &rhs)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline - DelegateLib::DelegateFree< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFreeAsync< RetType(Args...)>inline + DelegateLib::DelegateFree< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline + DelegateLib::DelegateFree< RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFree< RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateFreeAsync< RetType(Args...)>inlinevirtual SetSync(bool sync)DelegateLib::DelegateFreeAsync< RetType(Args...)>inlineprotected ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html index 0a444e7..0b9226c 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html @@ -145,6 +145,9 @@  DelegateFreeAsync (const ClassType &rhs)  Copy constructor that creates a copy of the given instance.
  + DelegateFreeAsync (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateFreeAsync ()=delete   void Bind (FreeFunc func, DelegateThread &thread) @@ -159,6 +162,9 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  virtual bool operator== (const DelegateBase &rhs) const override  Compares two delegate objects for equality.
  @@ -171,9 +177,9 @@ virtual void DelegateInvoke (std::shared_ptr< DelegateMsg > msg)  Invoke the delegate function on the destination thread. Called by the destintation thread.
  -DelegateThreadGetThread () - Get the destination thread that the target function is invoked on.
-  +DelegateThreadGetThread () noexcept + Get the destination thread that the target function is invoked on.
- Public Member Functions inherited from DelegateLib::DelegateFree< RetType(Args...)>  DelegateFree (FreeFunc func)  Constructor to create a class instance.
@@ -181,6 +187,9 @@  DelegateFree (const ClassType &rhs)  Copy constructor that creates a copy of the given instance.
  + DelegateFree (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateFree ()=default  Default constructor creates an empty delegate.
  @@ -193,15 +202,18 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  -bool Empty () const - Check if the delegate is bound to a target function.
-  -void Clear () - Clear the target function.
-  - operator bool () const - Implicit conversion operator to bool.
-  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  +bool Empty () const noexcept + Check if the delegate is bound to a target function.
+  +void Clear () noexcept + Clear the target function.
+  + operator bool () const noexcept + Implicit conversion operator to bool.
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)> - Public Member Functions inherited from DelegateLib::DelegateBase  DelegateBase ()=default @@ -283,7 +295,7 @@

Constructor & Destructor Documentation

-

◆ DelegateFreeAsync() [1/3]

+

◆ DelegateFreeAsync() [1/4]

@@ -323,7 +335,7 @@

-

◆ DelegateFreeAsync() [2/3]

+

◆ DelegateFreeAsync() [2/4]

@@ -355,10 +367,45 @@

+

◆ DelegateFreeAsync() [3/4]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move constructor that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
-

◆ DelegateFreeAsync() [3/3]

+

◆ DelegateFreeAsync() [4/4]

@@ -600,8 +646,8 @@

-

◆ GetThread()

+ +

◆ GetThread()

+ +

◆ operator=() [1/2]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.js index 5601a61..9420156 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.js @@ -5,6 +5,7 @@ var class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4 [ "FreeFunc", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#abd1ecddf8c92d4c3544865fffb36688b", null ], [ "DelegateFreeAsync", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aa527333a1d851bf51a8805496983691a", null ], [ "DelegateFreeAsync", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#af28c5262b9be9417d3b40804b6d473d3", null ], + [ "DelegateFreeAsync", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d63a381bb317b348715309c5e741a36", null ], [ "DelegateFreeAsync", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4", null ], [ "Assign", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a98d999c16d8eff2e9967d0a4c25b9d41", null ], [ "AsyncInvoke", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a2f0ac18839223393d6c8a76beb971478", null ], @@ -12,8 +13,9 @@ var class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4 [ "Clone", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afe0877cb9e0d97f5b5ca408de1562b89", null ], [ "DelegateInvoke", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a18d39e4e8e3e6906fd9c07ada1ac5bc6", null ], [ "GetSync", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a73fa99c10f6b68b771bb8e83adffc444", null ], - [ "GetThread", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4f86a71601b797dc9356f0f27e61327f", null ], + [ "GetThread", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ad5e3487debe918c8c62d23a94bd9aac8", null ], [ "operator()", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d6f10d5f2c1b9215b59946a77edf6f6", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aec5509934f475c10b4eee26512a08c33", null ], [ "operator=", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4", null ], [ "operator==", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a9ef5e4510f2f3378d0dd0c3ff714e3bf", null ], [ "SetSync", "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae1af8ea348c4121033e815ffb91ffc7f", null ] diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4-members.html index 717774a..e6da769 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4-members.html @@ -110,31 +110,37 @@ Bind(FreeFunc func, DelegateThread &thread)DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline DelegateLib::DelegateFree< RetType(Args...)>::Bind(FreeFunc func)DelegateLib::DelegateFree< RetType(Args...)>inline ClassType typedefDelegateLib::DelegateFreeAsyncWait< RetType(Args...)> - Clear()DelegateLib::DelegateFree< RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateFree< RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inlinevirtual DelegateBase()=defaultDelegateLib::DelegateBase DelegateFree(FreeFunc func)DelegateLib::DelegateFree< RetType(Args...)>inline DelegateFree(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline - DelegateFree()=defaultDelegateLib::DelegateFree< RetType(Args...)> - DelegateFreeAsync(FreeFunc func, DelegateThread &thread)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline - DelegateFreeAsync(const ClassType &rhs)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline + DelegateFree(ClassType &&rhs) noexceptDelegateLib::DelegateFree< RetType(Args...)>inline + DelegateFree()=defaultDelegateLib::DelegateFree< RetType(Args...)> + DelegateFreeAsync(FreeFunc func, DelegateThread &thread)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline + DelegateFreeAsync(const ClassType &rhs)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline + DelegateFreeAsync(ClassType &&rhs) noexceptDelegateLib::DelegateFreeAsync< RetType(Args...)>inline DelegateFreeAsync()=deleteDelegateLib::DelegateFreeAsync< RetType(Args...)> - DelegateFreeAsyncWait(FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline + DelegateFreeAsyncWait(FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline DelegateFreeAsyncWait(const ClassType &rhs)DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline - DelegateFreeAsyncWait()=deleteDelegateLib::DelegateFreeAsyncWait< RetType(Args...)> - DelegateInvoke(std::shared_ptr< DelegateMsg > msg) overrideDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inlinevirtual - Empty() constDelegateLib::DelegateFree< RetType(Args...)>inline - FreeFunc typedefDelegateLib::DelegateFreeAsyncWait< RetType(Args...)> - GetRetVal()DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline - GetSync()DelegateLib::DelegateFreeAsync< RetType(Args...)>inlineprotected - GetThread()DelegateLib::DelegateFreeAsync< RetType(Args...)>inline - IsSuccess()DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline - operator bool() constDelegateLib::DelegateFree< RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline + DelegateFreeAsyncWait(ClassType &&rhs) noexceptDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline + DelegateFreeAsyncWait()=deleteDelegateLib::DelegateFreeAsyncWait< RetType(Args...)> + DelegateInvoke(std::shared_ptr< DelegateMsg > msg) overrideDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inlinevirtual + Empty() const noexceptDelegateLib::DelegateFree< RetType(Args...)>inline + FreeFunc typedefDelegateLib::DelegateFreeAsyncWait< RetType(Args...)> + GetRetVal() noexceptDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline + GetSync()DelegateLib::DelegateFreeAsync< RetType(Args...)>inlineprotected + GetThread() noexceptDelegateLib::DelegateFreeAsync< RetType(Args...)>inline + IsSuccess() noexceptDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline + operator bool() const noexceptDelegateLib::DelegateFree< RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inline DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFreeAsync< RetType(Args...)>inline - DelegateLib::DelegateFree< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline + DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFreeAsync< RetType(Args...)>inline + DelegateLib::DelegateFree< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFree< RetType(Args...)>inline + DelegateLib::DelegateFree< RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFree< RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateFreeAsyncWait< RetType(Args...)>inlinevirtual SetSync(bool sync)DelegateLib::DelegateFreeAsync< RetType(Args...)>inlineprotected ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html index 7b40eae..6628db4 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html @@ -145,12 +145,15 @@ - - - + + + + + + @@ -165,6 +168,9 @@ + + + @@ -177,10 +183,10 @@ - - - - + + + + @@ -188,6 +194,9 @@ + + + @@ -199,12 +208,15 @@ + + + - - - + + + @@ -212,6 +224,9 @@ + + + @@ -224,15 +239,18 @@ - - - - - - - - - + + + + + + + + + + + + @@ -314,8 +332,8 @@

Constructor & Destructor Documentation

- -

◆ DelegateFreeAsyncWait() [1/3]

+ +

◆ DelegateFreeAsyncWait() [1/4]

@@ -338,7 +356,7 @@

- +

Public Member Functions

 DelegateFreeAsyncWait (FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
 Constructor to create a class instance.
 
 DelegateFreeAsyncWait (FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)
 Constructor to create a class instance.
 
 DelegateFreeAsyncWait (const ClassType &rhs)
 Copy constructor that creates a copy of the given instance.
 
 DelegateFreeAsyncWait (ClassType &&rhs) noexcept
 Move constructor that transfers ownership of resources.
 
 DelegateFreeAsyncWait ()=delete
 
void Bind (FreeFunc func, DelegateThread &thread)
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
virtual bool operator== (const DelegateBase &rhs) const override
 Compares two delegate objects for equality.
 
virtual void DelegateInvoke (std::shared_ptr< DelegateMsg > msg) override
 Invoke the delegate function on the destination thread. Called by the destination thread.
 
bool IsSuccess ()
 
RetType GetRetVal ()
 
bool IsSuccess () noexcept
 
RetType GetRetVal () noexcept
 
- Public Member Functions inherited from DelegateLib::DelegateFreeAsync< RetType(Args...)>
 DelegateFreeAsync (FreeFunc func, DelegateThread &thread)
 Constructor to create a class instance.
 DelegateFreeAsync (const ClassType &rhs)
 Copy constructor that creates a copy of the given instance.
 
 DelegateFreeAsync (ClassType &&rhs) noexcept
 Move constructor that transfers ownership of resources.
 
 DelegateFreeAsync ()=delete
 
void Bind (FreeFunc func, DelegateThread &thread)
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
void AsyncInvoke (Args... args)
 Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
 
DelegateThreadGetThread ()
 Get the destination thread that the target function is invoked on.
 
DelegateThreadGetThread () noexcept
 Get the destination thread that the target function is invoked on.
 
- Public Member Functions inherited from DelegateLib::DelegateFree< RetType(Args...)>
 DelegateFree (FreeFunc func)
 Constructor to create a class instance.
 DelegateFree (const ClassType &rhs)
 Copy constructor that creates a copy of the given instance.
 
 DelegateFree (ClassType &&rhs) noexcept
 Move constructor that transfers ownership of resources.
 
 DelegateFree ()=default
 Default constructor creates an empty delegate.
 
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
bool Empty () const
 Check if the delegate is bound to a target function.
 
void Clear ()
 Clear the target function.
 
 operator bool () const
 Implicit conversion operator to bool.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
bool Empty () const noexcept
 Check if the delegate is bound to a target function.
 
void Clear () noexcept
 Clear the target function.
 
 operator bool () const noexcept
 Implicit conversion operator to bool.
 
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)>
- Public Member Functions inherited from DelegateLib::DelegateBase
 DelegateBase ()=default
std::chrono::milliseconds timeout )std::chrono::milliseconds timeout = WAIT_INFINITE )
@@ -362,7 +380,7 @@

-

◆ DelegateFreeAsyncWait() [2/3]

+

◆ DelegateFreeAsyncWait() [2/4]

@@ -394,10 +412,45 @@

+

◆ DelegateFreeAsyncWait() [3/4]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move constructor that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
-

◆ DelegateFreeAsyncWait() [3/3]

+

◆ DelegateFreeAsyncWait() [4/4]

@@ -607,8 +660,8 @@

-

◆ GetRetVal()

+ +

◆ GetRetVal()

@@ -627,7 +680,7 @@

-inline +inlinenoexcept

@@ -635,8 +688,8 @@

-

◆ IsSuccess()

+ +

◆ IsSuccess()

@@ -655,7 +708,7 @@

-inline +inlinenoexcept

@@ -690,21 +743,57 @@

DelegateInvoke() must be called by the destination thread to invoke the target function.

-

If the destination thread invokes the function within m_timeout, the return value is obtained from the destination thread function call. If m_timeout expires before the destination thread processes the request, the target function is not invoked and a default return value is returned to the caller with an undefined value. Use IsSuccess() to check for success before using the return value. Alternatively, use AsyncInvoke() and check the std::optional return value.

+

If the destination thread invokes the function within m_timeout, the return value is obtained from the destination thread function call. If m_timeout expires before the destination thread processes the request, the target function is not invoked and a default return value is returned to the caller with an undefined value. Use IsSuccess() to check for success before using the return value. Alternatively, use AsyncInvoke() and check the std::optional return value.

The DelegateAsyncWaitMsg does not duplicated and copy the function arguments into heap memory. The source thread waits on the destintation thread to complete, therefore argument data is shared between the source and destination threads and simultaneous access is prevented using a mutex.

Parameters
[in]argsThe function arguments, if any.
-
Returns
The bound function return value, if any. Use IsSuccess() to determine if the return value is valid before use.
+
Returns
The bound function return value, if any. Use IsSuccess() to determine if the return value is valid before use.

Reimplemented from DelegateLib::DelegateFreeAsync< RetType(Args...)>.

+

+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.js index 617ba30..c24f0b0 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.js @@ -3,17 +3,19 @@ var class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_ [ "BaseType", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aa0a82c2354b7c9f26c88330ba55fd488", null ], [ "ClassType", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8ec67602063e92a1ecb98300fac2486c", null ], [ "FreeFunc", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#affde0c05f770aa97dfb1744bbdd33d0d", null ], - [ "DelegateFreeAsyncWait", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7fb45bfb235c1179c198c8f594179a13", null ], + [ "DelegateFreeAsyncWait", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ab6b9417906375d1e4b8db019f9a84193", null ], [ "DelegateFreeAsyncWait", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0548bcb02ed5a326786b2ae237fedc3c", null ], + [ "DelegateFreeAsyncWait", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a09e05865191bc2cb92b27a1fc9a91304", null ], [ "DelegateFreeAsyncWait", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa", null ], [ "Assign", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae495a55e908778e619d186eb9afb9ecc", null ], [ "AsyncInvoke", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#acca23e7595f55d4509625332f650de8f", null ], [ "Bind", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8e036665e5b6f1ef58e7fc745d7a9542", null ], [ "Clone", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ac4e2726464bd640ef6c7993afe95e1ca", null ], [ "DelegateInvoke", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeca8d0211d34404e9fd2ecb4d0d356b9", null ], - [ "GetRetVal", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a48023eef054e9c8fd98f8356d9357d48", null ], - [ "IsSuccess", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aad83ab252e882f069a4e074ba6daff93", null ], + [ "GetRetVal", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1c22a234daf732b6818127a5311572f4", null ], + [ "IsSuccess", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a14fd5bec6ca0f9a293d0aade1848ca32", null ], [ "operator()", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a79322ee2599e067f1be1ed9f803bb211", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abdbb3701f55d5d075ea044fbe8f9c6d3", null ], [ "operator=", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820", null ], [ "operator==", "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae92c9a822eb76f710468e400d22847c9", null ] ]; \ No newline at end of file diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4-members.html index e069472..8007a2d 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4-members.html @@ -105,18 +105,20 @@ Assign(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline Bind(FunctionType func)DelegateLib::DelegateFunction< RetType(Args...)>inline ClassType typedefDelegateLib::DelegateFunction< RetType(Args...)> - Clear()DelegateLib::DelegateFunction< RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateFunction< RetType(Args...)>inlinevirtual DelegateBase()=defaultDelegateLib::DelegateBase DelegateFunction(FunctionType func)DelegateLib::DelegateFunction< RetType(Args...)>inline DelegateFunction(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline - DelegateFunction()=defaultDelegateLib::DelegateFunction< RetType(Args...)> - Empty() constDelegateLib::DelegateFunction< RetType(Args...)>inline - FunctionType typedefDelegateLib::DelegateFunction< RetType(Args...)> - operator bool() constDelegateLib::DelegateFunction< RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateFunction< RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline + DelegateFunction(ClassType &&rhs) noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline + DelegateFunction()=defaultDelegateLib::DelegateFunction< RetType(Args...)> + Empty() const noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline + FunctionType typedefDelegateLib::DelegateFunction< RetType(Args...)> + operator bool() const noexceptDelegateLib::DelegateFunction< RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateFunction< RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateFunction< RetType(Args...)>inlinevirtual ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual
diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html index aa076d1..3aafb5e 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html @@ -134,8 +134,11 @@  Constructor to create a class instance.
   DelegateFunction (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
  + DelegateFunction (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateFunction ()=default  Default constructor creates an empty delegate.
  @@ -154,18 +157,21 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  virtual bool operator== (const DelegateBase &rhs) const override  Compares two delegate objects for equality.
  -bool Empty () const - Check if the delegate is bound to a target function.
-  -void Clear () - Clear the target function.
-  - operator bool () const - Implicit conversion operator to bool.
-  +bool Empty () const noexcept + Check if the delegate is bound to a target function.
+  +void Clear () noexcept + Clear the target function.
+  + operator bool () const noexcept + Implicit conversion operator to bool.
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)> - Public Member Functions inherited from DelegateLib::DelegateBase  DelegateBase ()=default @@ -189,7 +195,7 @@ safe -= MakeDelegate(f2); // Should remove f2, not f1!

Depending on how usage, this may never be a issue but its worth noting.

-

The DelegateMember<> class has no such limitations and works under all conditions, including comparing two instance functions of the same class.

+

The other delegate class has no such limitations and works under all conditions, including comparing two instance functions of the same class.

Template Parameters
@@ -232,7 +238,7 @@

Constructor & Destructor Documentation

-

◆ DelegateFunction() [1/3]

+

◆ DelegateFunction() [1/4]

RetTypeThe return type of the bound delegate function.
+ +
[in]rhsThe object to copy from.
+
+
+ +
+
+ +

◆ DelegateFunction() [3/4]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move constructor that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
-

◆ DelegateFunction() [3/3]

+

◆ DelegateFunction() [4/4]

@@ -397,8 +442,8 @@

-

◆ Clear()

+ +

◆ Clear()

@@ -417,7 +462,7 @@

-inline +inlinenoexcept

@@ -462,8 +507,8 @@

-

◆ Empty()

+ +

◆ Empty()

@@ -482,7 +527,7 @@

-inline +inlinenoexcept

@@ -492,8 +537,8 @@

-

◆ operator bool()

+ +

◆ operator bool()

+ +

◆ operator=() [1/2]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateFunction< RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.js index 6737bcc..69cd37f 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.js @@ -4,14 +4,16 @@ var class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4 = [ "FunctionType", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ab301553daa1552051356610973a9a284", null ], [ "DelegateFunction", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a4f5654f2336389d28212ec1d38c7f56d", null ], [ "DelegateFunction", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a1a92291f285ef7ef68cdc61b2201c5b5", null ], + [ "DelegateFunction", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae75aab7b61893e8c842451491f72be23", null ], [ "DelegateFunction", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427", null ], [ "Assign", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a813f00fad959f24480192a5a44b12cdc", null ], [ "Bind", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae08b89338a2ebf38fe31af77c5f9b400", null ], - [ "Clear", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a428e71215617457bb0146cac89a42eae", null ], + [ "Clear", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a63c632ed0a4fd7a40c27a8f05dbefa50", null ], [ "Clone", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#aff35a45eb0c37f87d4a566c3fabd0850", null ], - [ "Empty", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ac9382add63b501bdc4353cab43b98d65", null ], - [ "operator bool", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a88dd3130ce9b7fa538496a6e2988d2fb", null ], + [ "Empty", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a957f06ccfe0a582b17c0e30edb3caff5", null ], + [ "operator bool", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a95342174adf1cc93cea485abcc74b49b", null ], [ "operator()", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a782bbda436c2de4749fc8c098dd75945", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a59314657e3dfd95c0cfcff23e0356e56", null ], [ "operator=", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881", null ], [ "operator==", "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a318105c4baad7edc3ab08154aced10cc", null ] ]; \ No newline at end of file diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4-members.html index 0eb03f6..1d6f47a 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4-members.html @@ -109,28 +109,31 @@ Bind(FunctionType func, DelegateThread &thread)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline DelegateLib::DelegateFunction< RetType(Args...)>::Bind(FunctionType func)DelegateLib::DelegateFunction< RetType(Args...)>inline ClassType typedefDelegateLib::DelegateFunctionAsync< RetType(Args...)> - Clear()DelegateLib::DelegateFunction< RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateFunctionAsync< RetType(Args...)>inlinevirtual DelegateBase()=defaultDelegateLib::DelegateBase DelegateFunction(FunctionType func)DelegateLib::DelegateFunction< RetType(Args...)>inline DelegateFunction(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline - DelegateFunction()=defaultDelegateLib::DelegateFunction< RetType(Args...)> - DelegateFunctionAsync(FunctionType func, DelegateThread &thread)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline - DelegateFunctionAsync(const ClassType &rhs)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline - DelegateFunctionAsync()=deleteDelegateLib::DelegateFunctionAsync< RetType(Args...)> - DelegateInvoke(std::shared_ptr< DelegateMsg > msg)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlinevirtual - Empty() constDelegateLib::DelegateFunction< RetType(Args...)>inline - FunctionType typedefDelegateLib::DelegateFunctionAsync< RetType(Args...)> - GetSync()DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlineprotected - GetThread()DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline - operator bool() constDelegateLib::DelegateFunction< RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateFunctionAsync< RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + DelegateFunction(ClassType &&rhs) noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline + DelegateFunction()=defaultDelegateLib::DelegateFunction< RetType(Args...)> + DelegateFunctionAsync(FunctionType func, DelegateThread &thread)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + DelegateFunctionAsync(const ClassType &rhs)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + DelegateFunctionAsync()=deleteDelegateLib::DelegateFunctionAsync< RetType(Args...)> + DelegateInvoke(std::shared_ptr< DelegateMsg > msg)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlinevirtual + Empty() const noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline + FunctionType typedefDelegateLib::DelegateFunctionAsync< RetType(Args...)> + GetSync()DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlineprotected + GetThread() noexceptDelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + operator bool() const noexceptDelegateLib::DelegateFunction< RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateFunctionAsync< RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFunctionAsync< RetType(Args...)>inline DelegateLib::DelegateFunction< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline - operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateFunctionAsync< RetType(Args...)>inlinevirtual - SetSync(bool sync)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlineprotected - ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual + DelegateLib::DelegateFunction< RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline + operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateFunctionAsync< RetType(Args...)>inlinevirtual + SetSync(bool sync)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlineprotected + ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual
diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html index 8e1f11d..98b5b6d 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html @@ -143,7 +143,7 @@  Constructor to create a class instance.
   DelegateFunctionAsync (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
   DelegateFunctionAsync ()=delete   @@ -159,28 +159,34 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  virtual bool operator== (const DelegateBase &rhs) const override  Compares two delegate objects for equality.
  virtual RetType operator() (Args... args) override - Invoke the bound delegate function asynchronously.
+ Invoke the bound delegate function asynchronously. Called by the source thread.
  void AsyncInvoke (Args... args)  Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
  virtual void DelegateInvoke (std::shared_ptr< DelegateMsg > msg) - Invoke the delegate function on the destination thread.
+ Invoke the delegate function on the destination thread. Called by the destintation thread.
  -DelegateThreadGetThread () - Get the destination thread that the target function is invoked on.
-  +DelegateThreadGetThread () noexcept + Get the destination thread that the target function is invoked on.
- Public Member Functions inherited from DelegateLib::DelegateFunction< RetType(Args...)>  DelegateFunction (FunctionType func)  Constructor to create a class instance.
   DelegateFunction (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
  + DelegateFunction (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateFunction ()=default  Default constructor creates an empty delegate.
  @@ -193,15 +199,18 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  -bool Empty () const - Check if the delegate is bound to a target function.
-  -void Clear () - Clear the target function.
-  - operator bool () const - Implicit conversion operator to bool.
-  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  +bool Empty () const noexcept + Check if the delegate is bound to a target function.
+  +void Clear () noexcept + Clear the target function.
+  + operator bool () const noexcept + Implicit conversion operator to bool.
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)> - Public Member Functions inherited from DelegateLib::DelegateBase  DelegateBase ()=default @@ -349,9 +358,13 @@

-

Creates a copy of the current object.

-

Clones the current instance of the class by creating a new object and copying the state of the current object to it.

Returns
A pointer to a new ClassType instance.
-
Postcondition
The caller is responsible for deleting the clone object.
+

Copy constructor that creates a copy of the given instance.

+

This constructor initializes a new object as a copy of the provided rhs (right-hand side) object. The rhs object is used to set the state of the new instance.

Parameters
+ + +
[in]rhsThe object to copy from.
+
+

@@ -450,7 +463,6 @@

Returns
None. Function invoked asynchronously without waiting for completion.

@@ -554,10 +566,10 @@

-

Invoke the delegate function on the destination thread.

-

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. Unlike DelegateAsyncWait, a lock is not required between source and destination delegateMsg access because the source thread is not waiting for the function call to complete.

Parameters
+

Invoke the delegate function on the destination thread. Called by the destintation thread.

+

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. Unlike DelegateAsyncWait, a lock is not required between source and destination delegateMsg access because the source thread is not waiting for the function call to complete.

Parameters
- +
[in]msgThe delegate message created and sent within operator()(Args... args).
[in]msgThe delegate message created and sent within operator()(Args... args).
@@ -594,12 +606,12 @@

Get the synchronous target invoke flag.

-
Returns
true if operator()(Args... args) is to invoke synchronously. false means asychronously by sending a message.
+
Returns
true if operator()(Args... args) is to invoke synchronously. false means asychronously by sending a message.

- -

◆ GetThread()

+ +

◆ GetThread()

@@ -618,7 +630,7 @@

-inline +inlinenoexcept

@@ -652,8 +664,8 @@

-

Invoke the bound delegate function asynchronously.

-

Invoke delegate function asynchronously and do not wait for return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

+

Invoke the bound delegate function asynchronously. Called by the source thread.

+

Invoke delegate function asynchronously and do not wait for return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

The DelegateAsyncMsg duplicates and copies the function arguments into heap memory. The source thread is not required to place function arguments into the heap. The delegate library performs all necessary heap and argument coping for the caller. Ensure complex argument data types can be safely copied by creating a copy constructor if necessary.

Parameters
@@ -667,10 +679,46 @@

DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>.

+ + + +

◆ operator=() [1/2]

+ +
+
+
+template<class RetType , class... Args>
+

[in]argsThe function arguments, if any.
+ + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+

+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.js index 0c44a75..bbd5065 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.js @@ -12,8 +12,9 @@ var class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_0 [ "Clone", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a12be5d3ae814bea5de0df73d2807bedd", null ], [ "DelegateInvoke", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56930924ffa7d6662874675263e89bc5", null ], [ "GetSync", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a24d22901f60ab741597e253b7f02c174", null ], - [ "GetThread", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4ffeb3f53371220821da54b9303d5bed", null ], + [ "GetThread", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#aeafdaa26caccb52408afe591e5c54aca", null ], [ "operator()", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a1e6153da03f3d607b1e18deb391c04a4", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ac677a19f9c6ed6f0d5be06e8b1733d37", null ], [ "operator=", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b", null ], [ "operator==", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a642fc55c2dfa6f7eb29f016a7194af9a", null ], [ "SetSync", "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#acf44f40ff48ec3f1481b6dca4e08c352", null ] diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4-members.html index 4da798e..a43f790 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4-members.html @@ -110,31 +110,35 @@ Bind(FunctionType func, DelegateThread &thread)DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline DelegateLib::DelegateFunction< RetType(Args...)>::Bind(FunctionType func)DelegateLib::DelegateFunction< RetType(Args...)>inline ClassType typedefDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)> - Clear()DelegateLib::DelegateFunction< RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inlinevirtual DelegateBase()=defaultDelegateLib::DelegateBase DelegateFunction(FunctionType func)DelegateLib::DelegateFunction< RetType(Args...)>inline DelegateFunction(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline - DelegateFunction()=defaultDelegateLib::DelegateFunction< RetType(Args...)> - DelegateFunctionAsync(FunctionType func, DelegateThread &thread)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline - DelegateFunctionAsync(const ClassType &rhs)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline - DelegateFunctionAsync()=deleteDelegateLib::DelegateFunctionAsync< RetType(Args...)> - DelegateFunctionAsyncWait(FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout)DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline - DelegateFunctionAsyncWait(const ClassType &rhs)DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline - DelegateFunctionAsyncWait()=deleteDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)> - DelegateInvoke(std::shared_ptr< DelegateMsg > msg) overrideDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inlinevirtual - Empty() constDelegateLib::DelegateFunction< RetType(Args...)>inline - FunctionType typedefDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)> - GetRetVal()DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline - GetSync()DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlineprotected - GetThread()DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline - IsSuccess()DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline - operator bool() constDelegateLib::DelegateFunction< RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline + DelegateFunction(ClassType &&rhs) noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline + DelegateFunction()=defaultDelegateLib::DelegateFunction< RetType(Args...)> + DelegateFunctionAsync(FunctionType func, DelegateThread &thread)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + DelegateFunctionAsync(const ClassType &rhs)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + DelegateFunctionAsync()=deleteDelegateLib::DelegateFunctionAsync< RetType(Args...)> + DelegateFunctionAsyncWait(FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline + DelegateFunctionAsyncWait(const ClassType &rhs)DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline + DelegateFunctionAsyncWait()=deleteDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)> + DelegateInvoke(std::shared_ptr< DelegateMsg > msg) overrideDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inlinevirtual + Empty() const noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline + FunctionType typedefDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)> + GetRetVal() noexceptDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline + GetSync()DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlineprotected + GetThread() noexceptDelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + IsSuccess() noexceptDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline + operator bool() const noexceptDelegateLib::DelegateFunction< RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inline DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inline - DelegateLib::DelegateFunction< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline + DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFunctionAsync< RetType(Args...)>inline + DelegateLib::DelegateFunction< RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateFunction< RetType(Args...)>inline + DelegateLib::DelegateFunction< RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateFunction< RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>inlinevirtual SetSync(bool sync)DelegateLib::DelegateFunctionAsync< RetType(Args...)>inlineprotected ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html index e1f1273..8b3cfcd 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html @@ -145,8 +145,8 @@ - - + + @@ -163,28 +163,31 @@ + + + - + - + - - - - + + + + - + @@ -197,19 +200,25 @@ + + + - - - + + + - + + + + @@ -222,15 +231,18 @@ - - - - - - - - - + + + + + + + + + + + + @@ -313,8 +325,8 @@

Constructor & Destructor Documentation

- -

◆ DelegateFunctionAsyncWait() [1/3]

+ +

◆ DelegateFunctionAsyncWait() [1/3]

@@ -337,7 +349,7 @@

- +

Public Member Functions

 DelegateFunctionAsyncWait (FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout)
 
 DelegateFunctionAsyncWait (FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)
 
 DelegateFunctionAsyncWait (const ClassType &rhs)
 
 DelegateFunctionAsyncWait ()=delete
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
virtual bool operator== (const DelegateBase &rhs) const override
 Compares two delegate objects for equality.
 
virtual RetType operator() (Args... args) override
 Invoke delegate function asynchronously and block for function return value.
 Invoke delegate function asynchronously and block for function return value. Called by the source thread.
 
auto AsyncInvoke (Args... args)
 Invoke delegate function asynchronously and block for function return value. Called by the source thread.
 
virtual void DelegateInvoke (std::shared_ptr< DelegateMsg > msg) override
 Invoke the delegate function on the destination thread.
 Invoke the delegate function on the destination thread. Called by the destination thread.
 
bool IsSuccess ()
 
RetType GetRetVal ()
 
bool IsSuccess () noexcept
 
RetType GetRetVal () noexcept
 
- Public Member Functions inherited from DelegateLib::DelegateFunctionAsync< RetType(Args...)>
 DelegateFunctionAsync (FunctionType func, DelegateThread &thread)
 Constructor to create a class instance.
 
 DelegateFunctionAsync (const ClassType &rhs)
 Creates a copy of the current object.
 Copy constructor that creates a copy of the given instance.
 
 DelegateFunctionAsync ()=delete
 
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
void AsyncInvoke (Args... args)
 Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
 
DelegateThreadGetThread ()
 Get the destination thread that the target function is invoked on.
 
DelegateThreadGetThread () noexcept
 Get the destination thread that the target function is invoked on.
 
- Public Member Functions inherited from DelegateLib::DelegateFunction< RetType(Args...)>
 DelegateFunction (FunctionType func)
 Constructor to create a class instance.
 
 DelegateFunction (const ClassType &rhs)
 Creates a copy of the current object.
 Copy constructor that creates a copy of the given instance.
 
 DelegateFunction (ClassType &&rhs) noexcept
 Move constructor that transfers ownership of resources.
 
 DelegateFunction ()=default
 Default constructor creates an empty delegate.
 
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
bool Empty () const
 Check if the delegate is bound to a target function.
 
void Clear ()
 Clear the target function.
 
 operator bool () const
 Implicit conversion operator to bool.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
bool Empty () const noexcept
 Check if the delegate is bound to a target function.
 
void Clear () noexcept
 Clear the target function.
 
 operator bool () const noexcept
 Implicit conversion operator to bool.
 
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)>
- Public Member Functions inherited from DelegateLib::DelegateBase
 DelegateBase ()=default
std::chrono::milliseconds timeout )std::chrono::milliseconds timeout = WAIT_INFINITE )
@@ -567,11 +579,11 @@

-

Invoke the delegate function on the destination thread.

-

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. A lock is used to protect source and destination thread shared data. A semaphore is used to signal the source thread when the destination thread completes the target function call.

+

Invoke the delegate function on the destination thread. Called by the destination thread.

+

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. A lock is used to protect source and destination thread shared data. A semaphore is used to signal the source thread when the destination thread completes the target function call.

If source thread timeout expires and before the destination thread invokes the target function, the target function is not called.

Parameters
- +
[in]msgThe delegate message created and sent within operator()(Args... args).
[in]msgThe delegate message created and sent within operator()(Args... args).
@@ -580,8 +592,8 @@

-

◆ GetRetVal()

+ +

◆ GetRetVal()

@@ -600,7 +612,7 @@

-inline +inlinenoexcept

@@ -608,8 +620,8 @@

-

◆ IsSuccess()

+ +

◆ IsSuccess()

@@ -628,7 +640,7 @@

-inline +inlinenoexcept

@@ -661,23 +673,59 @@

-

Invoke delegate function asynchronously and block for function return value.

-

Invoke delegate function asynchronously and wait for the return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

-

If the destination thread invokes the function within m_timeout, the return value is obtained from the destination thread function call. If m_timeout expires before the destination thread processes the request, the target function is not invoked and a default return value is returned to the caller with an undefined value. Use IsSuccess() to check for success before using the return value. Alternatively, use AsyncInvoke() and check the std::optional return value.

+

Invoke delegate function asynchronously and block for function return value. Called by the source thread.

+

Invoke delegate function asynchronously and wait for the return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

+

If the destination thread invokes the function within m_timeout, the return value is obtained from the destination thread function call. If m_timeout expires before the destination thread processes the request, the target function is not invoked and a default return value is returned to the caller with an undefined value. Use IsSuccess() to check for success before using the return value. Alternatively, use AsyncInvoke() and check the std::optional return value.

The DelegateAsyncWaitMsg does not duplicated and copy the function arguments into heap memory. The source thread waits on the destintation thread to complete, therefore argument data is shared between the source and destination threads and simultaneous access is prevented using a mutex.

Parameters
[in]argsThe function arguments, if any.
-
Returns
The bound function return value, if any. Use IsSuccess() to determine if the return value is valid before use.
+
Returns
The bound function return value, if any. Use IsSuccess() to determine if the return value is valid before use.

Reimplemented from DelegateLib::DelegateFunctionAsync< RetType(Args...)>.

+

+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.js index d1d3ed2..338722f 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.js @@ -3,7 +3,7 @@ var class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_ [ "BaseType", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8aacf1bb9e50e7f05526aef37343e241", null ], [ "ClassType", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ab18be594adc125473e2967684953ac1c", null ], [ "FunctionType", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a793983b42fc5819a186a891b9cac5806", null ], - [ "DelegateFunctionAsyncWait", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6843df2bb2187538a52295ef40915162", null ], + [ "DelegateFunctionAsyncWait", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a12fee611f64b1ff921f144456f735c34", null ], [ "DelegateFunctionAsyncWait", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a49ee2d06133beb8f1f97d9435dd233d8", null ], [ "DelegateFunctionAsyncWait", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#afae9b073f590b47117d0ee00e100b7e2", null ], [ "Assign", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a06a1f3a07b3b85f30d1d149a8ce7694d", null ], @@ -11,9 +11,10 @@ var class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_ [ "Bind", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a56245374ac83ac8ae2cb5ea0de8907f8", null ], [ "Clone", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a06308fd077f75299814b78d042e52ac0", null ], [ "DelegateInvoke", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8a0cfe8f1e6f7bc06c161a1f210c6aa7", null ], - [ "GetRetVal", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7447f8bc35d5f0749273a90fdbca9376", null ], - [ "IsSuccess", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0db46ee0537e487e0ffa3daccf2b37aa", null ], + [ "GetRetVal", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a19e32658a811a5b584436505c46d8cf7", null ], + [ "IsSuccess", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a5e9ae067e7bc5c3621a6ad80d39cd0bc", null ], [ "operator()", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abe10c60e4a83a5611e0b9bc9ed6e05e1", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeb01775a1f4fbf735e16aca245fc08b8", null ], [ "operator=", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1", null ], [ "operator==", "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0cc272f27fb57a62d2c762f74f032eb2", null ] ]; \ No newline at end of file diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html index 1928d9b..68a9173 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html @@ -106,21 +106,23 @@ Bind(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline Bind(ObjectPtr object, ConstMemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline ClassType typedefDelegateLib::DelegateMember< TClass, RetType(Args...)> - Clear()DelegateLib::DelegateMember< TClass, RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateMember< TClass, RetType(Args...)>inlinevirtual ConstMemberFunc typedefDelegateLib::DelegateMember< TClass, RetType(Args...)> DelegateBase()=defaultDelegateLib::DelegateBase DelegateMember(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline DelegateMember(ObjectPtr object, ConstMemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline DelegateMember(const ClassType &rhs)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline - DelegateMember()=defaultDelegateLib::DelegateMember< TClass, RetType(Args...)> - Empty() constDelegateLib::DelegateMember< TClass, RetType(Args...)>inline - MemberFunc typedefDelegateLib::DelegateMember< TClass, RetType(Args...)> - ObjectPtr typedefDelegateLib::DelegateMember< TClass, RetType(Args...)> - operator bool() constDelegateLib::DelegateMember< TClass, RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateMember< TClass, RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline + DelegateMember(ClassType &&rhs) noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline + DelegateMember()=defaultDelegateLib::DelegateMember< TClass, RetType(Args...)> + Empty() const noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline + MemberFunc typedefDelegateLib::DelegateMember< TClass, RetType(Args...)> + ObjectPtr typedefDelegateLib::DelegateMember< TClass, RetType(Args...)> + operator bool() const noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateMember< TClass, RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateMember< TClass, RetType(Args...)>inlinevirtual ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual
diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html index 6cf4902..1b37f1d 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html @@ -116,7 +116,7 @@ DelegateLib::Delegate< RetType(Args...)> DelegateLib::DelegateBase -DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> +DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>
@@ -141,8 +141,11 @@  Constructor to create a class instance.
   DelegateMember (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
  + DelegateMember (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateMember ()=default  Default constructor creates an empty delegate.
  @@ -164,18 +167,21 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  virtual bool operator== (const DelegateBase &rhs) const override  Compares two delegate objects for equality.
  -bool Empty () const - Check if the delegate is bound to a target function.
-  -void Clear () - Clear the target function.
-  - operator bool () const - Implicit conversion operator to bool.
-  +bool Empty () const noexcept + Check if the delegate is bound to a target function.
+  +void Clear () noexcept + Clear the target function.
+  + operator bool () const noexcept + Implicit conversion operator to bool.
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)> - Public Member Functions inherited from DelegateLib::DelegateBase  DelegateBase ()=default @@ -264,7 +270,7 @@

Constructor & Destructor Documentation

-

◆ DelegateMember() [1/4]

+

◆ DelegateMember() [1/5]

@@ -304,7 +310,7 @@

-

◆ DelegateMember() [2/4]

+

◆ DelegateMember() [2/5]

@@ -344,7 +350,7 @@

-

◆ DelegateMember() [3/4]

+

◆ DelegateMember() [3/5]

+ +

◆ DelegateMember() [4/5]

+ +
+
+
+template<class TClass , class RetType , class... Args>
+ + + + + +
+ + + + + + + +
DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move constructor that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
-

◆ DelegateMember() [4/4]

+

◆ DelegateMember() [5/5]

@@ -519,8 +564,8 @@

-

◆ Clear()

+ +

◆ Clear()

@@ -539,7 +584,7 @@

-inline +inlinenoexcept

@@ -584,8 +629,8 @@

-

◆ Empty()

+ +

◆ Empty()

@@ -604,7 +649,7 @@

-inline +inlinenoexcept

@@ -614,8 +659,8 @@

-

◆ operator bool()

+ +

◆ operator bool()

+ +

◆ operator=() [1/2]

+ +
+
+
+template<class TClass , class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js index 69fb09e..e9f0c75 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js @@ -7,15 +7,17 @@ var class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8 [ "DelegateMember", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac0ebe807ef2e92dab70422a6f97a461f", null ], [ "DelegateMember", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab772a635e195f3553f9c43f344b262df", null ], [ "DelegateMember", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a322dd315ac65ec9fc88616913cf222c3", null ], + [ "DelegateMember", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5fc8a23d96dfd6c0fda2d7e9d73966a5", null ], [ "DelegateMember", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f", null ], [ "Assign", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa837983f1f9c0a2f8b35fb0ea4704e5b", null ], [ "Bind", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2dcf47b856e718a305b49107349e1d23", null ], [ "Bind", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2a695e30c79885ec8394cd049301fe24", null ], - [ "Clear", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aee8da785497c43d405df31eb73964956", null ], + [ "Clear", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a94073c6581ff7739523e7c8bfe57caa0", null ], [ "Clone", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af4eb4fba1da063063b5d4ba47de4299a", null ], - [ "Empty", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a664175ef9b729241d1d30237f2924ad8", null ], - [ "operator bool", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a17be8ea39567766ca64bbba8262c6807", null ], + [ "Empty", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa34f567d476fb8cba1d28d7ec664e3e2", null ], + [ "operator bool", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a412150bb991a3941c45353e4d20303ec", null ], [ "operator()", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac37f599bb6493c11c88a015c877b1530", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae31b9598c8f3e72d2adcbd9c0a1269e1", null ], [ "operator=", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83", null ], [ "operator==", "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a90f7904623f6945bd232747a207ef5a7", null ] ]; \ No newline at end of file diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html index 5928711..899a26c 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html @@ -110,7 +110,7 @@ Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline DelegateLib::DelegateMember< TClass, RetType(Args...)>::Bind(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline ClassType typedefDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> - Clear()DelegateLib::DelegateMember< TClass, RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlinevirtual ConstMemberFunc typedefDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> DelegateBase()=defaultDelegateLib::DelegateBase @@ -118,24 +118,27 @@ DelegateMember(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline DelegateMember(ObjectPtr object, ConstMemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline DelegateMember(const ClassType &rhs)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline - DelegateMember()=defaultDelegateLib::DelegateMember< TClass, RetType(Args...)> - DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - DelegateMemberAsync(const ClassType &rhs)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - DelegateMemberAsync()=deleteDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> - Empty() constDelegateLib::DelegateMember< TClass, RetType(Args...)>inline - GetSync()DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlineprotected - GetThread()DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - MemberFunc typedefDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> - ObjectPtr typedefDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> - operator bool() constDelegateLib::DelegateMember< TClass, RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + DelegateMember(ClassType &&rhs) noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline + DelegateMember()=defaultDelegateLib::DelegateMember< TClass, RetType(Args...)> + DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + DelegateMemberAsync(const ClassType &rhs)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + DelegateMemberAsync()=deleteDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> + Empty() const noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline + GetSync()DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlineprotected + GetThread() noexceptDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + MemberFunc typedefDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> + ObjectPtr typedefDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> + operator bool() const noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline - operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlinevirtual - SetSync(bool sync)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlineprotected - ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual + DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline + operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlinevirtual + SetSync(bool sync)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlineprotected + ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual
diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html index 3ba946a..5e9cd33 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html @@ -105,7 +105,7 @@
-

DelegateMemberAsync<> class asynchronously invokes a class member target function. @tprarm TClass The class type that contains the member function. +

DelegateMemberAsync<> class asynchronously invokes a class member target function. More...

#include <DelegateAsync.h>

@@ -154,7 +154,7 @@  Constructor to create a class instance.
   DelegateMemberAsync (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
   DelegateMemberAsync ()=delete   @@ -173,21 +173,24 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  virtual bool operator== (const DelegateBase &rhs) const override  Compares two delegate objects for equality.
  virtual RetType operator() (Args... args) override - Invoke the bound delegate function asynchronously.
+ Invoke the bound delegate function asynchronously. Called by the source thread.
  void AsyncInvoke (Args... args)  Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
  virtual void DelegateInvoke (std::shared_ptr< DelegateMsg > msg) - Invoke the delegate function on the destination thread.
+ Invoke the delegate function on the destination thread. Called by the destintation thread.
  -DelegateThreadGetThread () - Get the destination thread that the target function is invoked on.
-  +DelegateThreadGetThread () noexcept + Get the destination thread that the target function is invoked on.
- Public Member Functions inherited from DelegateLib::DelegateMember< TClass, RetType(Args...)>  DelegateMember (ObjectPtr object, MemberFunc func)  Constructor to create a class instance.
@@ -196,8 +199,11 @@  Constructor to create a class instance.
   DelegateMember (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
  + DelegateMember (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateMember ()=default  Default constructor creates an empty delegate.
  @@ -213,15 +219,18 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  -bool Empty () const - Check if the delegate is bound to a target function.
-  -void Clear () - Clear the target function.
-  - operator bool () const - Implicit conversion operator to bool.
-  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  +bool Empty () const noexcept + Check if the delegate is bound to a target function.
+  +void Clear () noexcept + Clear the target function.
+  + operator bool () const noexcept + Implicit conversion operator to bool.
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)> - Public Member Functions inherited from DelegateLib::DelegateBase  DelegateBase ()=default @@ -244,9 +253,10 @@

Detailed Description

template<class TClass, class RetType, class... Args>
-class DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>

DelegateMemberAsync<> class asynchronously invokes a class member target function. @tprarm TClass The class type that contains the member function.

+class DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>

DelegateMemberAsync<> class asynchronously invokes a class member target function.

Template Parameters
+
TClassThe class type that contains the member function.
RetTypeThe return type of the bound delegate function.
ArgsThe argument types of the bound delegate function.
@@ -451,9 +461,13 @@

-

Creates a copy of the current object.

-

Clones the current instance of the class by creating a new object and copying the state of the current object to it.

Returns
A pointer to a new ClassType instance.
-
Postcondition
The caller is responsible for deleting the clone object.
+

Copy constructor that creates a copy of the given instance.

+

This constructor initializes a new object as a copy of the provided rhs (right-hand side) object. The rhs object is used to set the state of the new instance.

Parameters
+ + +
[in]rhsThe object to copy from.
+
+

@@ -552,7 +566,6 @@

Returns
None. Function invoked asynchronously without waiting for completion.

@@ -708,10 +721,10 @@

-

Invoke the delegate function on the destination thread.

-

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. Unlike DelegateAsyncWait, a lock is not required between source and destination delegateMsg access because the source thread is not waiting for the function call to complete.

Parameters
+

Invoke the delegate function on the destination thread. Called by the destintation thread.

+

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. Unlike DelegateAsyncWait, a lock is not required between source and destination delegateMsg access because the source thread is not waiting for the function call to complete.

Parameters
- +
[in]msgThe delegate message created and sent within operator()(Args... args).
[in]msgThe delegate message created and sent within operator()(Args... args).
@@ -748,12 +761,12 @@

Get the synchronous target invoke flag.

-
Returns
true if operator()(Args... args) is to invoke synchronously. false means asychronously by sending a message.
+
Returns
true if operator()(Args... args) is to invoke synchronously. false means asychronously by sending a message.

- -

◆ GetThread()

+ +

◆ GetThread()

@@ -772,7 +785,7 @@

-inline +inlinenoexcept

@@ -806,8 +819,8 @@

-

Invoke the bound delegate function asynchronously.

-

Invoke delegate function asynchronously and do not wait for return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

+

Invoke the bound delegate function asynchronously. Called by the source thread.

+

Invoke delegate function asynchronously and do not wait for return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

The DelegateAsyncMsg duplicates and copies the function arguments into heap memory. The source thread is not required to place function arguments into the heap. The delegate library performs all necessary heap and argument coping for the caller. Ensure complex argument data types can be safely copied by creating a copy constructor if necessary.

Parameters
@@ -821,10 +834,46 @@

DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>.

+ + + +

◆ operator=() [1/2]

+ +
+
+
+template<class TClass , class RetType , class... Args>
+

[in]argsThe function arguments, if any.
+ + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+

+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js index 771b0cc..cdb2625 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js @@ -16,8 +16,9 @@ var class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_ [ "Clone", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#acbd04f7121278e2dae40311c4f303d9b", null ], [ "DelegateInvoke", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a97ee00052f6de71e7910784dce3b0fa4", null ], [ "GetSync", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec8a8636e131eb2746311426dacb7490", null ], - [ "GetThread", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6af16d159e7441797be012cfafb7eb82", null ], + [ "GetThread", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aca30b381dee966dc0dab34e41080af4e", null ], [ "operator()", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa73f04631d245b5bf76b6e3025a0b5e5", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cd118df91aa22e6c3d4885b1e39329c", null ], [ "operator=", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814", null ], [ "operator==", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a367221c5c3b36d7aae675cadaa2c27ba", null ], [ "SetSync", "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93e6a8587d6f62f39f9dcf6e0c016d9b", null ] diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html index e23211d..830c0ec 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html @@ -111,7 +111,7 @@ Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline DelegateLib::DelegateMember< TClass, RetType(Args...)>::Bind(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline ClassType typedefDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)> - Clear()DelegateLib::DelegateMember< TClass, RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inlinevirtual ConstMemberFunc typedefDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)> DelegateBase()=defaultDelegateLib::DelegateBase @@ -119,28 +119,32 @@ DelegateMember(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline DelegateMember(ObjectPtr object, ConstMemberFunc func)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline DelegateMember(const ClassType &rhs)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline - DelegateMember()=defaultDelegateLib::DelegateMember< TClass, RetType(Args...)> - DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - DelegateMemberAsync(const ClassType &rhs)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - DelegateMemberAsync()=deleteDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> - DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline - DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline - DelegateMemberAsyncWait(const ClassType &rhs)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline - DelegateMemberAsyncWait()=deleteDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)> - Empty() constDelegateLib::DelegateMember< TClass, RetType(Args...)>inline - GetRetVal()DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline - GetSync()DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlineprotected - GetThread()DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - IsSuccess()DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline - MemberFunc typedefDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)> - ObjectPtr typedefDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)> - operator bool() constDelegateLib::DelegateMember< TClass, RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline + DelegateMember(ClassType &&rhs) noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline + DelegateMember()=defaultDelegateLib::DelegateMember< TClass, RetType(Args...)> + DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + DelegateMemberAsync(const ClassType &rhs)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + DelegateMemberAsync()=deleteDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> + DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline + DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline + DelegateMemberAsyncWait(const ClassType &rhs)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline + DelegateMemberAsyncWait()=deleteDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)> + Empty() const noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline + GetRetVal() noexceptDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline + GetSync()DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlineprotected + GetThread() noexceptDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + IsSuccess() noexceptDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline + MemberFunc typedefDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)> + ObjectPtr typedefDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)> + operator bool() const noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inline DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline - DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline + DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inline + DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateMember< TClass, RetType(Args...)>inline + DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMember< TClass, RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>inlinevirtual SetSync(bool sync)DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>inlineprotected ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html index 67f43b2..1c3c3f4 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html @@ -114,7 +114,7 @@
-DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> +DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> DelegateLib::DelegateMember< TClass, RetType(Args...)> DelegateLib::IDelegateInvoker DelegateLib::Delegate< RetType(Args...)> @@ -157,8 +157,8 @@ - - + + @@ -180,22 +180,25 @@ + + + - + - + - - - - + + + + @@ -204,7 +207,7 @@ - + @@ -220,12 +223,15 @@ + + + - - - + + + @@ -234,8 +240,11 @@ - + + + + @@ -251,15 +260,18 @@ - - - - - - - - - + + + + + + + + + + + + @@ -374,8 +386,8 @@

Constructor & Destructor Documentation

- -

◆ DelegateMemberAsyncWait() [1/4]

+ +

◆ DelegateMemberAsyncWait() [1/4]

@@ -403,7 +415,7 @@

- +

Public Member Functions

 DelegateMemberAsyncWait (ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
 
 DelegateMemberAsyncWait (ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)
 
 DelegateMemberAsyncWait (ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
 
 DelegateMemberAsyncWait (const ClassType &rhs)
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
virtual bool operator== (const DelegateBase &rhs) const override
 Compares two delegate objects for equality.
 
virtual RetType operator() (Args... args) override
 Invoke delegate function asynchronously and block for function return value.
 Invoke delegate function asynchronously and block for function return value. Called by the source thread.
 
auto AsyncInvoke (Args... args)
 Invoke delegate function asynchronously and block for function return value. Called by the source thread.
 
virtual void DelegateInvoke (std::shared_ptr< DelegateMsg > msg) override
 Invoke the delegate function on the destination thread.
 Invoke the delegate function on the destination thread. Called by the destination thread.
 
bool IsSuccess ()
 
RetType GetRetVal ()
 
bool IsSuccess () noexcept
 
RetType GetRetVal () noexcept
 
- Public Member Functions inherited from DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>
 DelegateMemberAsync (ObjectPtr object, MemberFunc func, DelegateThread &thread)
 Constructor to create a class instance.
 Constructor to create a class instance.
 
 DelegateMemberAsync (const ClassType &rhs)
 Creates a copy of the current object.
 Copy constructor that creates a copy of the given instance.
 
 DelegateMemberAsync ()=delete
 
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
void AsyncInvoke (Args... args)
 Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
 
DelegateThreadGetThread ()
 Get the destination thread that the target function is invoked on.
 
DelegateThreadGetThread () noexcept
 Get the destination thread that the target function is invoked on.
 
- Public Member Functions inherited from DelegateLib::DelegateMember< TClass, RetType(Args...)>
 DelegateMember (ObjectPtr object, MemberFunc func)
 Constructor to create a class instance.
 Constructor to create a class instance.
 
 DelegateMember (const ClassType &rhs)
 Creates a copy of the current object.
 Copy constructor that creates a copy of the given instance.
 
 DelegateMember (ClassType &&rhs) noexcept
 Move constructor that transfers ownership of resources.
 
 DelegateMember ()=default
 Default constructor creates an empty delegate.
 
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
bool Empty () const
 Check if the delegate is bound to a target function.
 
void Clear ()
 Clear the target function.
 
 operator bool () const
 Implicit conversion operator to bool.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
bool Empty () const noexcept
 Check if the delegate is bound to a target function.
 
void Clear () noexcept
 Clear the target function.
 
 operator bool () const noexcept
 Implicit conversion operator to bool.
 
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)>
- Public Member Functions inherited from DelegateLib::DelegateBase
 DelegateBase ()=default
std::chrono::milliseconds timeout )std::chrono::milliseconds timeout = WAIT_INFINITE )
@@ -717,11 +729,11 @@

-

Invoke the delegate function on the destination thread.

-

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. A lock is used to protect source and destination thread shared data. A semaphore is used to signal the source thread when the destination thread completes the target function call.

+

Invoke the delegate function on the destination thread. Called by the destination thread.

+

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. A lock is used to protect source and destination thread shared data. A semaphore is used to signal the source thread when the destination thread completes the target function call.

If source thread timeout expires and before the destination thread invokes the target function, the target function is not called.

Parameters
- +
[in]msgThe delegate message created and sent within operator()(Args... args).
[in]msgThe delegate message created and sent within operator()(Args... args).
@@ -730,8 +742,8 @@

-

◆ GetRetVal()

+ +

◆ GetRetVal()

@@ -750,7 +762,7 @@

-inline +inlinenoexcept

@@ -758,8 +770,8 @@

-

◆ IsSuccess()

+ +

◆ IsSuccess()

@@ -778,7 +790,7 @@

-inline +inlinenoexcept

@@ -811,23 +823,59 @@

-

Invoke delegate function asynchronously and block for function return value.

-

Invoke delegate function asynchronously and wait for the return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

-

If the destination thread invokes the function within m_timeout, the return value is obtained from the destination thread function call. If m_timeout expires before the destination thread processes the request, the target function is not invoked and a default return value is returned to the caller with an undefined value. Use IsSuccess() to check for success before using the return value. Alternatively, use AsyncInvoke() and check the std::optional return value.

+

Invoke delegate function asynchronously and block for function return value. Called by the source thread.

+

Invoke delegate function asynchronously and wait for the return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

+

If the destination thread invokes the function within m_timeout, the return value is obtained from the destination thread function call. If m_timeout expires before the destination thread processes the request, the target function is not invoked and a default return value is returned to the caller with an undefined value. Use IsSuccess() to check for success before using the return value. Alternatively, use AsyncInvoke() and check the std::optional return value.

The DelegateAsyncWaitMsg does not duplicated and copy the function arguments into heap memory. The source thread waits on the destintation thread to complete, therefore argument data is shared between the source and destination threads and simultaneous access is prevented using a mutex.

Parameters
[in]argsThe function arguments, if any.
-
Returns
The bound function return value, if any. Use IsSuccess() to determine if the return value is valid before use.
+
Returns
The bound function return value, if any. Use IsSuccess() to determine if the return value is valid before use.

Reimplemented from DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>.

+

+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<class TClass , class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js index 5b1150a..21404f1 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js @@ -5,7 +5,7 @@ var class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_typ [ "ConstMemberFunc", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad39ce01bd33617cb77b82ab93dc9284a", null ], [ "MemberFunc", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4f8262576388c8627661815107ec1120", null ], [ "ObjectPtr", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aaecfde6d367d64edd65e8e5c0fbe394a", null ], - [ "DelegateMemberAsyncWait", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa5e648273103fbcdc4690f07f4f051a9", null ], + [ "DelegateMemberAsyncWait", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9c9a5f01b71911ff87ce41da11d9bd76", null ], [ "DelegateMemberAsyncWait", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3e831f0389d2ddfa37c5c6a24f145dd4", null ], [ "DelegateMemberAsyncWait", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0b1ea98a55b2871d5b21c3d85d811baf", null ], [ "DelegateMemberAsyncWait", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93fccd873d370ab1c6ce08a8d731a85e", null ], @@ -15,9 +15,10 @@ var class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_typ [ "Bind", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a24c3b8b9fd284963b56d32b2aeaf5bd1", null ], [ "Clone", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2f80842f6fce3a49b26fd09d5f0ed283", null ], [ "DelegateInvoke", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a20e9f7755ba4b19fb12988da5f8fe6f7", null ], - [ "GetRetVal", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adab84e35075979f20bb2bd5e1bc6dcec", null ], - [ "IsSuccess", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad01b5e6aefd4680239c0965aa3d47cbd", null ], + [ "GetRetVal", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4f336c0ec1773959bdc114685a493ac3", null ], + [ "IsSuccess", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae14cab8e15a5b33521f4a4e54a8fcdce", null ], [ "operator()", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3cb42151d01cc03b45f2248fc513d847", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad077b1a6778b6ece6558d425c44a8b5f", null ], [ "operator=", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26", null ], [ "operator==", "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab9b6a5c6f42ee235c731de9d6df23ece", null ] ]; \ No newline at end of file diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html index b31ba4d..bcb6352 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html @@ -106,21 +106,23 @@ Bind(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline Bind(ObjectPtr object, ConstMemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline ClassType typedefDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> - Clear()DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlinevirtual ConstMemberFunc typedefDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> DelegateBase()=defaultDelegateLib::DelegateBase DelegateMemberSp(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline DelegateMemberSp(const ClassType &rhs)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline - DelegateMemberSp()=defaultDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> - Empty() constDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline - MemberFunc typedefDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> - ObjectPtr typedefDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> - operator bool() constDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + DelegateMemberSp(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + DelegateMemberSp()=defaultDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> + Empty() const noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + MemberFunc typedefDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> + ObjectPtr typedefDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> + operator bool() const noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlinevirtual ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual
diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html index 2c82184..3add47b 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html @@ -141,8 +141,11 @@  Constructor to create a class instance.
   DelegateMemberSp (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
  + DelegateMemberSp (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateMemberSp ()=default  Default constructor creates an empty delegate.
  @@ -164,18 +167,21 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  virtual bool operator== (const DelegateBase &rhs) const override  Compares two delegate objects for equality.
  -bool Empty () const - Check if the delegate is bound to a target function.
-  -void Clear () - Clear the target function.
-  - operator bool () const - Implicit conversion operator to bool.
-  +bool Empty () const noexcept + Check if the delegate is bound to a target function.
+  +void Clear () noexcept + Clear the target function.
+  + operator bool () const noexcept + Implicit conversion operator to bool.
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)> - Public Member Functions inherited from DelegateLib::DelegateBase  DelegateBase ()=default @@ -264,7 +270,7 @@

Constructor & Destructor Documentation

-

◆ DelegateMemberSp() [1/4]

+

◆ DelegateMemberSp() [1/5]

@@ -304,7 +310,7 @@

-

◆ DelegateMemberSp() [2/4]

+

◆ DelegateMemberSp() [2/5]

@@ -344,7 +350,7 @@

-

◆ DelegateMemberSp() [3/4]

+

◆ DelegateMemberSp() [3/5]

+ +

◆ DelegateMemberSp() [4/5]

+ +
+
+
+template<class TClass , class RetType , class... Args>
+ + + + + +
+ + + + + + + +
DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move constructor that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
-

◆ DelegateMemberSp() [4/4]

+

◆ DelegateMemberSp() [5/5]

@@ -519,8 +564,8 @@

-

◆ Clear()

+ +

◆ Clear()

@@ -539,7 +584,7 @@

-inline +inlinenoexcept

@@ -584,8 +629,8 @@

-

◆ Empty()

+ +

◆ Empty()

@@ -604,7 +649,7 @@

-inline +inlinenoexcept

@@ -614,8 +659,8 @@

-

◆ operator bool()

+ +

◆ operator bool()

+ +

◆ operator=() [1/2]

+ +
+
+
+template<class TClass , class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js index 7e72d4c..6f99338 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js @@ -7,15 +7,17 @@ var class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_arg [ "DelegateMemberSp", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a59cd7235ba47985fddfe207a077da59b", null ], [ "DelegateMemberSp", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1441cf9d3f8294e73138f88ec0296749", null ], [ "DelegateMemberSp", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec2c3e4602c84a524c72e6f0833170e3", null ], + [ "DelegateMemberSp", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab0cbc1c7a24738c53121efa1149e24f2", null ], [ "DelegateMemberSp", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837", null ], [ "Assign", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a195d4972634b9dfc1a87590de1eedee8", null ], [ "Bind", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a84b41deebe247220c51d751acb069dce", null ], [ "Bind", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac6acec090724fa4e992c05f70f4ac7f6", null ], - [ "Clear", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4adf6d82811ad2304e0fe01b955f07c2", null ], + [ "Clear", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeb180dc37eff3728a18b178154c892d8", null ], [ "Clone", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1a96cd942064f5d6b68ad6dedd0213d1", null ], - [ "Empty", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1231c33ac1e57666ead07191c3f100a8", null ], - [ "operator bool", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5a0169bdc6741af4bc6d868af60686f4", null ], + [ "Empty", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5159e7d96232836114759797744dd933", null ], + [ "operator bool", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0464754344807471b4a4b96ac4622006", null ], [ "operator()", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac4c0324e61517044e73fe94ec8595b3f", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9030c87d5c2a045761694e1699829a09", null ], [ "operator=", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06", null ], [ "operator==", "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab8bc747498a19e4ca3ba9d3cccb756fa", null ] ]; \ No newline at end of file diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html index 258867f..179aa25 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html @@ -110,7 +110,7 @@ Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Bind(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline ClassType typedefDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> - Clear()DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlinevirtual ConstMemberFunc typedefDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> DelegateBase()=defaultDelegateLib::DelegateBase @@ -118,24 +118,27 @@ DelegateMemberSp(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline DelegateMemberSp(const ClassType &rhs)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline - DelegateMemberSp()=defaultDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> - DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - DelegateMemberSpAsync(const ClassType &rhs)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - DelegateMemberSpAsync()=deleteDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> - Empty() constDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline - GetSync()DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlineprotected - GetThread()DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - MemberFunc typedefDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> - ObjectPtr typedefDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> - operator bool() constDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + DelegateMemberSp(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + DelegateMemberSp()=defaultDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> + DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + DelegateMemberSpAsync(const ClassType &rhs)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + DelegateMemberSpAsync()=deleteDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> + Empty() const noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + GetSync()DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlineprotected + GetThread() noexceptDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + MemberFunc typedefDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> + ObjectPtr typedefDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> + operator bool() const noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline - operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlinevirtual - SetSync(bool sync)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlineprotected - ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual + DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlinevirtual + SetSync(bool sync)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlineprotected + ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual
diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html index aabd6ec..9edacff 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html @@ -154,7 +154,7 @@  Constructor to create a class instance.
   DelegateMemberSpAsync (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
   DelegateMemberSpAsync ()=delete   @@ -173,21 +173,24 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  virtual bool operator== (const DelegateBase &rhs) const override  Compares two delegate objects for equality.
  virtual RetType operator() (Args... args) override - Invoke the bound delegate function asynchronously.
+ Invoke the bound delegate function asynchronously. Called by the source thread.
  void AsyncInvoke (Args... args)  Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
  virtual void DelegateInvoke (std::shared_ptr< DelegateMsg > msg) - Invoke the delegate function on the destination thread.
+ Invoke the delegate function on the destination thread. Called by the destintation thread.
  -DelegateThreadGetThread () - Get the destination thread that the target function is invoked on.
-  +DelegateThreadGetThread () noexcept + Get the destination thread that the target function is invoked on.
- Public Member Functions inherited from DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>  DelegateMemberSp (ObjectPtr object, MemberFunc func)  Constructor to create a class instance.
@@ -196,8 +199,11 @@  Constructor to create a class instance.
   DelegateMemberSp (const ClassType &rhs) - Creates a copy of the current object.
+ Copy constructor that creates a copy of the given instance.
  + DelegateMemberSp (ClassType &&rhs) noexcept + Move constructor that transfers ownership of resources.
+   DelegateMemberSp ()=default  Default constructor creates an empty delegate.
  @@ -213,15 +219,18 @@ ClassTypeoperator= (const ClassType &rhs)  Assignment operator that assigns the state of one object to another.
  -bool Empty () const - Check if the delegate is bound to a target function.
-  -void Clear () - Clear the target function.
-  - operator bool () const - Implicit conversion operator to bool.
-  +ClassTypeoperator= (ClassType &&rhs) noexcept + Move assignment operator that transfers ownership of resources.
+  +bool Empty () const noexcept + Check if the delegate is bound to a target function.
+  +void Clear () noexcept + Clear the target function.
+  + operator bool () const noexcept + Implicit conversion operator to bool.
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)> - Public Member Functions inherited from DelegateLib::DelegateBase  DelegateBase ()=default @@ -452,9 +461,13 @@

-

Creates a copy of the current object.

-

Clones the current instance of the class by creating a new object and copying the state of the current object to it.

Returns
A pointer to a new ClassType instance.
-
Postcondition
The caller is responsible for deleting the clone object.
+

Copy constructor that creates a copy of the given instance.

+

This constructor initializes a new object as a copy of the provided rhs (right-hand side) object. The rhs object is used to set the state of the new instance.

Parameters
+ + +
[in]rhsThe object to copy from.
+
+

@@ -553,7 +566,6 @@

Returns
None. Function invoked asynchronously without waiting for completion.

@@ -708,10 +720,10 @@

-

Invoke the delegate function on the destination thread.

-

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. Unlike DelegateAsyncWait, a lock is not required between source and destination delegateMsg access because the source thread is not waiting for the function call to complete.

Parameters
+

Invoke the delegate function on the destination thread. Called by the destintation thread.

+

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. Unlike DelegateAsyncWait, a lock is not required between source and destination delegateMsg access because the source thread is not waiting for the function call to complete.

Parameters
- +
[in]msgThe delegate message created and sent within operator()(Args... args).
[in]msgThe delegate message created and sent within operator()(Args... args).
@@ -748,12 +760,12 @@

Get the synchronous target invoke flag.

-
Returns
true if operator()(Args... args) is to invoke synchronously. false means asychronously by sending a message.
+
Returns
true if operator()(Args... args) is to invoke synchronously. false means asychronously by sending a message.

- -

◆ GetThread()

+ +

◆ GetThread()

@@ -772,7 +784,7 @@

-inline +inlinenoexcept

@@ -806,8 +818,8 @@

-

Invoke the bound delegate function asynchronously.

-

Invoke delegate function asynchronously and do not wait for return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

+

Invoke the bound delegate function asynchronously. Called by the source thread.

+

Invoke delegate function asynchronously and do not wait for return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

The DelegateAsyncMsg duplicates and copies the function arguments into heap memory. The source thread is not required to place function arguments into the heap. The delegate library performs all necessary heap and argument coping for the caller. Ensure complex argument data types can be safely copied by creating a copy constructor if necessary.

Parameters
@@ -821,10 +833,46 @@

DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>.

+ + + +

◆ operator=() [1/2]

+ +
+
+
+template<class TClass , class RetType , class... Args>
+

[in]argsThe function arguments, if any.
+ + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+

+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js index 5779345..b298410 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js @@ -16,8 +16,9 @@ var class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_ [ "Clone", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af3bd3f99355e53854fc17d086a7a95c9", null ], [ "DelegateInvoke", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2402ad65efec989ec7d9bc671ec066ae", null ], [ "GetSync", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a469f4b8d8536cfc049d4767fffdd3a15", null ], - [ "GetThread", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cb866c89077cbd0e55a22e8bcbb321a", null ], + [ "GetThread", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae2028e6668b1e1f4ab8538d9e4be230a", null ], [ "operator()", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2be69705010b23423760a63822b2f408", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6563fdeb2a74bdfc8fd7aabe3dd38a43", null ], [ "operator=", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196", null ], [ "operator==", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6cef069e1ec3020064447a453c3aa91b", null ], [ "SetSync", "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a21431c52f8e2a17316aa2a97e0e23cc2", null ] diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html index 674c57a..98ade0f 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4-members.html @@ -111,7 +111,7 @@ Bind(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Bind(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline ClassType typedefDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)> - Clear()DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + Clear() noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline Clone() const overrideDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inlinevirtual ConstMemberFunc typedefDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)> DelegateBase()=defaultDelegateLib::DelegateBase @@ -119,28 +119,32 @@ DelegateMemberSp(ObjectPtr object, MemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline DelegateMemberSp(const ClassType &rhs)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline - DelegateMemberSp()=defaultDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> - DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - DelegateMemberSpAsync(const ClassType &rhs)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - DelegateMemberSpAsync()=deleteDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> - DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline - DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline - DelegateMemberSpAsyncWait(const ClassType &rhs)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline - DelegateMemberSpAsyncWait()=deleteDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)> - Empty() constDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline - GetRetVal()DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline - GetSync()DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlineprotected - GetThread()DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - IsSuccess()DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline - MemberFunc typedefDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)> - ObjectPtr typedefDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)> - operator bool() constDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlineexplicit - operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual - operator()(Args... args) overrideDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inlinevirtual - operator=(const ClassType &rhs)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline + DelegateMemberSp(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + DelegateMemberSp()=defaultDelegateLib::DelegateMemberSp< TClass, RetType(Args...)> + DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + DelegateMemberSpAsync(const ClassType &rhs)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + DelegateMemberSpAsync()=deleteDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> + DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline + DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline + DelegateMemberSpAsyncWait(const ClassType &rhs)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline + DelegateMemberSpAsyncWait()=deleteDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)> + Empty() const noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + GetRetVal() noexceptDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline + GetSync()DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlineprotected + GetThread() noexceptDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + IsSuccess() noexceptDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline + MemberFunc typedefDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)> + ObjectPtr typedefDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)> + operator bool() const noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inlineexplicit + operator!=(const DelegateBase &rhs) constDelegateLib::DelegateBaseinlinevirtual + operator()(Args... args) overrideDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inlinevirtual + operator=(const ClassType &rhs)DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline + operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inline DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline - DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inline + DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(const ClassType &rhs)DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline + DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexceptDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>inline operator==(const DelegateBase &rhs) const overrideDelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>inlinevirtual SetSync(bool sync)DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>inlineprotected ~DelegateBase() noexcept=defaultDelegateLib::DelegateBasevirtual diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html index fa325dd..a7a01a2 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html @@ -157,8 +157,8 @@ - - + + @@ -180,22 +180,25 @@ + + + - + - + - - - - + + + + @@ -204,7 +207,7 @@ - + @@ -220,12 +223,15 @@ + + + - - - + + + @@ -234,8 +240,11 @@ - + + + + @@ -251,15 +260,18 @@ - - - - - - - - - + + + + + + + + + + + + @@ -374,8 +386,8 @@

Constructor & Destructor Documentation

- -

◆ DelegateMemberSpAsyncWait() [1/4]

+ +

◆ DelegateMemberSpAsyncWait() [1/4]

@@ -403,7 +415,7 @@

- +

Public Member Functions

 DelegateMemberSpAsyncWait (ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
 
 DelegateMemberSpAsyncWait (ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)
 
 DelegateMemberSpAsyncWait (ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)
 
 DelegateMemberSpAsyncWait (const ClassType &rhs)
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
virtual bool operator== (const DelegateBase &rhs) const override
 Compares two delegate objects for equality.
 
virtual RetType operator() (Args... args) override
 Invoke delegate function asynchronously and block for function return value.
 Invoke delegate function asynchronously and block for function return value. Called by the source thread.
 
auto AsyncInvoke (Args... args)
 Invoke delegate function asynchronously and block for function return value. Called by the source thread.
 
virtual void DelegateInvoke (std::shared_ptr< DelegateMsg > msg) override
 Invoke the delegate function on the destination thread.
 Invoke the delegate function on the destination thread. Called by the destination thread.
 
bool IsSuccess ()
 
RetType GetRetVal ()
 
bool IsSuccess () noexcept
 
RetType GetRetVal () noexcept
 
- Public Member Functions inherited from DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>
 DelegateMemberSpAsync (ObjectPtr object, MemberFunc func, DelegateThread &thread)
 Constructor to create a class instance.
 Constructor to create a class instance.
 
 DelegateMemberSpAsync (const ClassType &rhs)
 Creates a copy of the current object.
 Copy constructor that creates a copy of the given instance.
 
 DelegateMemberSpAsync ()=delete
 
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
void AsyncInvoke (Args... args)
 Invoke delegate function asynchronously. Do not wait for return value. Called by the source thread.
 
DelegateThreadGetThread ()
 Get the destination thread that the target function is invoked on.
 
DelegateThreadGetThread () noexcept
 Get the destination thread that the target function is invoked on.
 
- Public Member Functions inherited from DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>
 DelegateMemberSp (ObjectPtr object, MemberFunc func)
 Constructor to create a class instance.
 Constructor to create a class instance.
 
 DelegateMemberSp (const ClassType &rhs)
 Creates a copy of the current object.
 Copy constructor that creates a copy of the given instance.
 
 DelegateMemberSp (ClassType &&rhs) noexcept
 Move constructor that transfers ownership of resources.
 
 DelegateMemberSp ()=default
 Default constructor creates an empty delegate.
 
ClassTypeoperator= (const ClassType &rhs)
 Assignment operator that assigns the state of one object to another.
 
bool Empty () const
 Check if the delegate is bound to a target function.
 
void Clear ()
 Clear the target function.
 
 operator bool () const
 Implicit conversion operator to bool.
 
ClassTypeoperator= (ClassType &&rhs) noexcept
 Move assignment operator that transfers ownership of resources.
 
bool Empty () const noexcept
 Check if the delegate is bound to a target function.
 
void Clear () noexcept
 Clear the target function.
 
 operator bool () const noexcept
 Implicit conversion operator to bool.
 
- Public Member Functions inherited from DelegateLib::Delegate< RetType(Args...)>
- Public Member Functions inherited from DelegateLib::DelegateBase
 DelegateBase ()=default
std::chrono::milliseconds timeout )std::chrono::milliseconds timeout = WAIT_INFINITE )
@@ -717,11 +729,11 @@

-

Invoke the delegate function on the destination thread.

-

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. A lock is used to protect source and destination thread shared data. A semaphore is used to signal the source thread when the destination thread completes the target function call.

+

Invoke the delegate function on the destination thread. Called by the destination thread.

+

Each source thread call to operator() generate a call to DelegateInvoke() on the destination thread. A lock is used to protect source and destination thread shared data. A semaphore is used to signal the source thread when the destination thread completes the target function call.

If source thread timeout expires and before the destination thread invokes the target function, the target function is not called.

Parameters
- +
[in]msgThe delegate message created and sent within operator()(Args... args).
[in]msgThe delegate message created and sent within operator()(Args... args).
@@ -730,8 +742,8 @@

-

◆ GetRetVal()

+ +

◆ GetRetVal()

@@ -750,7 +762,7 @@

-inline +inlinenoexcept

@@ -758,8 +770,8 @@

-

◆ IsSuccess()

+ +

◆ IsSuccess()

@@ -778,7 +790,7 @@

-inline +inlinenoexcept

@@ -811,23 +823,59 @@

-

Invoke delegate function asynchronously and block for function return value.

-

Invoke delegate function asynchronously and wait for the return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

-

If the destination thread invokes the function within m_timeout, the return value is obtained from the destination thread function call. If m_timeout expires before the destination thread processes the request, the target function is not invoked and a default return value is returned to the caller with an undefined value. Use IsSuccess() to check for success before using the return value. Alternatively, use AsyncInvoke() and check the std::optional return value.

+

Invoke delegate function asynchronously and block for function return value. Called by the source thread.

+

Invoke delegate function asynchronously and wait for the return value. This function is called by the source thread. Dispatches the delegate data into the destination thread message queue. DelegateInvoke() must be called by the destination thread to invoke the target function.

+

If the destination thread invokes the function within m_timeout, the return value is obtained from the destination thread function call. If m_timeout expires before the destination thread processes the request, the target function is not invoked and a default return value is returned to the caller with an undefined value. Use IsSuccess() to check for success before using the return value. Alternatively, use AsyncInvoke() and check the std::optional return value.

The DelegateAsyncWaitMsg does not duplicated and copy the function arguments into heap memory. The source thread waits on the destintation thread to complete, therefore argument data is shared between the source and destination threads and simultaneous access is prevented using a mutex.

Parameters
[in]argsThe function arguments, if any.
-
Returns
The bound function return value, if any. Use IsSuccess() to determine if the return value is valid before use.
+
Returns
The bound function return value, if any. Use IsSuccess() to determine if the return value is valid before use.

Reimplemented from DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>.

+

+
+ +

◆ operator=() [1/2]

+ +
+
+
+template<class TClass , class RetType , class... Args>
+ + + + + +
+ + + + + + + +
ClassType & DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator= (ClassType && rhs)
+
+inlinenoexcept
+
+ +

Move assignment operator that transfers ownership of resources.

+
Parameters
+ + +
[in]rhsThe object to move from.
+
+
+
Returns
A reference to the current object.
+
-

◆ operator=()

+

◆ operator=() [2/2]

diff --git a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js index 8bd27d7..f09b2f2 100644 --- a/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js +++ b/doxygen/html/class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.js @@ -5,7 +5,7 @@ var class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_ [ "ConstMemberFunc", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a37cb6e6d0db0f7f7beb011064e92804c", null ], [ "MemberFunc", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a55976c43517ad73fded1eead86ee7d7a", null ], [ "ObjectPtr", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a48f5e788dd4b24f822155f2c825ae4eb", null ], - [ "DelegateMemberSpAsyncWait", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a75167ccb570cc43c7262e30039f94965", null ], + [ "DelegateMemberSpAsyncWait", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9da9fefa1174dd4d2c5f8eb398a9ea97", null ], [ "DelegateMemberSpAsyncWait", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8b5495da7bbed3d691b5b7881c495018", null ], [ "DelegateMemberSpAsyncWait", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e64aa7476c1cc451d8ac21f660953a8", null ], [ "DelegateMemberSpAsyncWait", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aad11185618821cd2a0cfa68dc2af1e25", null ], @@ -15,9 +15,10 @@ var class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_ [ "Bind", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa513bda0b439e89c7c4149a56bc10a10", null ], [ "Clone", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac1e27a71399c2444f302bfec7c21ae44", null ], [ "DelegateInvoke", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a89a54b3aa7333005761c42b4335d728a", null ], - [ "GetRetVal", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeee90b3872f904459d05eef068b45504", null ], - [ "IsSuccess", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae80f96b3fcb4fb14fd0ef9ba916cf25c", null ], + [ "GetRetVal", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab380c00f346e894c9f27658d512bb4", null ], + [ "IsSuccess", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af04d07b743e8adb23111a837dea21185", null ], [ "operator()", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aedbf462168487ee92af82d8a672f3cbc", null ], + [ "operator=", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a19b1d7c2f6892cd6dd6dd25182e9d07d", null ], [ "operator=", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de", null ], [ "operator==", "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aafbb90f4eb5ec2fcc05456fe139a6cee", null ] ]; \ No newline at end of file diff --git a/doxygen/html/class_delegate_lib_1_1_i_delegate_invoker.html b/doxygen/html/class_delegate_lib_1_1_i_delegate_invoker.html index 48bdb78..d4fc331 100644 --- a/doxygen/html/class_delegate_lib_1_1_i_delegate_invoker.html +++ b/doxygen/html/class_delegate_lib_1_1_i_delegate_invoker.html @@ -115,7 +115,7 @@ DelegateLib::DelegateFreeAsync< RetType(Args...)> DelegateLib::DelegateFunctionAsync< RetType(Args...)> -DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> +DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)> DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)> DelegateLib::DelegateFreeAsyncWait< RetType(Args...)> DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)> diff --git a/doxygen/html/doxygen_crawl.html b/doxygen/html/doxygen_crawl.html index 2f6b74b..7e9181e 100644 --- a/doxygen/html/doxygen_crawl.html +++ b/doxygen/html/doxygen_crawl.html @@ -220,6 +220,8 @@ + + @@ -227,40 +229,44 @@ + - - - + + - + + + + + - + - - + + @@ -272,17 +278,19 @@ - + + - + + - + @@ -294,39 +302,43 @@ - + + - + + - + - + - + - + + + @@ -335,8 +347,8 @@ + - @@ -347,15 +359,16 @@ - + + @@ -368,37 +381,40 @@ + + - - + - + - + - + - + + + @@ -411,38 +427,40 @@ + - + + + - + - - + diff --git a/doxygen/html/functions_c.html b/doxygen/html/functions_c.html index dc51da8..fd4eea8 100644 --- a/doxygen/html/functions_c.html +++ b/doxygen/html/functions_c.html @@ -100,7 +100,7 @@

- c -

diff --git a/doxygen/html/functions_d.html b/doxygen/html/functions_d.html index 5351a44..c8a9c6a 100644 --- a/doxygen/html/functions_d.html +++ b/doxygen/html/functions_d.html @@ -104,17 +104,17 @@

- d -

diff --git a/doxygen/html/functions_e.html b/doxygen/html/functions_e.html index 0830966..f6ce2a9 100644 --- a/doxygen/html/functions_e.html +++ b/doxygen/html/functions_e.html @@ -99,7 +99,7 @@
Here is a list of all class members with links to the classes they belong to:

- e -

diff --git a/doxygen/html/functions_func_c.html b/doxygen/html/functions_func_c.html index 530d7d6..5f34bd5 100644 --- a/doxygen/html/functions_func_c.html +++ b/doxygen/html/functions_func_c.html @@ -99,7 +99,7 @@
Here is a list of all functions with links to the classes they belong to:

- c -

diff --git a/doxygen/html/functions_func_d.html b/doxygen/html/functions_func_d.html index 77277fd..b45031a 100644 --- a/doxygen/html/functions_func_d.html +++ b/doxygen/html/functions_func_d.html @@ -104,17 +104,17 @@

- d -

diff --git a/doxygen/html/functions_func_e.html b/doxygen/html/functions_func_e.html index d62637f..1cda501 100644 --- a/doxygen/html/functions_func_e.html +++ b/doxygen/html/functions_func_e.html @@ -99,7 +99,7 @@
Here is a list of all functions with links to the classes they belong to:

- e -

diff --git a/doxygen/html/functions_func_g.html b/doxygen/html/functions_func_g.html index ca841f7..e37ff2b 100644 --- a/doxygen/html/functions_func_g.html +++ b/doxygen/html/functions_func_g.html @@ -103,10 +103,10 @@

- g -

diff --git a/doxygen/html/functions_func_i.html b/doxygen/html/functions_func_i.html index 5f94598..730fabd 100644 --- a/doxygen/html/functions_func_i.html +++ b/doxygen/html/functions_func_i.html @@ -99,7 +99,7 @@
Here is a list of all functions with links to the classes they belong to:

- i -

diff --git a/doxygen/html/functions_func_o.html b/doxygen/html/functions_func_o.html index 00f00e2..d804953 100644 --- a/doxygen/html/functions_func_o.html +++ b/doxygen/html/functions_func_o.html @@ -99,7 +99,7 @@
Here is a list of all functions with links to the classes they belong to:

- o -

diff --git a/doxygen/html/functions_i.html b/doxygen/html/functions_i.html index 937528d..f57bdc2 100644 --- a/doxygen/html/functions_i.html +++ b/doxygen/html/functions_i.html @@ -99,7 +99,7 @@
Here is a list of all class members with links to the classes they belong to:

- i -

diff --git a/doxygen/html/functions_o.html b/doxygen/html/functions_o.html index eb0cacb..310754c 100644 --- a/doxygen/html/functions_o.html +++ b/doxygen/html/functions_o.html @@ -100,7 +100,7 @@

- o -

  • ObjectPtr : DelegateLib::DelegateMember< TClass, RetType(Args...)>, DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>, DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>, DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>, DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>, DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>
  • -
  • operator bool() : DelegateLib::DelegateFree< RetType(Args...)>, DelegateLib::DelegateFunction< RetType(Args...)>, DelegateLib::DelegateMember< TClass, RetType(Args...)>, DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>, DelegateLib::MulticastDelegate< RetType(Args...)>, DelegateLib::MulticastDelegateSafe< RetType(Args...)>, DelegateLib::SinglecastDelegate< RetType(Args...)>
  • +
  • operator bool() : DelegateLib::DelegateFree< RetType(Args...)>, DelegateLib::DelegateFunction< RetType(Args...)>, DelegateLib::DelegateMember< TClass, RetType(Args...)>, DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>, DelegateLib::MulticastDelegate< RetType(Args...)>, DelegateLib::MulticastDelegateSafe< RetType(Args...)>, DelegateLib::SinglecastDelegate< RetType(Args...)>
  • operator!=() : DelegateLib::DelegateBase
  • operator()() : DelegateLib::Delegate< RetType(Args...)>, DelegateLib::DelegateFree< RetType(Args...)>, DelegateLib::DelegateFreeAsync< RetType(Args...)>, DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>, DelegateLib::DelegateFunction< RetType(Args...)>, DelegateLib::DelegateFunctionAsync< RetType(Args...)>, DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>, DelegateLib::DelegateMember< TClass, RetType(Args...)>, DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>, DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>, DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>, DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>, DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>, DelegateLib::MulticastDelegate< RetType(Args...)>, DelegateLib::MulticastDelegateSafe< RetType(Args...)>, DelegateLib::SinglecastDelegate< RetType(Args...)>
  • operator+=() : DelegateLib::MulticastDelegate< RetType(Args...)>, DelegateLib::MulticastDelegateSafe< RetType(Args...)>
  • diff --git a/doxygen/html/hierarchy.html b/doxygen/html/hierarchy.html index 6065efa..b239d89 100644 --- a/doxygen/html/hierarchy.html +++ b/doxygen/html/hierarchy.html @@ -111,7 +111,7 @@  CDelegateLib::DelegateFunctionAsync< RetType(Args...)>DelegateFunctionAsync<> class asynchronously invokes a std::function target function  CDelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>DelegateFunctionAsyncWait<> class asynchronously block invokes a std::function target function  CDelegateLib::DelegateMember< TClass, RetType(Args...)>DelegateMember<> class synchronously invokes a class member target function using a class object pointer - CDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>DelegateMemberAsync<> class asynchronously invokes a class member target function. @tprarm TClass The class type that contains the member function + CDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>DelegateMemberAsync<> class asynchronously invokes a class member target function  CDelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>DelegateMemberAsyncWait<> class asynchronously block invokes a class member target function  CDelegateLib::DelegateMemberSp< TClass, RetType(Args...)>DelegateMemberSp<> class synchronously invokes a class member target function using a std::shared_ptr object  CDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>DelegateMemberSpAsync<> class asynchronously invokes a std::shared_ptr target function @@ -141,7 +141,7 @@  CDelegateLib::IDelegateInvokerAbstract base class to support asynchronous delegate function invoke on destination thread of control  CDelegateLib::DelegateFreeAsync< RetType(Args...)>DelegateFreeAsync<> class asynchronously invokes a free target function  CDelegateLib::DelegateFunctionAsync< RetType(Args...)>DelegateFunctionAsync<> class asynchronously invokes a std::function target function - CDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>DelegateMemberAsync<> class asynchronously invokes a class member target function. @tprarm TClass The class type that contains the member function + CDelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>DelegateMemberAsync<> class asynchronously invokes a class member target function  CDelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>DelegateMemberSpAsync<> class asynchronously invokes a std::shared_ptr target function  CDelegateLib::MulticastDelegate< R >  CDelegateLib::MulticastDelegate< RetType(Args...)>Not thread-safe multicast delegate container class. The class has a list of Delegate<> instances. When invoked, each Delegate instance within the invocation list is called.
    diff --git a/doxygen/html/namespace_delegate_lib.html b/doxygen/html/namespace_delegate_lib.html index fb1872d..f2c47d1 100644 --- a/doxygen/html/namespace_delegate_lib.html +++ b/doxygen/html/namespace_delegate_lib.html @@ -158,7 +158,7 @@ struct  DelegateMemberAsync   class  DelegateMemberAsync< TClass, RetType(Args...)>DelegateMemberAsync<> class asynchronously invokes a class member target function. @tprarm TClass The class type that contains the member function. More...
    DelegateMemberAsync<> class asynchronously invokes a class member target function. More...
      struct  DelegateMemberAsyncWait   diff --git a/doxygen/html/navtreedata.js b/doxygen/html/navtreedata.js index dcd5c4d..8c13079 100644 --- a/doxygen/html/navtreedata.js +++ b/doxygen/html/navtreedata.js @@ -58,9 +58,9 @@ var NAVTREE = var NAVTREEINDEX = [ "_delegate_8h.html", -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html", -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a55976c43517ad73fded1eead86ee7d7a", -"struct_delegate_lib_1_1is__shared__ptr_3_01const_01std_1_1shared__ptr_3_01_t_01_4_01_5_01_4.html" +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56758d6e931fbff1cfc3ea97151fd6b5", +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6563fdeb2a74bdfc8fd7aabe3dd38a43", +"src__dup_8py.html#a15dd702d0fd7d58585504fa19b49623d" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/doxygen/html/navtreeindex0.js b/doxygen/html/navtreeindex0.js index ca2bf6b..4721a43 100644 --- a/doxygen/html/navtreeindex0.js +++ b/doxygen/html/navtreeindex0.js @@ -86,100 +86,112 @@ var NAVTREEINDEX0 = "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,6], "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a0394e77858e71a549cf0c21eca681323":[1,0,0,6,2], "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a0394e77858e71a549cf0c21eca681323":[2,0,0,6,2], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a3e31fdd4391c352138672960a50e973d":[1,0,0,6,11], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a3e31fdd4391c352138672960a50e973d":[2,0,0,6,11], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a487de94ebd8c683330785e755a6539c2":[1,0,0,6,13], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a487de94ebd8c683330785e755a6539c2":[2,0,0,6,13], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a07def835ede6815d619f525440faf21a":[1,0,0,6,4], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a07def835ede6815d619f525440faf21a":[2,0,0,6,4], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a32daf44235f34ed06a33fb5cdf768842":[1,0,0,6,8], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a32daf44235f34ed06a33fb5cdf768842":[2,0,0,6,8], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a3e31fdd4391c352138672960a50e973d":[1,0,0,6,12], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a3e31fdd4391c352138672960a50e973d":[2,0,0,6,12], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a487de94ebd8c683330785e755a6539c2":[1,0,0,6,15], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a487de94ebd8c683330785e755a6539c2":[2,0,0,6,15], "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a675cfeb6a9d7e08307ee60747977b795":[1,0,0,6,1], "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a675cfeb6a9d7e08307ee60747977b795":[2,0,0,6,1], "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a683744d6fe8b0318323e70a1e2bd7f92":[1,0,0,6,0], "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a683744d6fe8b0318323e70a1e2bd7f92":[2,0,0,6,0], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a6d5ded6c118f909f556b9596737a2347":[1,0,0,6,8], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a6d5ded6c118f909f556b9596737a2347":[2,0,0,6,8], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a73c64a35a3d0cbae23a6779a6a53aa19":[1,0,0,6,6], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a73c64a35a3d0cbae23a6779a6a53aa19":[2,0,0,6,6], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8":[1,0,0,6,4], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8":[2,0,0,6,4], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137":[1,0,0,6,12], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137":[2,0,0,6,12], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a6d5ded6c118f909f556b9596737a2347":[1,0,0,6,9], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a6d5ded6c118f909f556b9596737a2347":[2,0,0,6,9], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a73c64a35a3d0cbae23a6779a6a53aa19":[1,0,0,6,7], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a73c64a35a3d0cbae23a6779a6a53aa19":[2,0,0,6,7], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8":[1,0,0,6,5], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8":[2,0,0,6,5], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7ded9bcd5b51d3d15d9470c9f21af216":[1,0,0,6,11], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7ded9bcd5b51d3d15d9470c9f21af216":[2,0,0,6,11], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137":[1,0,0,6,14], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137":[2,0,0,6,14], "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4d544e9255d64999dc12c465de903ee":[1,0,0,6,3], "class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4d544e9255d64999dc12c465de903ee":[2,0,0,6,3], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad443789fc8236d866f21a6082254a5cb":[1,0,0,6,9], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad443789fc8236d866f21a6082254a5cb":[2,0,0,6,9], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad50bc3385f014ff12cf61c16c030f9c0":[1,0,0,6,5], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad50bc3385f014ff12cf61c16c030f9c0":[2,0,0,6,5], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ada97e2f083a3745b45221ec3f99763c7":[1,0,0,6,10], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ada97e2f083a3745b45221ec3f99763c7":[2,0,0,6,10], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ae4485878a0799f970db1d8f283bc80a0":[1,0,0,6,7], -"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ae4485878a0799f970db1d8f283bc80a0":[2,0,0,6,7], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad50bc3385f014ff12cf61c16c030f9c0":[1,0,0,6,6], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad50bc3385f014ff12cf61c16c030f9c0":[2,0,0,6,6], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aeaff06f2a709a7602af82cb936e68bbf":[1,0,0,6,13], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aeaff06f2a709a7602af82cb936e68bbf":[2,0,0,6,13], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#af8f7c7ac3313f9d219d92272b104024a":[1,0,0,6,10], +"class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#af8f7c7ac3313f9d219d92272b104024a":[2,0,0,6,10], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,8], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,8], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a1539d9effc50d7af8624b05b3ec37139":[1,0,0,8,0], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a1539d9effc50d7af8624b05b3ec37139":[2,0,0,8,0], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a18d39e4e8e3e6906fd9c07ada1ac5bc6":[1,0,0,8,10], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a18d39e4e8e3e6906fd9c07ada1ac5bc6":[2,0,0,8,10], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a2f0ac18839223393d6c8a76beb971478":[1,0,0,8,7], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a2f0ac18839223393d6c8a76beb971478":[2,0,0,8,7], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4f86a71601b797dc9356f0f27e61327f":[1,0,0,8,12], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4f86a71601b797dc9356f0f27e61327f":[2,0,0,8,12], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4":[1,0,0,8,14], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4":[2,0,0,8,14], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a73fa99c10f6b68b771bb8e83adffc444":[1,0,0,8,11], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a73fa99c10f6b68b771bb8e83adffc444":[2,0,0,8,11], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4":[1,0,0,8,5], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4":[2,0,0,8,5], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d6f10d5f2c1b9215b59946a77edf6f6":[1,0,0,8,13], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d6f10d5f2c1b9215b59946a77edf6f6":[2,0,0,8,13], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a98d999c16d8eff2e9967d0a4c25b9d41":[1,0,0,8,6], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a98d999c16d8eff2e9967d0a4c25b9d41":[2,0,0,8,6], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a9ef5e4510f2f3378d0dd0c3ff714e3bf":[1,0,0,8,15], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a9ef5e4510f2f3378d0dd0c3ff714e3bf":[2,0,0,8,15], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a18d39e4e8e3e6906fd9c07ada1ac5bc6":[1,0,0,8,11], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a18d39e4e8e3e6906fd9c07ada1ac5bc6":[2,0,0,8,11], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a2f0ac18839223393d6c8a76beb971478":[1,0,0,8,8], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a2f0ac18839223393d6c8a76beb971478":[2,0,0,8,8], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4":[1,0,0,8,16], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4":[2,0,0,8,16], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a73fa99c10f6b68b771bb8e83adffc444":[1,0,0,8,12], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a73fa99c10f6b68b771bb8e83adffc444":[2,0,0,8,12], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4":[1,0,0,8,6], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4":[2,0,0,8,6], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d63a381bb317b348715309c5e741a36":[1,0,0,8,5], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d63a381bb317b348715309c5e741a36":[2,0,0,8,5], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d6f10d5f2c1b9215b59946a77edf6f6":[1,0,0,8,14], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d6f10d5f2c1b9215b59946a77edf6f6":[2,0,0,8,14], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a98d999c16d8eff2e9967d0a4c25b9d41":[1,0,0,8,7], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a98d999c16d8eff2e9967d0a4c25b9d41":[2,0,0,8,7], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a9ef5e4510f2f3378d0dd0c3ff714e3bf":[1,0,0,8,17], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a9ef5e4510f2f3378d0dd0c3ff714e3bf":[2,0,0,8,17], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aa527333a1d851bf51a8805496983691a":[1,0,0,8,3], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aa527333a1d851bf51a8805496983691a":[2,0,0,8,3], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aba44cf5c963b9b7667cc1ea70023e343":[1,0,0,8,8], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aba44cf5c963b9b7667cc1ea70023e343":[2,0,0,8,8], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aba44cf5c963b9b7667cc1ea70023e343":[1,0,0,8,9], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aba44cf5c963b9b7667cc1ea70023e343":[2,0,0,8,9], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#abd1ecddf8c92d4c3544865fffb36688b":[1,0,0,8,2], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#abd1ecddf8c92d4c3544865fffb36688b":[2,0,0,8,2], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae1af8ea348c4121033e815ffb91ffc7f":[1,0,0,8,16], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae1af8ea348c4121033e815ffb91ffc7f":[2,0,0,8,16], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ad5e3487debe918c8c62d23a94bd9aac8":[1,0,0,8,13], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ad5e3487debe918c8c62d23a94bd9aac8":[2,0,0,8,13], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae1af8ea348c4121033e815ffb91ffc7f":[1,0,0,8,18], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae1af8ea348c4121033e815ffb91ffc7f":[2,0,0,8,18], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aec5509934f475c10b4eee26512a08c33":[1,0,0,8,15], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aec5509934f475c10b4eee26512a08c33":[2,0,0,8,15], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#af28c5262b9be9417d3b40804b6d473d3":[1,0,0,8,4], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#af28c5262b9be9417d3b40804b6d473d3":[2,0,0,8,4], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afb756c92300682fb9c1fd29d74c06d4b":[1,0,0,8,1], "class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afb756c92300682fb9c1fd29d74c06d4b":[2,0,0,8,1], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afe0877cb9e0d97f5b5ca408de1562b89":[1,0,0,8,9], -"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afe0877cb9e0d97f5b5ca408de1562b89":[2,0,0,8,9], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afe0877cb9e0d97f5b5ca408de1562b89":[1,0,0,8,10], +"class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afe0877cb9e0d97f5b5ca408de1562b89":[2,0,0,8,10], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,10], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,10], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0548bcb02ed5a326786b2ae237fedc3c":[1,0,0,10,4], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0548bcb02ed5a326786b2ae237fedc3c":[2,0,0,10,4], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa":[1,0,0,10,5], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa":[2,0,0,10,5], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a48023eef054e9c8fd98f8356d9357d48":[1,0,0,10,11], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a48023eef054e9c8fd98f8356d9357d48":[2,0,0,10,11], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a79322ee2599e067f1be1ed9f803bb211":[1,0,0,10,13], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a79322ee2599e067f1be1ed9f803bb211":[2,0,0,10,13], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7fb45bfb235c1179c198c8f594179a13":[1,0,0,10,3], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7fb45bfb235c1179c198c8f594179a13":[2,0,0,10,3], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8e036665e5b6f1ef58e7fc745d7a9542":[1,0,0,10,8], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8e036665e5b6f1ef58e7fc745d7a9542":[2,0,0,10,8], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a09e05865191bc2cb92b27a1fc9a91304":[1,0,0,10,5], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a09e05865191bc2cb92b27a1fc9a91304":[2,0,0,10,5], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a14fd5bec6ca0f9a293d0aade1848ca32":[1,0,0,10,13], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a14fd5bec6ca0f9a293d0aade1848ca32":[2,0,0,10,13], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa":[1,0,0,10,6], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa":[2,0,0,10,6], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1c22a234daf732b6818127a5311572f4":[1,0,0,10,12], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1c22a234daf732b6818127a5311572f4":[2,0,0,10,12], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a79322ee2599e067f1be1ed9f803bb211":[1,0,0,10,14], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a79322ee2599e067f1be1ed9f803bb211":[2,0,0,10,14], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8e036665e5b6f1ef58e7fc745d7a9542":[1,0,0,10,9], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8e036665e5b6f1ef58e7fc745d7a9542":[2,0,0,10,9], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8ec67602063e92a1ecb98300fac2486c":[1,0,0,10,1], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8ec67602063e92a1ecb98300fac2486c":[2,0,0,10,1], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aa0a82c2354b7c9f26c88330ba55fd488":[1,0,0,10,0], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aa0a82c2354b7c9f26c88330ba55fd488":[2,0,0,10,0], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aad83ab252e882f069a4e074ba6daff93":[1,0,0,10,12], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aad83ab252e882f069a4e074ba6daff93":[2,0,0,10,12], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ac4e2726464bd640ef6c7993afe95e1ca":[1,0,0,10,9], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ac4e2726464bd640ef6c7993afe95e1ca":[2,0,0,10,9], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#acca23e7595f55d4509625332f650de8f":[1,0,0,10,7], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#acca23e7595f55d4509625332f650de8f":[2,0,0,10,7], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820":[1,0,0,10,14], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820":[2,0,0,10,14], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae495a55e908778e619d186eb9afb9ecc":[1,0,0,10,6], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae495a55e908778e619d186eb9afb9ecc":[2,0,0,10,6], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae92c9a822eb76f710468e400d22847c9":[1,0,0,10,15], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae92c9a822eb76f710468e400d22847c9":[2,0,0,10,15], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeca8d0211d34404e9fd2ecb4d0d356b9":[1,0,0,10,10], -"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeca8d0211d34404e9fd2ecb4d0d356b9":[2,0,0,10,10], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ab6b9417906375d1e4b8db019f9a84193":[1,0,0,10,3], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ab6b9417906375d1e4b8db019f9a84193":[2,0,0,10,3], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abdbb3701f55d5d075ea044fbe8f9c6d3":[1,0,0,10,15], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abdbb3701f55d5d075ea044fbe8f9c6d3":[2,0,0,10,15], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ac4e2726464bd640ef6c7993afe95e1ca":[1,0,0,10,10], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ac4e2726464bd640ef6c7993afe95e1ca":[2,0,0,10,10], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#acca23e7595f55d4509625332f650de8f":[1,0,0,10,8], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#acca23e7595f55d4509625332f650de8f":[2,0,0,10,8], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820":[1,0,0,10,16], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820":[2,0,0,10,16], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae495a55e908778e619d186eb9afb9ecc":[1,0,0,10,7], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae495a55e908778e619d186eb9afb9ecc":[2,0,0,10,7], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae92c9a822eb76f710468e400d22847c9":[1,0,0,10,17], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae92c9a822eb76f710468e400d22847c9":[2,0,0,10,17], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeca8d0211d34404e9fd2ecb4d0d356b9":[1,0,0,10,11], +"class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeca8d0211d34404e9fd2ecb4d0d356b9":[2,0,0,10,11], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#affde0c05f770aa97dfb1744bbdd33d0d":[1,0,0,10,2], "class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#affde0c05f770aa97dfb1744bbdd33d0d":[2,0,0,10,2], "class_delegate_lib_1_1_delegate_function.html":[1,0,0,11], @@ -188,40 +200,44 @@ var NAVTREEINDEX0 = "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,12], "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a1a92291f285ef7ef68cdc61b2201c5b5":[1,0,0,12,3], "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a1a92291f285ef7ef68cdc61b2201c5b5":[2,0,0,12,3], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a318105c4baad7edc3ab08154aced10cc":[1,0,0,12,13], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a318105c4baad7edc3ab08154aced10cc":[2,0,0,12,13], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a428e71215617457bb0146cac89a42eae":[1,0,0,12,7], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a428e71215617457bb0146cac89a42eae":[2,0,0,12,7], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a318105c4baad7edc3ab08154aced10cc":[1,0,0,12,15], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a318105c4baad7edc3ab08154aced10cc":[2,0,0,12,15], "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a4f5654f2336389d28212ec1d38c7f56d":[1,0,0,12,2], "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a4f5654f2336389d28212ec1d38c7f56d":[2,0,0,12,2], "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a50a948c89c10c03e795303f752c828c7":[1,0,0,12,0], "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a50a948c89c10c03e795303f752c828c7":[2,0,0,12,0], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427":[1,0,0,12,4], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427":[2,0,0,12,4], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a782bbda436c2de4749fc8c098dd75945":[1,0,0,12,11], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a782bbda436c2de4749fc8c098dd75945":[2,0,0,12,11], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a813f00fad959f24480192a5a44b12cdc":[1,0,0,12,5], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a813f00fad959f24480192a5a44b12cdc":[2,0,0,12,5], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a88dd3130ce9b7fa538496a6e2988d2fb":[1,0,0,12,10], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a88dd3130ce9b7fa538496a6e2988d2fb":[2,0,0,12,10], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a59314657e3dfd95c0cfcff23e0356e56":[1,0,0,12,13], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a59314657e3dfd95c0cfcff23e0356e56":[2,0,0,12,13], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a63c632ed0a4fd7a40c27a8f05dbefa50":[1,0,0,12,8], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a63c632ed0a4fd7a40c27a8f05dbefa50":[2,0,0,12,8], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427":[1,0,0,12,5], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427":[2,0,0,12,5], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a782bbda436c2de4749fc8c098dd75945":[1,0,0,12,12], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a782bbda436c2de4749fc8c098dd75945":[2,0,0,12,12], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a813f00fad959f24480192a5a44b12cdc":[1,0,0,12,6], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a813f00fad959f24480192a5a44b12cdc":[2,0,0,12,6], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a95342174adf1cc93cea485abcc74b49b":[1,0,0,12,11], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a95342174adf1cc93cea485abcc74b49b":[2,0,0,12,11], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a957f06ccfe0a582b17c0e30edb3caff5":[1,0,0,12,10], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a957f06ccfe0a582b17c0e30edb3caff5":[2,0,0,12,10], "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ab301553daa1552051356610973a9a284":[1,0,0,12,1], "class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ab301553daa1552051356610973a9a284":[2,0,0,12,1], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881":[1,0,0,12,12], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881":[2,0,0,12,12], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ac9382add63b501bdc4353cab43b98d65":[1,0,0,12,9], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ac9382add63b501bdc4353cab43b98d65":[2,0,0,12,9], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae08b89338a2ebf38fe31af77c5f9b400":[1,0,0,12,6], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae08b89338a2ebf38fe31af77c5f9b400":[2,0,0,12,6], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#aff35a45eb0c37f87d4a566c3fabd0850":[1,0,0,12,8], -"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#aff35a45eb0c37f87d4a566c3fabd0850":[2,0,0,12,8], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881":[1,0,0,12,14], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881":[2,0,0,12,14], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae08b89338a2ebf38fe31af77c5f9b400":[1,0,0,12,7], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae08b89338a2ebf38fe31af77c5f9b400":[2,0,0,12,7], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae75aab7b61893e8c842451491f72be23":[1,0,0,12,4], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae75aab7b61893e8c842451491f72be23":[2,0,0,12,4], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#aff35a45eb0c37f87d4a566c3fabd0850":[1,0,0,12,9], +"class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#aff35a45eb0c37f87d4a566c3fabd0850":[2,0,0,12,9], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,14], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,14], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a12be5d3ae814bea5de0df73d2807bedd":[1,0,0,14,9], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a12be5d3ae814bea5de0df73d2807bedd":[2,0,0,14,9], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a1e6153da03f3d607b1e18deb391c04a4":[1,0,0,14,13], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a1e6153da03f3d607b1e18deb391c04a4":[2,0,0,14,13], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b":[1,0,0,14,14], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b":[2,0,0,14,14], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b":[1,0,0,14,15], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b":[2,0,0,14,15], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a24d22901f60ab741597e253b7f02c174":[1,0,0,14,11], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a24d22901f60ab741597e253b7f02c174":[2,0,0,14,11], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a2a303bc469c86c9f50979caae34f2d51":[1,0,0,14,0], @@ -233,21 +249,5 @@ var NAVTREEINDEX0 = "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a46501e1a3392ed1d13e3f3cba8eb2df0":[1,0,0,14,3], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a46501e1a3392ed1d13e3f3cba8eb2df0":[2,0,0,14,3], "class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4e95505c52ba0355839a32e2cacc3480":[1,0,0,14,1], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4e95505c52ba0355839a32e2cacc3480":[2,0,0,14,1], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4ffeb3f53371220821da54b9303d5bed":[1,0,0,14,12], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4ffeb3f53371220821da54b9303d5bed":[2,0,0,14,12], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56758d6e931fbff1cfc3ea97151fd6b5":[1,0,0,14,8], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56758d6e931fbff1cfc3ea97151fd6b5":[2,0,0,14,8], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56930924ffa7d6662874675263e89bc5":[1,0,0,14,10], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56930924ffa7d6662874675263e89bc5":[2,0,0,14,10], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a5c0e0c2591b0b02feec73b501325fcb6":[1,0,0,14,7], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a5c0e0c2591b0b02feec73b501325fcb6":[2,0,0,14,7], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a642fc55c2dfa6f7eb29f016a7194af9a":[1,0,0,14,15], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a642fc55c2dfa6f7eb29f016a7194af9a":[2,0,0,14,15], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#acf44f40ff48ec3f1481b6dca4e08c352":[1,0,0,14,16], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#acf44f40ff48ec3f1481b6dca4e08c352":[2,0,0,14,16], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae32a58387b3b00e002763f3244310fab":[1,0,0,14,5], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae32a58387b3b00e002763f3244310fab":[2,0,0,14,5], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae51e00822c91e01e7041be385ac38c76":[1,0,0,14,6], -"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae51e00822c91e01e7041be385ac38c76":[2,0,0,14,6] +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4e95505c52ba0355839a32e2cacc3480":[2,0,0,14,1] }; diff --git a/doxygen/html/navtreeindex1.js b/doxygen/html/navtreeindex1.js index 68f8781..c88b74a 100644 --- a/doxygen/html/navtreeindex1.js +++ b/doxygen/html/navtreeindex1.js @@ -1,27 +1,45 @@ var NAVTREEINDEX1 = { +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56758d6e931fbff1cfc3ea97151fd6b5":[1,0,0,14,8], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56758d6e931fbff1cfc3ea97151fd6b5":[2,0,0,14,8], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56930924ffa7d6662874675263e89bc5":[1,0,0,14,10], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56930924ffa7d6662874675263e89bc5":[2,0,0,14,10], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a5c0e0c2591b0b02feec73b501325fcb6":[1,0,0,14,7], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a5c0e0c2591b0b02feec73b501325fcb6":[2,0,0,14,7], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a642fc55c2dfa6f7eb29f016a7194af9a":[1,0,0,14,16], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a642fc55c2dfa6f7eb29f016a7194af9a":[2,0,0,14,16], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ac677a19f9c6ed6f0d5be06e8b1733d37":[1,0,0,14,14], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ac677a19f9c6ed6f0d5be06e8b1733d37":[2,0,0,14,14], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#acf44f40ff48ec3f1481b6dca4e08c352":[1,0,0,14,17], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#acf44f40ff48ec3f1481b6dca4e08c352":[2,0,0,14,17], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae32a58387b3b00e002763f3244310fab":[1,0,0,14,5], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae32a58387b3b00e002763f3244310fab":[2,0,0,14,5], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae51e00822c91e01e7041be385ac38c76":[1,0,0,14,6], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae51e00822c91e01e7041be385ac38c76":[2,0,0,14,6], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#aeafdaa26caccb52408afe591e5c54aca":[1,0,0,14,12], +"class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#aeafdaa26caccb52408afe591e5c54aca":[2,0,0,14,12], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,16], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,16], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a06308fd077f75299814b78d042e52ac0":[1,0,0,16,9], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a06308fd077f75299814b78d042e52ac0":[2,0,0,16,9], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a06a1f3a07b3b85f30d1d149a8ce7694d":[1,0,0,16,6], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a06a1f3a07b3b85f30d1d149a8ce7694d":[2,0,0,16,6], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0cc272f27fb57a62d2c762f74f032eb2":[1,0,0,16,15], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0cc272f27fb57a62d2c762f74f032eb2":[2,0,0,16,15], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0db46ee0537e487e0ffa3daccf2b37aa":[1,0,0,16,12], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0db46ee0537e487e0ffa3daccf2b37aa":[2,0,0,16,12], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0cc272f27fb57a62d2c762f74f032eb2":[1,0,0,16,16], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0cc272f27fb57a62d2c762f74f032eb2":[2,0,0,16,16], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a12fee611f64b1ff921f144456f735c34":[1,0,0,16,3], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a12fee611f64b1ff921f144456f735c34":[2,0,0,16,3], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a19e32658a811a5b584436505c46d8cf7":[1,0,0,16,11], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a19e32658a811a5b584436505c46d8cf7":[2,0,0,16,11], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1c4342829881ac285f0d839906c9f930":[1,0,0,16,7], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1c4342829881ac285f0d839906c9f930":[2,0,0,16,7], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a49ee2d06133beb8f1f97d9435dd233d8":[1,0,0,16,4], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a49ee2d06133beb8f1f97d9435dd233d8":[2,0,0,16,4], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a56245374ac83ac8ae2cb5ea0de8907f8":[1,0,0,16,8], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a56245374ac83ac8ae2cb5ea0de8907f8":[2,0,0,16,8], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6843df2bb2187538a52295ef40915162":[1,0,0,16,3], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6843df2bb2187538a52295ef40915162":[2,0,0,16,3], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1":[1,0,0,16,14], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1":[2,0,0,16,14], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7447f8bc35d5f0749273a90fdbca9376":[1,0,0,16,11], -"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7447f8bc35d5f0749273a90fdbca9376":[2,0,0,16,11], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a5e9ae067e7bc5c3621a6ad80d39cd0bc":[1,0,0,16,12], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a5e9ae067e7bc5c3621a6ad80d39cd0bc":[2,0,0,16,12], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1":[1,0,0,16,15], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1":[2,0,0,16,15], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a793983b42fc5819a186a891b9cac5806":[1,0,0,16,2], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a793983b42fc5819a186a891b9cac5806":[2,0,0,16,2], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8a0cfe8f1e6f7bc06c161a1f210c6aa7":[1,0,0,16,10], @@ -32,26 +50,32 @@ var NAVTREEINDEX1 = "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ab18be594adc125473e2967684953ac1c":[2,0,0,16,1], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abe10c60e4a83a5611e0b9bc9ed6e05e1":[1,0,0,16,13], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abe10c60e4a83a5611e0b9bc9ed6e05e1":[2,0,0,16,13], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeb01775a1f4fbf735e16aca245fc08b8":[1,0,0,16,14], +"class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeb01775a1f4fbf735e16aca245fc08b8":[2,0,0,16,14], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#afae9b073f590b47117d0ee00e100b7e2":[1,0,0,16,5], "class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#afae9b073f590b47117d0ee00e100b7e2":[2,0,0,16,5], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,18], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,18], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a17be8ea39567766ca64bbba8262c6807":[1,0,0,18,14], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a17be8ea39567766ca64bbba8262c6807":[2,0,0,18,14], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2a695e30c79885ec8394cd049301fe24":[1,0,0,18,10], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2a695e30c79885ec8394cd049301fe24":[2,0,0,18,10], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2dcf47b856e718a305b49107349e1d23":[1,0,0,18,9], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2dcf47b856e718a305b49107349e1d23":[2,0,0,18,9], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2a695e30c79885ec8394cd049301fe24":[1,0,0,18,11], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2a695e30c79885ec8394cd049301fe24":[2,0,0,18,11], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2dcf47b856e718a305b49107349e1d23":[1,0,0,18,10], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2dcf47b856e718a305b49107349e1d23":[2,0,0,18,10], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a322dd315ac65ec9fc88616913cf222c3":[1,0,0,18,6], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a322dd315ac65ec9fc88616913cf222c3":[2,0,0,18,6], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f":[1,0,0,18,7], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f":[2,0,0,18,7], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a664175ef9b729241d1d30237f2924ad8":[1,0,0,18,13], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a664175ef9b729241d1d30237f2924ad8":[2,0,0,18,13], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a90f7904623f6945bd232747a207ef5a7":[1,0,0,18,17], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a90f7904623f6945bd232747a207ef5a7":[2,0,0,18,17], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa837983f1f9c0a2f8b35fb0ea4704e5b":[1,0,0,18,8], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa837983f1f9c0a2f8b35fb0ea4704e5b":[2,0,0,18,8], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a412150bb991a3941c45353e4d20303ec":[1,0,0,18,15], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a412150bb991a3941c45353e4d20303ec":[2,0,0,18,15], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f":[1,0,0,18,8], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f":[2,0,0,18,8], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5fc8a23d96dfd6c0fda2d7e9d73966a5":[1,0,0,18,7], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5fc8a23d96dfd6c0fda2d7e9d73966a5":[2,0,0,18,7], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a90f7904623f6945bd232747a207ef5a7":[1,0,0,18,19], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a90f7904623f6945bd232747a207ef5a7":[2,0,0,18,19], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a94073c6581ff7739523e7c8bfe57caa0":[1,0,0,18,12], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a94073c6581ff7739523e7c8bfe57caa0":[2,0,0,18,12], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa34f567d476fb8cba1d28d7ec664e3e2":[1,0,0,18,14], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa34f567d476fb8cba1d28d7ec664e3e2":[2,0,0,18,14], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa837983f1f9c0a2f8b35fb0ea4704e5b":[1,0,0,18,9], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa837983f1f9c0a2f8b35fb0ea4704e5b":[2,0,0,18,9], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa8e6bc2879f78d50ac63ac5cc730b755":[1,0,0,18,2], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa8e6bc2879f78d50ac63ac5cc730b755":[2,0,0,18,2], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab639313353b5269e652b72883adc5c61":[1,0,0,18,1], @@ -60,18 +84,18 @@ var NAVTREEINDEX1 = "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab772a635e195f3553f9c43f344b262df":[2,0,0,18,5], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac0ebe807ef2e92dab70422a6f97a461f":[1,0,0,18,4], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac0ebe807ef2e92dab70422a6f97a461f":[2,0,0,18,4], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac37f599bb6493c11c88a015c877b1530":[1,0,0,18,15], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac37f599bb6493c11c88a015c877b1530":[2,0,0,18,15], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac37f599bb6493c11c88a015c877b1530":[1,0,0,18,16], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac37f599bb6493c11c88a015c877b1530":[2,0,0,18,16], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac6d4fe0918756c689831ce0651da67e5":[1,0,0,18,0], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac6d4fe0918756c689831ce0651da67e5":[2,0,0,18,0], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83":[1,0,0,18,16], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83":[2,0,0,18,16], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83":[1,0,0,18,18], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83":[2,0,0,18,18], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae31b9598c8f3e72d2adcbd9c0a1269e1":[1,0,0,18,17], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae31b9598c8f3e72d2adcbd9c0a1269e1":[2,0,0,18,17], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeb119acb465b89f74f158f6e3d0c6c3d":[1,0,0,18,3], "class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeb119acb465b89f74f158f6e3d0c6c3d":[2,0,0,18,3], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aee8da785497c43d405df31eb73964956":[1,0,0,18,11], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aee8da785497c43d405df31eb73964956":[2,0,0,18,11], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af4eb4fba1da063063b5d4ba47de4299a":[1,0,0,18,12], -"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af4eb4fba1da063063b5d4ba47de4299a":[2,0,0,18,12], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af4eb4fba1da063063b5d4ba47de4299a":[1,0,0,18,13], +"class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af4eb4fba1da063063b5d4ba47de4299a":[2,0,0,18,13], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,20], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,20], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a00787579ccdcf94fea924f2aa3b05cde":[1,0,0,20,11], @@ -82,24 +106,24 @@ var NAVTREEINDEX1 = "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a222976657b434d64f0c3a6d5dc4426c4":[2,0,0,20,7], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2de0939ea659fe15cc57ec93ec2d8d12":[1,0,0,20,0], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2de0939ea659fe15cc57ec93ec2d8d12":[2,0,0,20,0], -"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a367221c5c3b36d7aae675cadaa2c27ba":[1,0,0,20,19], -"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a367221c5c3b36d7aae675cadaa2c27ba":[2,0,0,20,19], -"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814":[1,0,0,20,18], -"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814":[2,0,0,20,18], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a367221c5c3b36d7aae675cadaa2c27ba":[1,0,0,20,20], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a367221c5c3b36d7aae675cadaa2c27ba":[2,0,0,20,20], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814":[1,0,0,20,19], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814":[2,0,0,20,19], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a498aee49e9441a11f859ead02545b79c":[1,0,0,20,8], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a498aee49e9441a11f859ead02545b79c":[2,0,0,20,8], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a66a4e60715f3379696d120cbfd0d0010":[1,0,0,20,10], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a66a4e60715f3379696d120cbfd0d0010":[2,0,0,20,10], -"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6af16d159e7441797be012cfafb7eb82":[1,0,0,20,16], -"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6af16d159e7441797be012cfafb7eb82":[2,0,0,20,16], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a797d31931f53b5c43c75b712e2c4acc1":[1,0,0,20,6], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a797d31931f53b5c43c75b712e2c4acc1":[2,0,0,20,6], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8fe4844542d5e2881cb85e7c5f8cc1c9":[1,0,0,20,5], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8fe4844542d5e2881cb85e7c5f8cc1c9":[2,0,0,20,5], -"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93e6a8587d6f62f39f9dcf6e0c016d9b":[1,0,0,20,20], -"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93e6a8587d6f62f39f9dcf6e0c016d9b":[2,0,0,20,20], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93e6a8587d6f62f39f9dcf6e0c016d9b":[1,0,0,20,21], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93e6a8587d6f62f39f9dcf6e0c016d9b":[2,0,0,20,21], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a97ee00052f6de71e7910784dce3b0fa4":[1,0,0,20,14], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a97ee00052f6de71e7910784dce3b0fa4":[2,0,0,20,14], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cd118df91aa22e6c3d4885b1e39329c":[1,0,0,20,18], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cd118df91aa22e6c3d4885b1e39329c":[2,0,0,20,18], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa73f04631d245b5bf76b6e3025a0b5e5":[1,0,0,20,17], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa73f04631d245b5bf76b6e3025a0b5e5":[2,0,0,20,17], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aaa1df37c6b1b6f9549de0daa981fafcf":[1,0,0,20,12], @@ -108,6 +132,8 @@ var NAVTREEINDEX1 = "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aaf196667f048fb72dfd430bd12a9f8b1":[2,0,0,20,3], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#abe340362fa1daacc9e1d0b58428506e5":[1,0,0,20,9], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#abe340362fa1daacc9e1d0b58428506e5":[2,0,0,20,9], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aca30b381dee966dc0dab34e41080af4e":[1,0,0,20,16], +"class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aca30b381dee966dc0dab34e41080af4e":[2,0,0,20,16], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#acbd04f7121278e2dae40311c4f303d9b":[1,0,0,20,13], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#acbd04f7121278e2dae40311c4f303d9b":[2,0,0,20,13], "class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#acfabf1d64175cf35c3ddc562d9921ac2":[1,0,0,20,4], @@ -132,68 +158,74 @@ var NAVTREEINDEX1 = "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3cb42151d01cc03b45f2248fc513d847":[2,0,0,22,17], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3e831f0389d2ddfa37c5c6a24f145dd4":[1,0,0,22,6], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3e831f0389d2ddfa37c5c6a24f145dd4":[2,0,0,22,6], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4f336c0ec1773959bdc114685a493ac3":[1,0,0,22,15], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4f336c0ec1773959bdc114685a493ac3":[2,0,0,22,15], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4f8262576388c8627661815107ec1120":[1,0,0,22,3], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4f8262576388c8627661815107ec1120":[2,0,0,22,3], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26":[1,0,0,22,18], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26":[2,0,0,22,18], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26":[1,0,0,22,19], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26":[2,0,0,22,19], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8291fb2c29ace6e80959768d7e614e13":[1,0,0,22,10], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8291fb2c29ace6e80959768d7e614e13":[2,0,0,22,10], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93fccd873d370ab1c6ce08a8d731a85e":[1,0,0,22,8], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93fccd873d370ab1c6ce08a8d731a85e":[2,0,0,22,8], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9c9a5f01b71911ff87ce41da11d9bd76":[1,0,0,22,5], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9c9a5f01b71911ff87ce41da11d9bd76":[2,0,0,22,5], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9ff5f9090f4df372ec92efa8e452a3aa":[1,0,0,22,0], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9ff5f9090f4df372ec92efa8e452a3aa":[2,0,0,22,0], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa5e648273103fbcdc4690f07f4f051a9":[1,0,0,22,5], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa5e648273103fbcdc4690f07f4f051a9":[2,0,0,22,5], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aaecfde6d367d64edd65e8e5c0fbe394a":[1,0,0,22,4], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aaecfde6d367d64edd65e8e5c0fbe394a":[2,0,0,22,4], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab3d84f71ed07cd925656df197dc15f28":[1,0,0,22,1], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab3d84f71ed07cd925656df197dc15f28":[2,0,0,22,1], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab9b6a5c6f42ee235c731de9d6df23ece":[1,0,0,22,19], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab9b6a5c6f42ee235c731de9d6df23ece":[2,0,0,22,19], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad01b5e6aefd4680239c0965aa3d47cbd":[1,0,0,22,16], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad01b5e6aefd4680239c0965aa3d47cbd":[2,0,0,22,16], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab9b6a5c6f42ee235c731de9d6df23ece":[1,0,0,22,20], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab9b6a5c6f42ee235c731de9d6df23ece":[2,0,0,22,20], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad077b1a6778b6ece6558d425c44a8b5f":[1,0,0,22,18], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad077b1a6778b6ece6558d425c44a8b5f":[2,0,0,22,18], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad39ce01bd33617cb77b82ab93dc9284a":[1,0,0,22,2], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad39ce01bd33617cb77b82ab93dc9284a":[2,0,0,22,2], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adab84e35075979f20bb2bd5e1bc6dcec":[1,0,0,22,15], -"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adab84e35075979f20bb2bd5e1bc6dcec":[2,0,0,22,15], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae14cab8e15a5b33521f4a4e54a8fcdce":[1,0,0,22,16], +"class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae14cab8e15a5b33521f4a4e54a8fcdce":[2,0,0,22,16], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af52d71df3cdb3d55a49e725b63a19d25":[1,0,0,22,11], "class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af52d71df3cdb3d55a49e725b63a19d25":[2,0,0,22,11], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,24], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,24], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837":[1,0,0,24,7], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837":[2,0,0,24,7], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1231c33ac1e57666ead07191c3f100a8":[1,0,0,24,13], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1231c33ac1e57666ead07191c3f100a8":[2,0,0,24,13], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06":[1,0,0,24,16], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06":[2,0,0,24,16], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837":[1,0,0,24,8], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837":[2,0,0,24,8], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0464754344807471b4a4b96ac4622006":[1,0,0,24,15], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0464754344807471b4a4b96ac4622006":[2,0,0,24,15], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06":[1,0,0,24,18], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06":[2,0,0,24,18], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1441cf9d3f8294e73138f88ec0296749":[1,0,0,24,5], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1441cf9d3f8294e73138f88ec0296749":[2,0,0,24,5], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a195d4972634b9dfc1a87590de1eedee8":[1,0,0,24,8], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a195d4972634b9dfc1a87590de1eedee8":[2,0,0,24,8], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1a96cd942064f5d6b68ad6dedd0213d1":[1,0,0,24,12], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1a96cd942064f5d6b68ad6dedd0213d1":[2,0,0,24,12], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a195d4972634b9dfc1a87590de1eedee8":[1,0,0,24,9], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a195d4972634b9dfc1a87590de1eedee8":[2,0,0,24,9], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1a96cd942064f5d6b68ad6dedd0213d1":[1,0,0,24,13], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1a96cd942064f5d6b68ad6dedd0213d1":[2,0,0,24,13], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a39411e3d1ce79d3998abbfb8f8594ea0":[1,0,0,24,1], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a39411e3d1ce79d3998abbfb8f8594ea0":[2,0,0,24,1], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4954075a9bcc8e94918034d957c4dc65":[1,0,0,24,0], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4954075a9bcc8e94918034d957c4dc65":[2,0,0,24,0], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4adf6d82811ad2304e0fe01b955f07c2":[1,0,0,24,11], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4adf6d82811ad2304e0fe01b955f07c2":[2,0,0,24,11], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5159e7d96232836114759797744dd933":[1,0,0,24,14], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5159e7d96232836114759797744dd933":[2,0,0,24,14], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a59cd7235ba47985fddfe207a077da59b":[1,0,0,24,4], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a59cd7235ba47985fddfe207a077da59b":[2,0,0,24,4], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5a0169bdc6741af4bc6d868af60686f4":[1,0,0,24,14], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5a0169bdc6741af4bc6d868af60686f4":[2,0,0,24,14], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a84b41deebe247220c51d751acb069dce":[1,0,0,24,9], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a84b41deebe247220c51d751acb069dce":[2,0,0,24,9], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a84b41deebe247220c51d751acb069dce":[1,0,0,24,10], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a84b41deebe247220c51d751acb069dce":[2,0,0,24,10], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9030c87d5c2a045761694e1699829a09":[1,0,0,24,17], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9030c87d5c2a045761694e1699829a09":[2,0,0,24,17], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa7471802b453627af7ec648b138e902b":[1,0,0,24,3], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa7471802b453627af7ec648b138e902b":[2,0,0,24,3], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab8bc747498a19e4ca3ba9d3cccb756fa":[1,0,0,24,17], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab8bc747498a19e4ca3ba9d3cccb756fa":[2,0,0,24,17], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac4c0324e61517044e73fe94ec8595b3f":[1,0,0,24,15], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac4c0324e61517044e73fe94ec8595b3f":[2,0,0,24,15], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac6acec090724fa4e992c05f70f4ac7f6":[1,0,0,24,10], -"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac6acec090724fa4e992c05f70f4ac7f6":[2,0,0,24,10], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab0cbc1c7a24738c53121efa1149e24f2":[1,0,0,24,7], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab0cbc1c7a24738c53121efa1149e24f2":[2,0,0,24,7], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab8bc747498a19e4ca3ba9d3cccb756fa":[1,0,0,24,19], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab8bc747498a19e4ca3ba9d3cccb756fa":[2,0,0,24,19], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac4c0324e61517044e73fe94ec8595b3f":[1,0,0,24,16], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac4c0324e61517044e73fe94ec8595b3f":[2,0,0,24,16], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac6acec090724fa4e992c05f70f4ac7f6":[1,0,0,24,11], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac6acec090724fa4e992c05f70f4ac7f6":[2,0,0,24,11], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae43267049d569b72b2f1c96db7ffa582":[1,0,0,24,2], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae43267049d569b72b2f1c96db7ffa582":[2,0,0,24,2], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeb180dc37eff3728a18b178154c892d8":[1,0,0,24,12], +"class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeb180dc37eff3728a18b178154c892d8":[2,0,0,24,12], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec2c3e4602c84a524c72e6f0833170e3":[1,0,0,24,6], "class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec2c3e4602c84a524c72e6f0833170e3":[2,0,0,24,6], "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,26], @@ -204,8 +236,8 @@ var NAVTREEINDEX1 = "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a05f0450821590a09623dc84c0e8ba0a5":[2,0,0,26,4], "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a20c4516e4e96bdf99ce34dbd433bb7ed":[1,0,0,26,2], "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a20c4516e4e96bdf99ce34dbd433bb7ed":[2,0,0,26,2], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a21431c52f8e2a17316aa2a97e0e23cc2":[1,0,0,26,20], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a21431c52f8e2a17316aa2a97e0e23cc2":[2,0,0,26,20], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a21431c52f8e2a17316aa2a97e0e23cc2":[1,0,0,26,21], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a21431c52f8e2a17316aa2a97e0e23cc2":[2,0,0,26,21], "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2402ad65efec989ec7d9bc671ec066ae":[1,0,0,26,14], "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2402ad65efec989ec7d9bc671ec066ae":[2,0,0,26,14], "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2be69705010b23423760a63822b2f408":[1,0,0,26,17], @@ -217,37 +249,5 @@ var NAVTREEINDEX1 = "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4a810a41f439b74a0bcbaaf8dd7eb07e":[1,0,0,26,12], "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4a810a41f439b74a0bcbaaf8dd7eb07e":[2,0,0,26,12], "class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4aae9e2e271efa00a60d6f6c61d454ec":[1,0,0,26,7], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4aae9e2e271efa00a60d6f6c61d454ec":[2,0,0,26,7], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6cef069e1ec3020064447a453c3aa91b":[1,0,0,26,19], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6cef069e1ec3020064447a453c3aa91b":[2,0,0,26,19], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8fa9581587b6d143a9149168eae1855d":[1,0,0,26,11], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8fa9581587b6d143a9149168eae1855d":[2,0,0,26,11], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a95abbb7549ad531efec4a5fe629ca925":[1,0,0,26,8], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a95abbb7549ad531efec4a5fe629ca925":[2,0,0,26,8], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a99e94121177fbf8f9229a3781f500232":[1,0,0,26,3], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a99e94121177fbf8f9229a3781f500232":[2,0,0,26,3], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cb866c89077cbd0e55a22e8bcbb321a":[1,0,0,26,16], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cb866c89077cbd0e55a22e8bcbb321a":[2,0,0,26,16], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9d842c5708e3ea00df399c46a6e0afdc":[1,0,0,26,0], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9d842c5708e3ea00df399c46a6e0afdc":[2,0,0,26,0], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa1b8f9b21955f6d398fab9ad1153f940":[1,0,0,26,10], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa1b8f9b21955f6d398fab9ad1153f940":[2,0,0,26,10], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#abb7c35431237278eb15b6af710193a11":[1,0,0,26,1], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#abb7c35431237278eb15b6af710193a11":[2,0,0,26,1], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac13850e9003f5cd8cb81077b6011b76a":[1,0,0,26,5], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac13850e9003f5cd8cb81077b6011b76a":[2,0,0,26,5], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196":[1,0,0,26,18], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196":[2,0,0,26,18], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af3bd3f99355e53854fc17d086a7a95c9":[1,0,0,26,13], -"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af3bd3f99355e53854fc17d086a7a95c9":[2,0,0,26,13], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,28], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,28], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1f1804370de4dfc3353ad5f9324b1b3b":[1,0,0,28,1], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1f1804370de4dfc3353ad5f9324b1b3b":[2,0,0,28,1], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a248c7fbf1212c7debba5c30e8a84fa80":[1,0,0,28,9], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a248c7fbf1212c7debba5c30e8a84fa80":[2,0,0,28,9], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a37cb6e6d0db0f7f7beb011064e92804c":[1,0,0,28,2], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a37cb6e6d0db0f7f7beb011064e92804c":[2,0,0,28,2], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a48f5e788dd4b24f822155f2c825ae4eb":[1,0,0,28,4], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a48f5e788dd4b24f822155f2c825ae4eb":[2,0,0,28,4] +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4aae9e2e271efa00a60d6f6c61d454ec":[2,0,0,26,7] }; diff --git a/doxygen/html/navtreeindex2.js b/doxygen/html/navtreeindex2.js index 418d445..5b04341 100644 --- a/doxygen/html/navtreeindex2.js +++ b/doxygen/html/navtreeindex2.js @@ -1,37 +1,73 @@ var NAVTREEINDEX2 = { +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6563fdeb2a74bdfc8fd7aabe3dd38a43":[1,0,0,26,18], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6563fdeb2a74bdfc8fd7aabe3dd38a43":[2,0,0,26,18], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6cef069e1ec3020064447a453c3aa91b":[1,0,0,26,20], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6cef069e1ec3020064447a453c3aa91b":[2,0,0,26,20], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8fa9581587b6d143a9149168eae1855d":[1,0,0,26,11], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8fa9581587b6d143a9149168eae1855d":[2,0,0,26,11], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a95abbb7549ad531efec4a5fe629ca925":[1,0,0,26,8], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a95abbb7549ad531efec4a5fe629ca925":[2,0,0,26,8], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a99e94121177fbf8f9229a3781f500232":[1,0,0,26,3], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a99e94121177fbf8f9229a3781f500232":[2,0,0,26,3], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9d842c5708e3ea00df399c46a6e0afdc":[1,0,0,26,0], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9d842c5708e3ea00df399c46a6e0afdc":[2,0,0,26,0], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa1b8f9b21955f6d398fab9ad1153f940":[1,0,0,26,10], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa1b8f9b21955f6d398fab9ad1153f940":[2,0,0,26,10], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#abb7c35431237278eb15b6af710193a11":[1,0,0,26,1], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#abb7c35431237278eb15b6af710193a11":[2,0,0,26,1], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac13850e9003f5cd8cb81077b6011b76a":[1,0,0,26,5], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac13850e9003f5cd8cb81077b6011b76a":[2,0,0,26,5], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196":[1,0,0,26,19], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196":[2,0,0,26,19], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae2028e6668b1e1f4ab8538d9e4be230a":[1,0,0,26,16], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae2028e6668b1e1f4ab8538d9e4be230a":[2,0,0,26,16], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af3bd3f99355e53854fc17d086a7a95c9":[1,0,0,26,13], +"class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af3bd3f99355e53854fc17d086a7a95c9":[2,0,0,26,13], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[1,0,0,28], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html":[2,0,0,28], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a19b1d7c2f6892cd6dd6dd25182e9d07d":[1,0,0,28,18], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a19b1d7c2f6892cd6dd6dd25182e9d07d":[2,0,0,28,18], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1f1804370de4dfc3353ad5f9324b1b3b":[1,0,0,28,1], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1f1804370de4dfc3353ad5f9324b1b3b":[2,0,0,28,1], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a248c7fbf1212c7debba5c30e8a84fa80":[1,0,0,28,9], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a248c7fbf1212c7debba5c30e8a84fa80":[2,0,0,28,9], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a37cb6e6d0db0f7f7beb011064e92804c":[1,0,0,28,2], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a37cb6e6d0db0f7f7beb011064e92804c":[2,0,0,28,2], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a48f5e788dd4b24f822155f2c825ae4eb":[1,0,0,28,4], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a48f5e788dd4b24f822155f2c825ae4eb":[2,0,0,28,4], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab380c00f346e894c9f27658d512bb4":[1,0,0,28,15], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab380c00f346e894c9f27658d512bb4":[2,0,0,28,15], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a55976c43517ad73fded1eead86ee7d7a":[1,0,0,28,3], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a55976c43517ad73fded1eead86ee7d7a":[2,0,0,28,3], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5e7bbce4e16c5045380edf7003f0493d":[1,0,0,28,11], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5e7bbce4e16c5045380edf7003f0493d":[2,0,0,28,11], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5f4fd75f158b4553776e2d62f31cd326":[1,0,0,28,10], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5f4fd75f158b4553776e2d62f31cd326":[2,0,0,28,10], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de":[1,0,0,28,18], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de":[2,0,0,28,18], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de":[1,0,0,28,19], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de":[2,0,0,28,19], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e64aa7476c1cc451d8ac21f660953a8":[1,0,0,28,7], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e64aa7476c1cc451d8ac21f660953a8":[2,0,0,28,7], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a75167ccb570cc43c7262e30039f94965":[1,0,0,28,5], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a75167ccb570cc43c7262e30039f94965":[2,0,0,28,5], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a89a54b3aa7333005761c42b4335d728a":[1,0,0,28,14], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a89a54b3aa7333005761c42b4335d728a":[2,0,0,28,14], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8b5495da7bbed3d691b5b7881c495018":[1,0,0,28,6], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8b5495da7bbed3d691b5b7881c495018":[2,0,0,28,6], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9da9fefa1174dd4d2c5f8eb398a9ea97":[1,0,0,28,5], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9da9fefa1174dd4d2c5f8eb398a9ea97":[2,0,0,28,5], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa513bda0b439e89c7c4149a56bc10a10":[1,0,0,28,12], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa513bda0b439e89c7c4149a56bc10a10":[2,0,0,28,12], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aad11185618821cd2a0cfa68dc2af1e25":[1,0,0,28,8], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aad11185618821cd2a0cfa68dc2af1e25":[2,0,0,28,8], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aafbb90f4eb5ec2fcc05456fe139a6cee":[1,0,0,28,19], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aafbb90f4eb5ec2fcc05456fe139a6cee":[2,0,0,28,19], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aafbb90f4eb5ec2fcc05456fe139a6cee":[1,0,0,28,20], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aafbb90f4eb5ec2fcc05456fe139a6cee":[2,0,0,28,20], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac10dd9cc4d129cae578c2be36b5300e2":[1,0,0,28,0], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac10dd9cc4d129cae578c2be36b5300e2":[2,0,0,28,0], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac1e27a71399c2444f302bfec7c21ae44":[1,0,0,28,13], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac1e27a71399c2444f302bfec7c21ae44":[2,0,0,28,13], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae80f96b3fcb4fb14fd0ef9ba916cf25c":[1,0,0,28,16], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae80f96b3fcb4fb14fd0ef9ba916cf25c":[2,0,0,28,16], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aedbf462168487ee92af82d8a672f3cbc":[1,0,0,28,17], "class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aedbf462168487ee92af82d8a672f3cbc":[2,0,0,28,17], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeee90b3872f904459d05eef068b45504":[1,0,0,28,15], -"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeee90b3872f904459d05eef068b45504":[2,0,0,28,15], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af04d07b743e8adb23111a837dea21185":[1,0,0,28,16], +"class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af04d07b743e8adb23111a837dea21185":[2,0,0,28,16], "class_delegate_lib_1_1_delegate_msg.html":[1,0,0,29], "class_delegate_lib_1_1_delegate_msg.html":[2,0,0,29], "class_delegate_lib_1_1_delegate_msg.html#a61f5dfba67aa879a51239f6c1edbd446":[1,0,0,29,2], @@ -213,41 +249,5 @@ var NAVTREEINDEX2 = "namespacesrc__dup.html#a1f3a18a8b0b09a4da5e264a3322d1b08":[1,0,1,1], "namespacesrc__dup.html#afc752b49e0a83100098f19079eaafef1":[1,0,1,0], "pages.html":[], -"src__dup_8py.html":[3,0,0,0,13], -"src__dup_8py.html#a15dd702d0fd7d58585504fa19b49623d":[3,0,0,0,13,2], -"src__dup_8py.html#a1f3a18a8b0b09a4da5e264a3322d1b08":[3,0,0,0,13,1], -"src__dup_8py.html#afc752b49e0a83100098f19079eaafef1":[3,0,0,0,13,0], -"struct_delegate_lib_1_1_delegate.html":[1,0,0,0], -"struct_delegate_lib_1_1_delegate.html":[2,0,0,0], -"struct_delegate_lib_1_1_delegate_free.html":[1,0,0,5], -"struct_delegate_lib_1_1_delegate_free.html":[2,0,0,5], -"struct_delegate_lib_1_1_delegate_free_async.html":[1,0,0,7], -"struct_delegate_lib_1_1_delegate_free_async.html":[2,0,0,7], -"struct_delegate_lib_1_1_delegate_free_async_wait.html":[1,0,0,9], -"struct_delegate_lib_1_1_delegate_free_async_wait.html":[2,0,0,9], -"struct_delegate_lib_1_1_delegate_function_async.html":[1,0,0,13], -"struct_delegate_lib_1_1_delegate_function_async.html":[2,0,0,13], -"struct_delegate_lib_1_1_delegate_function_async_wait.html":[1,0,0,15], -"struct_delegate_lib_1_1_delegate_function_async_wait.html":[2,0,0,15], -"struct_delegate_lib_1_1_delegate_member.html":[1,0,0,17], -"struct_delegate_lib_1_1_delegate_member.html":[2,0,0,17], -"struct_delegate_lib_1_1_delegate_member_async.html":[1,0,0,19], -"struct_delegate_lib_1_1_delegate_member_async.html":[2,0,0,19], -"struct_delegate_lib_1_1_delegate_member_async_wait.html":[1,0,0,21], -"struct_delegate_lib_1_1_delegate_member_async_wait.html":[2,0,0,21], -"struct_delegate_lib_1_1_delegate_member_sp.html":[1,0,0,23], -"struct_delegate_lib_1_1_delegate_member_sp.html":[2,0,0,23], -"struct_delegate_lib_1_1_delegate_member_sp_async.html":[1,0,0,25], -"struct_delegate_lib_1_1_delegate_member_sp_async.html":[2,0,0,25], -"struct_delegate_lib_1_1_delegate_member_sp_async_wait.html":[1,0,0,27], -"struct_delegate_lib_1_1_delegate_member_sp_async_wait.html":[2,0,0,27], -"struct_delegate_lib_1_1_multicast_delegate.html":[1,0,0,42], -"struct_delegate_lib_1_1_multicast_delegate.html":[2,0,0,42], -"struct_delegate_lib_1_1_multicast_delegate_safe.html":[1,0,0,44], -"struct_delegate_lib_1_1_multicast_delegate_safe.html":[2,0,0,44], -"struct_delegate_lib_1_1_singlecast_delegate.html":[1,0,0,47], -"struct_delegate_lib_1_1_singlecast_delegate.html":[2,0,0,47], -"struct_delegate_lib_1_1is__shared__ptr.html":[1,0,0,36], -"struct_delegate_lib_1_1is__shared__ptr.html":[2,0,0,36], -"struct_delegate_lib_1_1is__shared__ptr_3_01const_01std_1_1shared__ptr_3_01_t_01_4_01_5_01_4.html":[1,0,0,38] +"src__dup_8py.html":[3,0,0,0,13] }; diff --git a/doxygen/html/navtreeindex3.js b/doxygen/html/navtreeindex3.js index 676aee8..049a9fa 100644 --- a/doxygen/html/navtreeindex3.js +++ b/doxygen/html/navtreeindex3.js @@ -1,5 +1,41 @@ var NAVTREEINDEX3 = { +"src__dup_8py.html#a15dd702d0fd7d58585504fa19b49623d":[3,0,0,0,13,2], +"src__dup_8py.html#a1f3a18a8b0b09a4da5e264a3322d1b08":[3,0,0,0,13,1], +"src__dup_8py.html#afc752b49e0a83100098f19079eaafef1":[3,0,0,0,13,0], +"struct_delegate_lib_1_1_delegate.html":[1,0,0,0], +"struct_delegate_lib_1_1_delegate.html":[2,0,0,0], +"struct_delegate_lib_1_1_delegate_free.html":[1,0,0,5], +"struct_delegate_lib_1_1_delegate_free.html":[2,0,0,5], +"struct_delegate_lib_1_1_delegate_free_async.html":[1,0,0,7], +"struct_delegate_lib_1_1_delegate_free_async.html":[2,0,0,7], +"struct_delegate_lib_1_1_delegate_free_async_wait.html":[1,0,0,9], +"struct_delegate_lib_1_1_delegate_free_async_wait.html":[2,0,0,9], +"struct_delegate_lib_1_1_delegate_function_async.html":[1,0,0,13], +"struct_delegate_lib_1_1_delegate_function_async.html":[2,0,0,13], +"struct_delegate_lib_1_1_delegate_function_async_wait.html":[1,0,0,15], +"struct_delegate_lib_1_1_delegate_function_async_wait.html":[2,0,0,15], +"struct_delegate_lib_1_1_delegate_member.html":[1,0,0,17], +"struct_delegate_lib_1_1_delegate_member.html":[2,0,0,17], +"struct_delegate_lib_1_1_delegate_member_async.html":[1,0,0,19], +"struct_delegate_lib_1_1_delegate_member_async.html":[2,0,0,19], +"struct_delegate_lib_1_1_delegate_member_async_wait.html":[1,0,0,21], +"struct_delegate_lib_1_1_delegate_member_async_wait.html":[2,0,0,21], +"struct_delegate_lib_1_1_delegate_member_sp.html":[1,0,0,23], +"struct_delegate_lib_1_1_delegate_member_sp.html":[2,0,0,23], +"struct_delegate_lib_1_1_delegate_member_sp_async.html":[1,0,0,25], +"struct_delegate_lib_1_1_delegate_member_sp_async.html":[2,0,0,25], +"struct_delegate_lib_1_1_delegate_member_sp_async_wait.html":[1,0,0,27], +"struct_delegate_lib_1_1_delegate_member_sp_async_wait.html":[2,0,0,27], +"struct_delegate_lib_1_1_multicast_delegate.html":[1,0,0,42], +"struct_delegate_lib_1_1_multicast_delegate.html":[2,0,0,42], +"struct_delegate_lib_1_1_multicast_delegate_safe.html":[1,0,0,44], +"struct_delegate_lib_1_1_multicast_delegate_safe.html":[2,0,0,44], +"struct_delegate_lib_1_1_singlecast_delegate.html":[1,0,0,47], +"struct_delegate_lib_1_1_singlecast_delegate.html":[2,0,0,47], +"struct_delegate_lib_1_1is__shared__ptr.html":[1,0,0,36], +"struct_delegate_lib_1_1is__shared__ptr.html":[2,0,0,36], +"struct_delegate_lib_1_1is__shared__ptr_3_01const_01std_1_1shared__ptr_3_01_t_01_4_01_5_01_4.html":[1,0,0,38], "struct_delegate_lib_1_1is__shared__ptr_3_01const_01std_1_1shared__ptr_3_01_t_01_4_01_5_01_4.html":[2,0,0,38], "struct_delegate_lib_1_1is__shared__ptr_3_01const_01std_1_1shared__ptr_3_01_t_01_4_01_6_01_4.html":[1,0,0,37], "struct_delegate_lib_1_1is__shared__ptr_3_01const_01std_1_1shared__ptr_3_01_t_01_4_01_6_01_4.html":[2,0,0,37], diff --git a/doxygen/html/search/all_2.js b/doxygen/html/search/all_2.js index 20b62f7..6cf39c9 100644 --- a/doxygen/html/search/all_2.js +++ b/doxygen/html/search/all_2.js @@ -2,7 +2,7 @@ var searchData= [ ['c_20delegate_20library_20documentation_0',['C++ Delegate Library Documentation',['../index.html',1,'']]], ['classtype_1',['ClassType',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a683744d6fe8b0318323e70a1e2bd7f92',1,'DelegateLib::DelegateFree< RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac6d4fe0918756c689831ce0651da67e5',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4954075a9bcc8e94918034d957c4dc65',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a50a948c89c10c03e795303f752c828c7',1,'DelegateLib::DelegateFunction< RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afb756c92300682fb9c1fd29d74c06d4b',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae8d8cb10996c1c2294a0169f9dbbed93',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#abb7c35431237278eb15b6af710193a11',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4e95505c52ba0355839a32e2cacc3480',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8ec67602063e92a1ecb98300fac2486c',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab3d84f71ed07cd925656df197dc15f28',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1f1804370de4dfc3353ad5f9324b1b3b',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::ClassType'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ab18be594adc125473e2967684953ac1c',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::ClassType']]], - ['clear_2',['Clear',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ae4485878a0799f970db1d8f283bc80a0',1,'DelegateLib::DelegateFree< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aee8da785497c43d405df31eb73964956',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4adf6d82811ad2304e0fe01b955f07c2',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a428e71215617457bb0146cac89a42eae',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#acbfa6d7a2393fb734d3ba38b794809b7',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a9732c67d0b37b2418fc776a4a6d5c26d',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#af44894cbde71e2cae0687381f5e07eff',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::Clear()']]], + ['clear_2',['Clear',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a32daf44235f34ed06a33fb5cdf768842',1,'DelegateLib::DelegateFree< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a94073c6581ff7739523e7c8bfe57caa0',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeb180dc37eff3728a18b178154c892d8',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a63c632ed0a4fd7a40c27a8f05dbefa50',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#acbfa6d7a2393fb734d3ba38b794809b7',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a9732c67d0b37b2418fc776a4a6d5c26d',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#af44894cbde71e2cae0687381f5e07eff',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::Clear()']]], ['clone_3',['Clone',['../class_delegate_lib_1_1_delegate_base.html#a1167262e335827e9471abceba1321266',1,'DelegateLib::DelegateBase::Clone()'],['../class_delegate_lib_1_1_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a8ae51fd14e2d7f0193f394095c3f6ed0',1,'DelegateLib::Delegate< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a6d5ded6c118f909f556b9596737a2347',1,'DelegateLib::DelegateFree< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af4eb4fba1da063063b5d4ba47de4299a',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1a96cd942064f5d6b68ad6dedd0213d1',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#aff35a45eb0c37f87d4a566c3fabd0850',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afe0877cb9e0d97f5b5ca408de1562b89',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#acbd04f7121278e2dae40311c4f303d9b',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af3bd3f99355e53854fc17d086a7a95c9',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a12be5d3ae814bea5de0df73d2807bedd',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ac4e2726464bd640ef6c7993afe95e1ca',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2f80842f6fce3a49b26fd09d5f0ed283',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac1e27a71399c2444f302bfec7c21ae44',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a06308fd077f75299814b78d042e52ac0',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::Clone()']]], ['constmemberfunc_4',['ConstMemberFunc',['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab639313353b5269e652b72883adc5c61',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::ConstMemberFunc'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a39411e3d1ce79d3998abbfb8f8594ea0',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::ConstMemberFunc'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a20a9019042525729f704966658bb17ce',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::ConstMemberFunc'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a20c4516e4e96bdf99ce34dbd433bb7ed',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::ConstMemberFunc'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad39ce01bd33617cb77b82ab93dc9284a',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::ConstMemberFunc'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a37cb6e6d0db0f7f7beb011064e92804c',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::ConstMemberFunc']]], ['copy_5fcommon_5fcode_5',['copy_common_code',['../namespacesrc__dup.html#afc752b49e0a83100098f19079eaafef1',1,'src_dup']]] diff --git a/doxygen/html/search/all_3.js b/doxygen/html/search/all_3.js index ebd1d5c..955e48a 100644 --- a/doxygen/html/search/all_3.js +++ b/doxygen/html/search/all_3.js @@ -9,33 +9,33 @@ var searchData= ['delegateasyncwait_2eh_6',['DelegateAsyncWait.h',['../_delegate_async_wait_8h.html',1,'']]], ['delegateasyncwaitmsg_7',['DelegateAsyncWaitMsg',['../class_delegate_lib_1_1_delegate_async_wait_msg.html',1,'DelegateLib::DelegateAsyncWaitMsg< Args >'],['../class_delegate_lib_1_1_delegate_async_wait_msg.html#afc2f62926faf9d0537d2b953e6fd2d91',1,'DelegateLib::DelegateAsyncWaitMsg::DelegateAsyncWaitMsg()']]], ['delegatebase_8',['DelegateBase',['../class_delegate_lib_1_1_delegate_base.html',1,'DelegateLib::DelegateBase'],['../class_delegate_lib_1_1_delegate_base.html#a0b67663a7b8ab2e491c177235329ad8b',1,'DelegateLib::DelegateBase::DelegateBase()']]], - ['delegatefree_9',['DelegateFree',['../struct_delegate_lib_1_1_delegate_free.html',1,'DelegateLib::DelegateFree< R >'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a0394e77858e71a549cf0c21eca681323',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(FreeFunc func)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4d544e9255d64999dc12c465de903ee',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree()=default']]], + ['delegatefree_9',['DelegateFree',['../struct_delegate_lib_1_1_delegate_free.html',1,'DelegateLib::DelegateFree< R >'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a0394e77858e71a549cf0c21eca681323',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(FreeFunc func)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4d544e9255d64999dc12c465de903ee',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a07def835ede6815d619f525440faf21a',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree()=default']]], ['delegatefree_3c_20rettype_28args_2e_2e_2e_29_3e_10',['DelegateFree< RetType(Args...)>',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], - ['delegatefreeasync_11',['DelegateFreeAsync',['../struct_delegate_lib_1_1_delegate_free_async.html',1,'DelegateLib::DelegateFreeAsync< R >'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aa527333a1d851bf51a8805496983691a',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(FreeFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#af28c5262b9be9417d3b40804b6d473d3',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync()=delete']]], + ['delegatefreeasync_11',['DelegateFreeAsync',['../struct_delegate_lib_1_1_delegate_free_async.html',1,'DelegateLib::DelegateFreeAsync< R >'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aa527333a1d851bf51a8805496983691a',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(FreeFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#af28c5262b9be9417d3b40804b6d473d3',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d63a381bb317b348715309c5e741a36',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync()=delete']]], ['delegatefreeasync_3c_20rettype_28args_2e_2e_2e_29_3e_12',['DelegateFreeAsync< RetType(Args...)>',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], - ['delegatefreeasyncwait_13',['DelegateFreeAsyncWait',['../struct_delegate_lib_1_1_delegate_free_async_wait.html',1,'DelegateLib::DelegateFreeAsyncWait< R >'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7fb45bfb235c1179c198c8f594179a13',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0548bcb02ed5a326786b2ae237fedc3c',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait()=delete']]], + ['delegatefreeasyncwait_13',['DelegateFreeAsyncWait',['../struct_delegate_lib_1_1_delegate_free_async_wait.html',1,'DelegateLib::DelegateFreeAsyncWait< R >'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ab6b9417906375d1e4b8db019f9a84193',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0548bcb02ed5a326786b2ae237fedc3c',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a09e05865191bc2cb92b27a1fc9a91304',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait()=delete']]], ['delegatefreeasyncwait_3c_20rettype_28args_2e_2e_2e_29_3e_14',['DelegateFreeAsyncWait< RetType(Args...)>',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], - ['delegatefunction_15',['DelegateFunction',['../class_delegate_lib_1_1_delegate_function.html',1,'DelegateLib::DelegateFunction< R >'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a4f5654f2336389d28212ec1d38c7f56d',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(FunctionType func)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a1a92291f285ef7ef68cdc61b2201c5b5',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction()=default']]], + ['delegatefunction_15',['DelegateFunction',['../class_delegate_lib_1_1_delegate_function.html',1,'DelegateLib::DelegateFunction< R >'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a4f5654f2336389d28212ec1d38c7f56d',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(FunctionType func)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a1a92291f285ef7ef68cdc61b2201c5b5',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae75aab7b61893e8c842451491f72be23',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction()=default']]], ['delegatefunction_3c_20rettype_28args_2e_2e_2e_29_3e_16',['DelegateFunction< RetType(Args...)>',['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], ['delegatefunctionasync_17',['DelegateFunctionAsync',['../struct_delegate_lib_1_1_delegate_function_async.html',1,'DelegateLib::DelegateFunctionAsync< R >'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a46501e1a3392ed1d13e3f3cba8eb2df0',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::DelegateFunctionAsync(FunctionType func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a2fb983602c9e3fcecc54907f13b748ce',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::DelegateFunctionAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae32a58387b3b00e002763f3244310fab',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::DelegateFunctionAsync()=delete']]], ['delegatefunctionasync_3c_20rettype_28args_2e_2e_2e_29_3e_18',['DelegateFunctionAsync< RetType(Args...)>',['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], - ['delegatefunctionasyncwait_19',['DelegateFunctionAsyncWait',['../struct_delegate_lib_1_1_delegate_function_async_wait.html',1,'DelegateLib::DelegateFunctionAsyncWait< R >'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6843df2bb2187538a52295ef40915162',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait(FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a49ee2d06133beb8f1f97d9435dd233d8',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#afae9b073f590b47117d0ee00e100b7e2',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait()=delete']]], + ['delegatefunctionasyncwait_19',['DelegateFunctionAsyncWait',['../struct_delegate_lib_1_1_delegate_function_async_wait.html',1,'DelegateLib::DelegateFunctionAsyncWait< R >'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a12fee611f64b1ff921f144456f735c34',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait(FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a49ee2d06133beb8f1f97d9435dd233d8',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#afae9b073f590b47117d0ee00e100b7e2',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait()=delete']]], ['delegatefunctionasyncwait_3c_20rettype_28args_2e_2e_2e_29_3e_20',['DelegateFunctionAsyncWait< RetType(Args...)>',['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], ['delegateinvoke_21',['DelegateInvoke',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a18d39e4e8e3e6906fd9c07ada1ac5bc6',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a97ee00052f6de71e7910784dce3b0fa4',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2402ad65efec989ec7d9bc671ec066ae',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56930924ffa7d6662874675263e89bc5',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeca8d0211d34404e9fd2ecb4d0d356b9',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a20e9f7755ba4b19fb12988da5f8fe6f7',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a89a54b3aa7333005761c42b4335d728a',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8a0cfe8f1e6f7bc06c161a1f210c6aa7',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_i_delegate_invoker.html#a1386e5a1c2650fb1e5511a16cbb5b1f6',1,'DelegateLib::IDelegateInvoker::DelegateInvoke()']]], ['delegateinvoker_2eh_22',['DelegateInvoker.h',['../_delegate_invoker_8h.html',1,'']]], ['delegatelib_23',['DelegateLib',['../namespace_delegate_lib.html',1,'']]], ['delegatelib_2eh_24',['DelegateLib.h',['../_delegate_lib_8h.html',1,'']]], - ['delegatemember_25',['DelegateMember',['../struct_delegate_lib_1_1_delegate_member.html',1,'DelegateLib::DelegateMember< C, R >'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac0ebe807ef2e92dab70422a6f97a461f',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ObjectPtr object, MemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab772a635e195f3553f9c43f344b262df',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ObjectPtr object, ConstMemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a322dd315ac65ec9fc88616913cf222c3',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember()=default']]], + ['delegatemember_25',['DelegateMember',['../struct_delegate_lib_1_1_delegate_member.html',1,'DelegateLib::DelegateMember< C, R >'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac0ebe807ef2e92dab70422a6f97a461f',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ObjectPtr object, MemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab772a635e195f3553f9c43f344b262df',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ObjectPtr object, ConstMemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a322dd315ac65ec9fc88616913cf222c3',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5fc8a23d96dfd6c0fda2d7e9d73966a5',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember()=default']]], ['delegatemember_3c_20tclass_2c_20rettype_28args_2e_2e_2e_29_3e_26',['DelegateMember< TClass, RetType(Args...)>',['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], ['delegatememberasync_27',['DelegateMemberAsync',['../struct_delegate_lib_1_1_delegate_member_async.html',1,'DelegateLib::DelegateMemberAsync< C, R >'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8fe4844542d5e2881cb85e7c5f8cc1c9',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a797d31931f53b5c43c75b712e2c4acc1',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a222976657b434d64f0c3a6d5dc4426c4',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateMemberAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a498aee49e9441a11f859ead02545b79c',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateMemberAsync()=delete']]], ['delegatememberasync_3c_20tclass_2c_20rettype_28args_2e_2e_2e_29_3e_28',['DelegateMemberAsync< TClass, RetType(Args...)>',['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], - ['delegatememberasyncwait_29',['DelegateMemberAsyncWait',['../struct_delegate_lib_1_1_delegate_member_async_wait.html',1,'DelegateLib::DelegateMemberAsyncWait< C, R >'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa5e648273103fbcdc4690f07f4f051a9',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3e831f0389d2ddfa37c5c6a24f145dd4',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0b1ea98a55b2871d5b21c3d85d811baf',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93fccd873d370ab1c6ce08a8d731a85e',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait()=delete']]], + ['delegatememberasyncwait_29',['DelegateMemberAsyncWait',['../struct_delegate_lib_1_1_delegate_member_async_wait.html',1,'DelegateLib::DelegateMemberAsyncWait< C, R >'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9c9a5f01b71911ff87ce41da11d9bd76',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3e831f0389d2ddfa37c5c6a24f145dd4',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0b1ea98a55b2871d5b21c3d85d811baf',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93fccd873d370ab1c6ce08a8d731a85e',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait()=delete']]], ['delegatememberasyncwait_3c_20tclass_2c_20rettype_28args_2e_2e_2e_29_3e_30',['DelegateMemberAsyncWait< TClass, RetType(Args...)>',['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], - ['delegatemembersp_31',['DelegateMemberSp',['../struct_delegate_lib_1_1_delegate_member_sp.html',1,'DelegateLib::DelegateMemberSp< C, R >'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a59cd7235ba47985fddfe207a077da59b',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ObjectPtr object, MemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1441cf9d3f8294e73138f88ec0296749',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec2c3e4602c84a524c72e6f0833170e3',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp()=default']]], + ['delegatemembersp_31',['DelegateMemberSp',['../struct_delegate_lib_1_1_delegate_member_sp.html',1,'DelegateLib::DelegateMemberSp< C, R >'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a59cd7235ba47985fddfe207a077da59b',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ObjectPtr object, MemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1441cf9d3f8294e73138f88ec0296749',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec2c3e4602c84a524c72e6f0833170e3',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab0cbc1c7a24738c53121efa1149e24f2',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp()=default']]], ['delegatemembersp_3c_20tclass_2c_20rettype_28args_2e_2e_2e_29_3e_32',['DelegateMemberSp< TClass, RetType(Args...)>',['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], ['delegatememberspasync_33',['DelegateMemberSpAsync',['../struct_delegate_lib_1_1_delegate_member_sp_async.html',1,'DelegateLib::DelegateMemberSpAsync< C, R >'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac13850e9003f5cd8cb81077b6011b76a',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0415b2d8187f48557166d43ee5746b8e',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4aae9e2e271efa00a60d6f6c61d454ec',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateMemberSpAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a95abbb7549ad531efec4a5fe629ca925',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateMemberSpAsync()=delete']]], ['delegatememberspasync_3c_20tclass_2c_20rettype_28args_2e_2e_2e_29_3e_34',['DelegateMemberSpAsync< TClass, RetType(Args...)>',['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], - ['delegatememberspasyncwait_35',['DelegateMemberSpAsyncWait',['../struct_delegate_lib_1_1_delegate_member_sp_async_wait.html',1,'DelegateLib::DelegateMemberSpAsyncWait< C, R >'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a75167ccb570cc43c7262e30039f94965',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8b5495da7bbed3d691b5b7881c495018',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e64aa7476c1cc451d8ac21f660953a8',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aad11185618821cd2a0cfa68dc2af1e25',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait()=delete']]], + ['delegatememberspasyncwait_35',['DelegateMemberSpAsyncWait',['../struct_delegate_lib_1_1_delegate_member_sp_async_wait.html',1,'DelegateLib::DelegateMemberSpAsyncWait< C, R >'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9da9fefa1174dd4d2c5f8eb398a9ea97',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8b5495da7bbed3d691b5b7881c495018',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e64aa7476c1cc451d8ac21f660953a8',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aad11185618821cd2a0cfa68dc2af1e25',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait()=delete']]], ['delegatememberspasyncwait_3c_20tclass_2c_20rettype_28args_2e_2e_2e_29_3e_36',['DelegateMemberSpAsyncWait< TClass, RetType(Args...)>',['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html',1,'DelegateLib']]], ['delegatemsg_37',['DelegateMsg',['../class_delegate_lib_1_1_delegate_msg.html',1,'DelegateLib::DelegateMsg'],['../class_delegate_lib_1_1_delegate_msg.html#ad0ce3c1203f3f485d18b2be60f8bf703',1,'DelegateLib::DelegateMsg::DelegateMsg()']]], ['delegatemsg_2eh_38',['DelegateMsg.h',['../_delegate_msg_8h.html',1,'']]], diff --git a/doxygen/html/search/all_4.js b/doxygen/html/search/all_4.js index fd957e6..35d8459 100644 --- a/doxygen/html/search/all_4.js +++ b/doxygen/html/search/all_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['empty_0',['Empty',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad443789fc8236d866f21a6082254a5cb',1,'DelegateLib::DelegateFree< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a664175ef9b729241d1d30237f2924ad8',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1231c33ac1e57666ead07191c3f100a8',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ac9382add63b501bdc4353cab43b98d65',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aecd5f8e6240ee6a7bc748162ef9e46cd',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#aafcf6d25ef4c29c27fcffc7d1c56075c',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a2cee3825995b4400eb0924c3bc54b382',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::Empty()']]] + ['empty_0',['Empty',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#af8f7c7ac3313f9d219d92272b104024a',1,'DelegateLib::DelegateFree< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa34f567d476fb8cba1d28d7ec664e3e2',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5159e7d96232836114759797744dd933',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a957f06ccfe0a582b17c0e30edb3caff5',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aecd5f8e6240ee6a7bc748162ef9e46cd',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#aafcf6d25ef4c29c27fcffc7d1c56075c',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a2cee3825995b4400eb0924c3bc54b382',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::Empty()']]] ]; diff --git a/doxygen/html/search/all_6.js b/doxygen/html/search/all_6.js index d7e1fd9..5c25dcb 100644 --- a/doxygen/html/search/all_6.js +++ b/doxygen/html/search/all_6.js @@ -4,8 +4,8 @@ var searchData= ['getdelegateinvoker_1',['GetDelegateInvoker',['../class_delegate_lib_1_1_delegate_msg.html#a61f5dfba67aa879a51239f6c1edbd446',1,'DelegateLib::DelegateMsg']]], ['getinvokerwaiting_2',['GetInvokerWaiting',['../class_delegate_lib_1_1_delegate_async_wait_msg.html#ae36cc3b75be6d2698213ef25c43ad390',1,'DelegateLib::DelegateAsyncWaitMsg']]], ['getlock_3',['GetLock',['../class_delegate_lib_1_1_delegate_async_wait_msg.html#ac8ca2d43973ccf4141747494448cd930',1,'DelegateLib::DelegateAsyncWaitMsg']]], - ['getretval_4',['GetRetVal',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a48023eef054e9c8fd98f8356d9357d48',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adab84e35075979f20bb2bd5e1bc6dcec',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeee90b3872f904459d05eef068b45504',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7447f8bc35d5f0749273a90fdbca9376',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::GetRetVal()']]], + ['getretval_4',['GetRetVal',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1c22a234daf732b6818127a5311572f4',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4f336c0ec1773959bdc114685a493ac3',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab380c00f346e894c9f27658d512bb4',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a19e32658a811a5b584436505c46d8cf7',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::GetRetVal()']]], ['getsema_5',['GetSema',['../class_delegate_lib_1_1_delegate_async_wait_msg.html#a6730a8609639d49721dbe2389971e3bb',1,'DelegateLib::DelegateAsyncWaitMsg']]], ['getsync_6',['GetSync',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a73fa99c10f6b68b771bb8e83adffc444',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::GetSync()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec8a8636e131eb2746311426dacb7490',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::GetSync()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a469f4b8d8536cfc049d4767fffdd3a15',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::GetSync()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a24d22901f60ab741597e253b7f02c174',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::GetSync()']]], - ['getthread_7',['GetThread',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4f86a71601b797dc9356f0f27e61327f',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6af16d159e7441797be012cfafb7eb82',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cb866c89077cbd0e55a22e8bcbb321a',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4ffeb3f53371220821da54b9303d5bed',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::GetThread()']]] + ['getthread_7',['GetThread',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ad5e3487debe918c8c62d23a94bd9aac8',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aca30b381dee966dc0dab34e41080af4e',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae2028e6668b1e1f4ab8538d9e4be230a',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#aeafdaa26caccb52408afe591e5c54aca',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::GetThread()']]] ]; diff --git a/doxygen/html/search/all_8.js b/doxygen/html/search/all_8.js index 03f736c..6340908 100644 --- a/doxygen/html/search/all_8.js +++ b/doxygen/html/search/all_8.js @@ -8,5 +8,5 @@ var searchData= ['is_5fshared_5fptr_3c_20std_3a_3ashared_5fptr_3c_20t_20_3e_20_26_20_3e_5',['is_shared_ptr< std::shared_ptr< T > & >',['../struct_delegate_lib_1_1is__shared__ptr_3_01std_1_1shared__ptr_3_01_t_01_4_01_6_01_4.html',1,'DelegateLib']]], ['is_5fshared_5fptr_3c_20std_3a_3ashared_5fptr_3c_20t_20_3e_20_2a_20_3e_6',['is_shared_ptr< std::shared_ptr< T > * >',['../struct_delegate_lib_1_1is__shared__ptr_3_01std_1_1shared__ptr_3_01_t_01_4_01_5_01_4.html',1,'DelegateLib']]], ['is_5fshared_5fptr_3c_20std_3a_3ashared_5fptr_3c_20t_20_3e_20_3e_7',['is_shared_ptr< std::shared_ptr< T > >',['../struct_delegate_lib_1_1is__shared__ptr_3_01std_1_1shared__ptr_3_01_t_01_4_01_4.html',1,'DelegateLib']]], - ['issuccess_8',['IsSuccess',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aad83ab252e882f069a4e074ba6daff93',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad01b5e6aefd4680239c0965aa3d47cbd',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae80f96b3fcb4fb14fd0ef9ba916cf25c',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0db46ee0537e487e0ffa3daccf2b37aa',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::IsSuccess()']]] + ['issuccess_8',['IsSuccess',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a14fd5bec6ca0f9a293d0aade1848ca32',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae14cab8e15a5b33521f4a4e54a8fcdce',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af04d07b743e8adb23111a837dea21185',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a5e9ae067e7bc5c3621a6ad80d39cd0bc',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::IsSuccess()']]] ]; diff --git a/doxygen/html/search/all_b.js b/doxygen/html/search/all_b.js index f8cf43e..bd9c35b 100644 --- a/doxygen/html/search/all_b.js +++ b/doxygen/html/search/all_b.js @@ -1,11 +1,11 @@ var searchData= [ ['objectptr_0',['ObjectPtr',['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeb119acb465b89f74f158f6e3d0c6c3d',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::ObjectPtr'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa7471802b453627af7ec648b138e902b',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::ObjectPtr'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#acfabf1d64175cf35c3ddc562d9921ac2',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::ObjectPtr'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a05f0450821590a09623dc84c0e8ba0a5',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::ObjectPtr'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aaecfde6d367d64edd65e8e5c0fbe394a',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::ObjectPtr'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a48f5e788dd4b24f822155f2c825ae4eb',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::ObjectPtr']]], - ['operator_20bool_1',['operator bool',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ada97e2f083a3745b45221ec3f99763c7',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a17be8ea39567766ca64bbba8262c6807',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5a0169bdc6741af4bc6d868af60686f4',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a88dd3130ce9b7fa538496a6e2988d2fb',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a33bcb6658cd012ab8801963f73a13fe9',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a2da23ad790c9b462beb7a5d3bff788dd',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aee196f10c4064cd51da5625678248388',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator bool()']]], + ['operator_20bool_1',['operator bool',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7ded9bcd5b51d3d15d9470c9f21af216',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a412150bb991a3941c45353e4d20303ec',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0464754344807471b4a4b96ac4622006',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a95342174adf1cc93cea485abcc74b49b',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a33bcb6658cd012ab8801963f73a13fe9',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a2da23ad790c9b462beb7a5d3bff788dd',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aee196f10c4064cd51da5625678248388',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator bool()']]], ['operator_21_3d_2',['operator!=',['../class_delegate_lib_1_1_delegate_base.html#a6e908a657cd3651bf4e833a0b79e1564',1,'DelegateLib::DelegateBase']]], ['operator_28_29_3',['operator()',['../class_delegate_lib_1_1_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a12b1e716158f0f205bcf3b6d576b35cf',1,'DelegateLib::Delegate< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a3e31fdd4391c352138672960a50e973d',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac37f599bb6493c11c88a015c877b1530',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac4c0324e61517044e73fe94ec8595b3f',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a782bbda436c2de4749fc8c098dd75945',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d6f10d5f2c1b9215b59946a77edf6f6',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa73f04631d245b5bf76b6e3025a0b5e5',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2be69705010b23423760a63822b2f408',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a1e6153da03f3d607b1e18deb391c04a4',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a79322ee2599e067f1be1ed9f803bb211',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3cb42151d01cc03b45f2248fc513d847',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aedbf462168487ee92af82d8a672f3cbc',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abe10c60e4a83a5611e0b9bc9ed6e05e1',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a8273659a7d2a5febd0e1e3ce8c7fe6b7',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a084351c99acfba753f96b3b366522adb',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a29fd174ba1060d37e164e45ed3e9b383',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator()()']]], ['operator_2b_3d_4',['operator+=',['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#afc6074436f261bcdff69bb4b241e7597',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator+=()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a74ddb360c1f0a668b416551d16c5d7cc',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator+=()']]], ['operator_2d_3d_5',['operator-=',['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a30edf6d7c3ed0db8904a7e58293cc062',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator-=()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a83fd07966d22b666e67c9b4e2f2a3913',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator-=()']]], - ['operator_3d_6',['operator=',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aa9da380779be0a93c208f17ec0bb5e83',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator=(const Delegate< RetType(Args...)> &delegate)'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a0bfbe2a3d03ee9e494fe58ba35c953fd',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator=(const Delegate< RetType(Args...)> *delegate)']]], + ['operator_3d_6',['operator=',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aeaff06f2a709a7602af82cb936e68bbf',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae31b9598c8f3e72d2adcbd9c0a1269e1',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9030c87d5c2a045761694e1699829a09',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a59314657e3dfd95c0cfcff23e0356e56',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aec5509934f475c10b4eee26512a08c33',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cd118df91aa22e6c3d4885b1e39329c',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6563fdeb2a74bdfc8fd7aabe3dd38a43',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ac677a19f9c6ed6f0d5be06e8b1733d37',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abdbb3701f55d5d075ea044fbe8f9c6d3',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad077b1a6778b6ece6558d425c44a8b5f',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a19b1d7c2f6892cd6dd6dd25182e9d07d',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeb01775a1f4fbf735e16aca245fc08b8',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aa9da380779be0a93c208f17ec0bb5e83',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator=(const Delegate< RetType(Args...)> &delegate)'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a0bfbe2a3d03ee9e494fe58ba35c953fd',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator=(const Delegate< RetType(Args...)> *delegate)']]], ['operator_3d_3d_7',['operator==',['../class_delegate_lib_1_1_delegate_base.html#aa77532684ca24f7924662c1f6e2f3bce',1,'DelegateLib::DelegateBase::operator==()'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a487de94ebd8c683330785e755a6539c2',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a90f7904623f6945bd232747a207ef5a7',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab8bc747498a19e4ca3ba9d3cccb756fa',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a318105c4baad7edc3ab08154aced10cc',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a9ef5e4510f2f3378d0dd0c3ff714e3bf',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a367221c5c3b36d7aae675cadaa2c27ba',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6cef069e1ec3020064447a453c3aa91b',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a642fc55c2dfa6f7eb29f016a7194af9a',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae92c9a822eb76f710468e400d22847c9',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab9b6a5c6f42ee235c731de9d6df23ece',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aafbb90f4eb5ec2fcc05456fe139a6cee',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0cc272f27fb57a62d2c762f74f032eb2',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator==()']]] ]; diff --git a/doxygen/html/search/functions_2.js b/doxygen/html/search/functions_2.js index e18e3bf..6d8784a 100644 --- a/doxygen/html/search/functions_2.js +++ b/doxygen/html/search/functions_2.js @@ -1,6 +1,6 @@ var searchData= [ - ['clear_0',['Clear',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ae4485878a0799f970db1d8f283bc80a0',1,'DelegateLib::DelegateFree< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aee8da785497c43d405df31eb73964956',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4adf6d82811ad2304e0fe01b955f07c2',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a428e71215617457bb0146cac89a42eae',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#acbfa6d7a2393fb734d3ba38b794809b7',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a9732c67d0b37b2418fc776a4a6d5c26d',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#af44894cbde71e2cae0687381f5e07eff',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::Clear()']]], + ['clear_0',['Clear',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a32daf44235f34ed06a33fb5cdf768842',1,'DelegateLib::DelegateFree< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a94073c6581ff7739523e7c8bfe57caa0',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeb180dc37eff3728a18b178154c892d8',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a63c632ed0a4fd7a40c27a8f05dbefa50',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#acbfa6d7a2393fb734d3ba38b794809b7',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a9732c67d0b37b2418fc776a4a6d5c26d',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::Clear()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#af44894cbde71e2cae0687381f5e07eff',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::Clear()']]], ['clone_1',['Clone',['../class_delegate_lib_1_1_delegate_base.html#a1167262e335827e9471abceba1321266',1,'DelegateLib::DelegateBase::Clone()'],['../class_delegate_lib_1_1_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a8ae51fd14e2d7f0193f394095c3f6ed0',1,'DelegateLib::Delegate< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a6d5ded6c118f909f556b9596737a2347',1,'DelegateLib::DelegateFree< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af4eb4fba1da063063b5d4ba47de4299a',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1a96cd942064f5d6b68ad6dedd0213d1',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#aff35a45eb0c37f87d4a566c3fabd0850',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#afe0877cb9e0d97f5b5ca408de1562b89',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#acbd04f7121278e2dae40311c4f303d9b',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af3bd3f99355e53854fc17d086a7a95c9',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a12be5d3ae814bea5de0df73d2807bedd',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ac4e2726464bd640ef6c7993afe95e1ca',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2f80842f6fce3a49b26fd09d5f0ed283',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac1e27a71399c2444f302bfec7c21ae44',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::Clone()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a06308fd077f75299814b78d042e52ac0',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::Clone()']]], ['copy_5fcommon_5fcode_2',['copy_common_code',['../namespacesrc__dup.html#afc752b49e0a83100098f19079eaafef1',1,'src_dup']]] ]; diff --git a/doxygen/html/search/functions_3.js b/doxygen/html/search/functions_3.js index a7bc65f..533ab8f 100644 --- a/doxygen/html/search/functions_3.js +++ b/doxygen/html/search/functions_3.js @@ -3,19 +3,19 @@ var searchData= ['delegateasyncmsg_0',['DelegateAsyncMsg',['../class_delegate_lib_1_1_delegate_async_msg.html#a708106c763651c6a4e2daee4f227a06b',1,'DelegateLib::DelegateAsyncMsg']]], ['delegateasyncwaitmsg_1',['DelegateAsyncWaitMsg',['../class_delegate_lib_1_1_delegate_async_wait_msg.html#afc2f62926faf9d0537d2b953e6fd2d91',1,'DelegateLib::DelegateAsyncWaitMsg']]], ['delegatebase_2',['DelegateBase',['../class_delegate_lib_1_1_delegate_base.html#a0b67663a7b8ab2e491c177235329ad8b',1,'DelegateLib::DelegateBase']]], - ['delegatefree_3',['DelegateFree',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a0394e77858e71a549cf0c21eca681323',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(FreeFunc func)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4d544e9255d64999dc12c465de903ee',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree()=default']]], - ['delegatefreeasync_4',['DelegateFreeAsync',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aa527333a1d851bf51a8805496983691a',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(FreeFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#af28c5262b9be9417d3b40804b6d473d3',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync()=delete']]], - ['delegatefreeasyncwait_5',['DelegateFreeAsyncWait',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7fb45bfb235c1179c198c8f594179a13',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0548bcb02ed5a326786b2ae237fedc3c',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait()=delete']]], - ['delegatefunction_6',['DelegateFunction',['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a4f5654f2336389d28212ec1d38c7f56d',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(FunctionType func)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a1a92291f285ef7ef68cdc61b2201c5b5',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction()=default']]], + ['delegatefree_3',['DelegateFree',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a0394e77858e71a549cf0c21eca681323',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(FreeFunc func)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4d544e9255d64999dc12c465de903ee',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a07def835ede6815d619f525440faf21a',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7a4789c93fd33628d24481436c0754a8',1,'DelegateLib::DelegateFree< RetType(Args...)>::DelegateFree()=default']]], + ['delegatefreeasync_4',['DelegateFreeAsync',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aa527333a1d851bf51a8805496983691a',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(FreeFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#af28c5262b9be9417d3b40804b6d473d3',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d63a381bb317b348715309c5e741a36',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a7e948b875da7fc4bafe5e6b74b47ecf4',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateFreeAsync()=delete']]], + ['delegatefreeasyncwait_5',['DelegateFreeAsyncWait',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ab6b9417906375d1e4b8db019f9a84193',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(FreeFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0548bcb02ed5a326786b2ae237fedc3c',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a09e05865191bc2cb92b27a1fc9a91304',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1818f2fdb4605093b52d0d19b3aef5fa',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateFreeAsyncWait()=delete']]], + ['delegatefunction_6',['DelegateFunction',['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a4f5654f2336389d28212ec1d38c7f56d',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(FunctionType func)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a1a92291f285ef7ef68cdc61b2201c5b5',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ae75aab7b61893e8c842451491f72be23',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a7080af7cb53567524dcfa05eb092c427',1,'DelegateLib::DelegateFunction< RetType(Args...)>::DelegateFunction()=default']]], ['delegatefunctionasync_7',['DelegateFunctionAsync',['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a46501e1a3392ed1d13e3f3cba8eb2df0',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::DelegateFunctionAsync(FunctionType func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a2fb983602c9e3fcecc54907f13b748ce',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::DelegateFunctionAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ae32a58387b3b00e002763f3244310fab',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::DelegateFunctionAsync()=delete']]], - ['delegatefunctionasyncwait_8',['DelegateFunctionAsyncWait',['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6843df2bb2187538a52295ef40915162',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait(FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a49ee2d06133beb8f1f97d9435dd233d8',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#afae9b073f590b47117d0ee00e100b7e2',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait()=delete']]], + ['delegatefunctionasyncwait_8',['DelegateFunctionAsyncWait',['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a12fee611f64b1ff921f144456f735c34',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait(FunctionType func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a49ee2d06133beb8f1f97d9435dd233d8',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#afae9b073f590b47117d0ee00e100b7e2',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateFunctionAsyncWait()=delete']]], ['delegateinvoke_9',['DelegateInvoke',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a18d39e4e8e3e6906fd9c07ada1ac5bc6',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a97ee00052f6de71e7910784dce3b0fa4',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2402ad65efec989ec7d9bc671ec066ae',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a56930924ffa7d6662874675263e89bc5',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeca8d0211d34404e9fd2ecb4d0d356b9',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a20e9f7755ba4b19fb12988da5f8fe6f7',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a89a54b3aa7333005761c42b4335d728a',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a8a0cfe8f1e6f7bc06c161a1f210c6aa7',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::DelegateInvoke()'],['../class_delegate_lib_1_1_i_delegate_invoker.html#a1386e5a1c2650fb1e5511a16cbb5b1f6',1,'DelegateLib::IDelegateInvoker::DelegateInvoke()']]], - ['delegatemember_10',['DelegateMember',['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac0ebe807ef2e92dab70422a6f97a461f',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ObjectPtr object, MemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab772a635e195f3553f9c43f344b262df',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ObjectPtr object, ConstMemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a322dd315ac65ec9fc88616913cf222c3',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember()=default']]], + ['delegatemember_10',['DelegateMember',['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac0ebe807ef2e92dab70422a6f97a461f',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ObjectPtr object, MemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab772a635e195f3553f9c43f344b262df',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ObjectPtr object, ConstMemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a322dd315ac65ec9fc88616913cf222c3',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5fc8a23d96dfd6c0fda2d7e9d73966a5',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab91c91146c582b15ad0231b539323f',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::DelegateMember()=default']]], ['delegatememberasync_11',['DelegateMemberAsync',['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8fe4844542d5e2881cb85e7c5f8cc1c9',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateMemberAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a797d31931f53b5c43c75b712e2c4acc1',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateMemberAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a222976657b434d64f0c3a6d5dc4426c4',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateMemberAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a498aee49e9441a11f859ead02545b79c',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::DelegateMemberAsync()=delete']]], - ['delegatememberasyncwait_12',['DelegateMemberAsyncWait',['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa5e648273103fbcdc4690f07f4f051a9',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3e831f0389d2ddfa37c5c6a24f145dd4',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0b1ea98a55b2871d5b21c3d85d811baf',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93fccd873d370ab1c6ce08a8d731a85e',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait()=delete']]], - ['delegatemembersp_13',['DelegateMemberSp',['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a59cd7235ba47985fddfe207a077da59b',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ObjectPtr object, MemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1441cf9d3f8294e73138f88ec0296749',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec2c3e4602c84a524c72e6f0833170e3',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp()=default']]], + ['delegatememberasyncwait_12',['DelegateMemberAsyncWait',['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9c9a5f01b71911ff87ce41da11d9bd76',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3e831f0389d2ddfa37c5c6a24f145dd4',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0b1ea98a55b2871d5b21c3d85d811baf',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a93fccd873d370ab1c6ce08a8d731a85e',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::DelegateMemberAsyncWait()=delete']]], + ['delegatemembersp_13',['DelegateMemberSp',['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a59cd7235ba47985fddfe207a077da59b',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ObjectPtr object, MemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1441cf9d3f8294e73138f88ec0296749',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ObjectPtr object, ConstMemberFunc func)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec2c3e4602c84a524c72e6f0833170e3',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab0cbc1c7a24738c53121efa1149e24f2',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a030851905e967595316455be555e2837',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::DelegateMemberSp()=default']]], ['delegatememberspasync_14',['DelegateMemberSpAsync',['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac13850e9003f5cd8cb81077b6011b76a',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateMemberSpAsync(ObjectPtr object, MemberFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0415b2d8187f48557166d43ee5746b8e',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateMemberSpAsync(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread)'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4aae9e2e271efa00a60d6f6c61d454ec',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateMemberSpAsync(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a95abbb7549ad531efec4a5fe629ca925',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::DelegateMemberSpAsync()=delete']]], - ['delegatememberspasyncwait_15',['DelegateMemberSpAsyncWait',['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a75167ccb570cc43c7262e30039f94965',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8b5495da7bbed3d691b5b7881c495018',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e64aa7476c1cc451d8ac21f660953a8',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aad11185618821cd2a0cfa68dc2af1e25',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait()=delete']]], + ['delegatememberspasyncwait_15',['DelegateMemberSpAsyncWait',['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9da9fefa1174dd4d2c5f8eb398a9ea97',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout=WAIT_INFINITE)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a8b5495da7bbed3d691b5b7881c495018',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(ObjectPtr object, ConstMemberFunc func, DelegateThread &thread, std::chrono::milliseconds timeout)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e64aa7476c1cc451d8ac21f660953a8',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aad11185618821cd2a0cfa68dc2af1e25',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::DelegateMemberSpAsyncWait()=delete']]], ['delegatemsg_16',['DelegateMsg',['../class_delegate_lib_1_1_delegate_msg.html#ad0ce3c1203f3f485d18b2be60f8bf703',1,'DelegateLib::DelegateMsg']]], ['dispatchdelegate_17',['DispatchDelegate',['../class_delegate_lib_1_1_delegate_thread.html#a9a69145597e92bd096062489b14560ad',1,'DelegateLib::DelegateThread']]] ]; diff --git a/doxygen/html/search/functions_4.js b/doxygen/html/search/functions_4.js index fd957e6..35d8459 100644 --- a/doxygen/html/search/functions_4.js +++ b/doxygen/html/search/functions_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['empty_0',['Empty',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ad443789fc8236d866f21a6082254a5cb',1,'DelegateLib::DelegateFree< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a664175ef9b729241d1d30237f2924ad8',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a1231c33ac1e57666ead07191c3f100a8',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#ac9382add63b501bdc4353cab43b98d65',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aecd5f8e6240ee6a7bc748162ef9e46cd',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#aafcf6d25ef4c29c27fcffc7d1c56075c',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a2cee3825995b4400eb0924c3bc54b382',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::Empty()']]] + ['empty_0',['Empty',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#af8f7c7ac3313f9d219d92272b104024a',1,'DelegateLib::DelegateFree< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa34f567d476fb8cba1d28d7ec664e3e2',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5159e7d96232836114759797744dd933',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a957f06ccfe0a582b17c0e30edb3caff5',1,'DelegateLib::DelegateFunction< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aecd5f8e6240ee6a7bc748162ef9e46cd',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#aafcf6d25ef4c29c27fcffc7d1c56075c',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::Empty()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a2cee3825995b4400eb0924c3bc54b382',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::Empty()']]] ]; diff --git a/doxygen/html/search/functions_5.js b/doxygen/html/search/functions_5.js index d7e1fd9..5c25dcb 100644 --- a/doxygen/html/search/functions_5.js +++ b/doxygen/html/search/functions_5.js @@ -4,8 +4,8 @@ var searchData= ['getdelegateinvoker_1',['GetDelegateInvoker',['../class_delegate_lib_1_1_delegate_msg.html#a61f5dfba67aa879a51239f6c1edbd446',1,'DelegateLib::DelegateMsg']]], ['getinvokerwaiting_2',['GetInvokerWaiting',['../class_delegate_lib_1_1_delegate_async_wait_msg.html#ae36cc3b75be6d2698213ef25c43ad390',1,'DelegateLib::DelegateAsyncWaitMsg']]], ['getlock_3',['GetLock',['../class_delegate_lib_1_1_delegate_async_wait_msg.html#ac8ca2d43973ccf4141747494448cd930',1,'DelegateLib::DelegateAsyncWaitMsg']]], - ['getretval_4',['GetRetVal',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a48023eef054e9c8fd98f8356d9357d48',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adab84e35075979f20bb2bd5e1bc6dcec',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aeee90b3872f904459d05eef068b45504',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a7447f8bc35d5f0749273a90fdbca9376',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::GetRetVal()']]], + ['getretval_4',['GetRetVal',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a1c22a234daf732b6818127a5311572f4',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4f336c0ec1773959bdc114685a493ac3',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a4ab380c00f346e894c9f27658d512bb4',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::GetRetVal()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a19e32658a811a5b584436505c46d8cf7',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::GetRetVal()']]], ['getsema_5',['GetSema',['../class_delegate_lib_1_1_delegate_async_wait_msg.html#a6730a8609639d49721dbe2389971e3bb',1,'DelegateLib::DelegateAsyncWaitMsg']]], ['getsync_6',['GetSync',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a73fa99c10f6b68b771bb8e83adffc444',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::GetSync()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aec8a8636e131eb2746311426dacb7490',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::GetSync()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a469f4b8d8536cfc049d4767fffdd3a15',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::GetSync()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a24d22901f60ab741597e253b7f02c174',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::GetSync()']]], - ['getthread_7',['GetThread',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4f86a71601b797dc9356f0f27e61327f',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6af16d159e7441797be012cfafb7eb82',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cb866c89077cbd0e55a22e8bcbb321a',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a4ffeb3f53371220821da54b9303d5bed',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::GetThread()']]] + ['getthread_7',['GetThread',['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#ad5e3487debe918c8c62d23a94bd9aac8',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aca30b381dee966dc0dab34e41080af4e',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae2028e6668b1e1f4ab8538d9e4be230a',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::GetThread()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#aeafdaa26caccb52408afe591e5c54aca',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::GetThread()']]] ]; diff --git a/doxygen/html/search/functions_7.js b/doxygen/html/search/functions_7.js index 1fdba76..f17b9a3 100644 --- a/doxygen/html/search/functions_7.js +++ b/doxygen/html/search/functions_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['issuccess_0',['IsSuccess',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aad83ab252e882f069a4e074ba6daff93',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad01b5e6aefd4680239c0965aa3d47cbd',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae80f96b3fcb4fb14fd0ef9ba916cf25c',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0db46ee0537e487e0ffa3daccf2b37aa',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::IsSuccess()']]] + ['issuccess_0',['IsSuccess',['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a14fd5bec6ca0f9a293d0aade1848ca32',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae14cab8e15a5b33521f4a4e54a8fcdce',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#af04d07b743e8adb23111a837dea21185',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::IsSuccess()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a5e9ae067e7bc5c3621a6ad80d39cd0bc',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::IsSuccess()']]] ]; diff --git a/doxygen/html/search/functions_9.js b/doxygen/html/search/functions_9.js index ba0663f..e5ed783 100644 --- a/doxygen/html/search/functions_9.js +++ b/doxygen/html/search/functions_9.js @@ -1,10 +1,10 @@ var searchData= [ - ['operator_20bool_0',['operator bool',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#ada97e2f083a3745b45221ec3f99763c7',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a17be8ea39567766ca64bbba8262c6807',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a5a0169bdc6741af4bc6d868af60686f4',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a88dd3130ce9b7fa538496a6e2988d2fb',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a33bcb6658cd012ab8801963f73a13fe9',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a2da23ad790c9b462beb7a5d3bff788dd',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aee196f10c4064cd51da5625678248388',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator bool()']]], + ['operator_20bool_0',['operator bool',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a7ded9bcd5b51d3d15d9470c9f21af216',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a412150bb991a3941c45353e4d20303ec',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a0464754344807471b4a4b96ac4622006',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a95342174adf1cc93cea485abcc74b49b',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a33bcb6658cd012ab8801963f73a13fe9',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a2da23ad790c9b462beb7a5d3bff788dd',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator bool()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aee196f10c4064cd51da5625678248388',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator bool()']]], ['operator_21_3d_1',['operator!=',['../class_delegate_lib_1_1_delegate_base.html#a6e908a657cd3651bf4e833a0b79e1564',1,'DelegateLib::DelegateBase']]], ['operator_28_29_2',['operator()',['../class_delegate_lib_1_1_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a12b1e716158f0f205bcf3b6d576b35cf',1,'DelegateLib::Delegate< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a3e31fdd4391c352138672960a50e973d',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac37f599bb6493c11c88a015c877b1530',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ac4c0324e61517044e73fe94ec8595b3f',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a782bbda436c2de4749fc8c098dd75945',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a8d6f10d5f2c1b9215b59946a77edf6f6',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aa73f04631d245b5bf76b6e3025a0b5e5',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a2be69705010b23423760a63822b2f408',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a1e6153da03f3d607b1e18deb391c04a4',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a79322ee2599e067f1be1ed9f803bb211',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a3cb42151d01cc03b45f2248fc513d847',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aedbf462168487ee92af82d8a672f3cbc',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abe10c60e4a83a5611e0b9bc9ed6e05e1',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a8273659a7d2a5febd0e1e3ce8c7fe6b7',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a084351c99acfba753f96b3b366522adb',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator()()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a29fd174ba1060d37e164e45ed3e9b383',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator()()']]], ['operator_2b_3d_3',['operator+=',['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#afc6074436f261bcdff69bb4b241e7597',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator+=()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a74ddb360c1f0a668b416551d16c5d7cc',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator+=()']]], ['operator_2d_3d_4',['operator-=',['../class_delegate_lib_1_1_multicast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a30edf6d7c3ed0db8904a7e58293cc062',1,'DelegateLib::MulticastDelegate< RetType(Args...)>::operator-=()'],['../class_delegate_lib_1_1_multicast_delegate_safe_3_01_ret_type_07_args_8_8_8_08_4.html#a83fd07966d22b666e67c9b4e2f2a3913',1,'DelegateLib::MulticastDelegateSafe< RetType(Args...)>::operator-=()']]], - ['operator_3d_5',['operator=',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=()'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aa9da380779be0a93c208f17ec0bb5e83',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator=(const Delegate< RetType(Args...)> &delegate)'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a0bfbe2a3d03ee9e494fe58ba35c953fd',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator=(const Delegate< RetType(Args...)> *delegate)']]], + ['operator_3d_5',['operator=',['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aa4a27109dccd3bdeb31cdee5107b6137',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#aeaff06f2a709a7602af82cb936e68bbf',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad06b7ee91cc4f40440a2841a2fe2ec83',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ae31b9598c8f3e72d2adcbd9c0a1269e1',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a13b7d137db69a41e83da14c9b4f2fb06',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9030c87d5c2a045761694e1699829a09',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#abd264e188f728eb9ef1ca60a33000881',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a59314657e3dfd95c0cfcff23e0356e56',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a681a97f01b1b14b4149cd82e3269ddb4',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#aec5509934f475c10b4eee26512a08c33',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a46343959b0ea03ef02f1ebe3f8182814',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a9cd118df91aa22e6c3d4885b1e39329c',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#adb92f14347b35af2b3154103b1793196',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6563fdeb2a74bdfc8fd7aabe3dd38a43',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a203dd774ded780851f79cac05c4c719b',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#ac677a19f9c6ed6f0d5be06e8b1733d37',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ad01b49b6d7d19754b2baf7690fae8820',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#abdbb3701f55d5d075ea044fbe8f9c6d3',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6e96e0302225e7c2df7bd2daca5a6d26',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ad077b1a6778b6ece6558d425c44a8b5f',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6d24d274b5686a6cfda2255f2c6049de',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a19b1d7c2f6892cd6dd6dd25182e9d07d',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a6c3628f557fdff90db3bf3f7df4f28f1',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=(const ClassType &rhs)'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#aeb01775a1f4fbf735e16aca245fc08b8',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator=(ClassType &&rhs) noexcept'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#aa9da380779be0a93c208f17ec0bb5e83',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator=(const Delegate< RetType(Args...)> &delegate)'],['../class_delegate_lib_1_1_singlecast_delegate_3_01_ret_type_07_args_8_8_8_08_4.html#a0bfbe2a3d03ee9e494fe58ba35c953fd',1,'DelegateLib::SinglecastDelegate< RetType(Args...)>::operator=(const Delegate< RetType(Args...)> *delegate)']]], ['operator_3d_3d_6',['operator==',['../class_delegate_lib_1_1_delegate_base.html#aa77532684ca24f7924662c1f6e2f3bce',1,'DelegateLib::DelegateBase::operator==()'],['../class_delegate_lib_1_1_delegate_free_3_01_ret_type_07_args_8_8_8_08_4.html#a487de94ebd8c683330785e755a6539c2',1,'DelegateLib::DelegateFree< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a90f7904623f6945bd232747a207ef5a7',1,'DelegateLib::DelegateMember< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_sp_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab8bc747498a19e4ca3ba9d3cccb756fa',1,'DelegateLib::DelegateMemberSp< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_function_3_01_ret_type_07_args_8_8_8_08_4.html#a318105c4baad7edc3ab08154aced10cc',1,'DelegateLib::DelegateFunction< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_free_async_3_01_ret_type_07_args_8_8_8_08_4.html#a9ef5e4510f2f3378d0dd0c3ff714e3bf',1,'DelegateLib::DelegateFreeAsync< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a367221c5c3b36d7aae675cadaa2c27ba',1,'DelegateLib::DelegateMemberAsync< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_sp_async_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#a6cef069e1ec3020064447a453c3aa91b',1,'DelegateLib::DelegateMemberSpAsync< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_function_async_3_01_ret_type_07_args_8_8_8_08_4.html#a642fc55c2dfa6f7eb29f016a7194af9a',1,'DelegateLib::DelegateFunctionAsync< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_free_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#ae92c9a822eb76f710468e400d22847c9',1,'DelegateLib::DelegateFreeAsyncWait< RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#ab9b6a5c6f42ee235c731de9d6df23ece',1,'DelegateLib::DelegateMemberAsyncWait< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_member_sp_async_wait_3_01_t_class_00_01_ret_type_07_args_8_8_8_08_4.html#aafbb90f4eb5ec2fcc05456fe139a6cee',1,'DelegateLib::DelegateMemberSpAsyncWait< TClass, RetType(Args...)>::operator==()'],['../class_delegate_lib_1_1_delegate_function_async_wait_3_01_ret_type_07_args_8_8_8_08_4.html#a0cc272f27fb57a62d2c762f74f032eb2',1,'DelegateLib::DelegateFunctionAsyncWait< RetType(Args...)>::operator==()']]] ]; diff --git a/src/Delegate/Delegate.h b/src/Delegate/Delegate.h index d8f3b14..3bc8951 100644 --- a/src/Delegate/Delegate.h +++ b/src/Delegate/Delegate.h @@ -91,6 +91,10 @@ class DelegateFree : public Delegate { /// @param[in] rhs The object to copy from. DelegateFree(const ClassType& rhs) { Assign(rhs); } + /// @brief Move constructor that transfers ownership of resources. + /// @param[in] rhs The object to move from. + DelegateFree(ClassType&& rhs) noexcept : m_func(rhs.m_func) { } + /// @brief Default constructor creates an empty delegate. DelegateFree() = default; @@ -122,7 +126,7 @@ class DelegateFree : public Delegate { /// @param[in] args - the function arguments, if any. /// @return The bound function return value, if any. virtual RetType operator()(Args... args) override { - return std::invoke(m_func, args...); + return std::invoke(m_func, std::forward(args)...); } /// @brief Assignment operator that assigns the state of one object to another. @@ -135,6 +139,16 @@ class DelegateFree : public Delegate { return *this; } + /// @brief Move assignment operator that transfers ownership of resources. + /// @param[in] rhs The object to move from. + /// @return A reference to the current object. + ClassType& operator=(ClassType&& rhs) noexcept { + if (&rhs != this) { + m_func = rhs.m_func; + } + return *this; + } + /// @brief Compares two delegate objects for equality. /// @param[in] rhs The `DelegateBase` object to compare with the current object. /// @return `true` if the two delegate objects are equal, `false` otherwise. @@ -146,15 +160,15 @@ class DelegateFree : public Delegate { /// @brief Check if the delegate is bound to a target function. /// @return `true` if the delegate has a target function, `false` otherwise. - bool Empty() const { return !m_func; } + bool Empty() const noexcept { return !m_func; } /// @brief Clear the target function. /// @post The delegate is empty. - void Clear() { m_func = nullptr; } + void Clear() noexcept { m_func = nullptr; } /// @brief Implicit conversion operator to `bool`. /// @return `true` if the object is not empty, `false` if the object is empty. - explicit operator bool() const { return !Empty(); } + explicit operator bool() const noexcept { return !Empty(); } private: /// @brief Pointer to a free function, representing the bound target function. @@ -187,13 +201,17 @@ class DelegateMember : public Delegate : public Delegate(args)...); } /// @brief Assignment operator that assigns the state of one object to another. @@ -254,6 +272,17 @@ class DelegateMember : public Delegate : public Delegate : public Delegate : public Delegate(args)...); } /// @brief Assignment operator that assigns the state of one object to another. @@ -377,6 +410,17 @@ class DelegateMemberSp : public Delegate : public Delegate` class has no such limitations and works under all conditions, +/// The other delegate class has no such limitations and works under all conditions, /// including comparing two instance functions of the same class. /// /// @tparam RetType The return type of the bound delegate function. @@ -441,13 +485,17 @@ class DelegateFunction : public Delegate { /// @param[in] func The target `std::function` to store. DelegateFunction(FunctionType func) { Bind(func); } - /// @brief Creates a copy of the current object. - /// @details Clones the current instance of the class by creating a new object - /// and copying the state of the current object to it. - /// @return A pointer to a new `ClassType` instance. - /// @post The caller is responsible for deleting the clone object. + /// @brief Copy constructor that creates a copy of the given instance. + /// @details This constructor initializes a new object as a copy of the + /// provided `rhs` (right-hand side) object. The `rhs` object is used to + /// set the state of the new instance. + /// @param[in] rhs The object to copy from. DelegateFunction(const ClassType& rhs) { Assign(rhs); } + /// @brief Move constructor that transfers ownership of resources. + /// @param[in] rhs The object to move from. + DelegateFunction(ClassType&& rhs) noexcept : m_func(rhs.m_func) { } + /// @brief Default constructor creates an empty delegate. DelegateFunction() = default; @@ -494,6 +542,16 @@ class DelegateFunction : public Delegate { return *this; } + /// @brief Move assignment operator that transfers ownership of resources. + /// @param[in] rhs The object to move from. + /// @return A reference to the current object. + ClassType& operator=(ClassType&& rhs) noexcept { + if (&rhs != this) { + m_func = rhs.m_func; + } + return *this; + } + /// @brief Compares two delegate objects for equality. /// @param[in] rhs The `DelegateBase` object to compare with the current object. /// @return `true` if the two delegate objects are equal, `false` otherwise. @@ -515,15 +573,15 @@ class DelegateFunction : public Delegate { /// @brief Check if the delegate is bound to a target function. /// @return `true` if the delegate has a target function, `false` otherwise. - bool Empty() const { return !m_func; } + bool Empty() const noexcept { return !m_func; } /// @brief Clear the target function. /// @post The delegate is empty. - void Clear() { m_func = nullptr; } + void Clear() noexcept { m_func = nullptr; } /// @brief Implicit conversion operator to `bool`. /// @return `true` if the object is not empty, `false` if the object is empty. - explicit operator bool() const { return !Empty(); } + explicit operator bool() const noexcept { return !Empty(); } private: /// A std::function instance, representing the bound target function. diff --git a/src/Delegate/DelegateAsync.h b/src/Delegate/DelegateAsync.h index e366adb..c32c71d 100644 --- a/src/Delegate/DelegateAsync.h +++ b/src/Delegate/DelegateAsync.h @@ -36,9 +36,7 @@ class DelegateAsyncMsg : public DelegateMsg /// @param[in] invoker - the invoker instance /// @param[in] args - a parameter pack of all target function arguments DelegateAsyncMsg(std::shared_ptr invoker, Args... args) : DelegateMsg(invoker), - m_args(make_tuple_heap(m_heapMem, m_start, args...)) - { - } + m_args(make_tuple_heap(m_heapMem, m_start, std::forward(args)...)) { } virtual ~DelegateAsyncMsg() = default; @@ -88,6 +86,12 @@ class DelegateFreeAsync : public DelegateFree : public DelegateFree : public DelegateFreeGetSync()) - { + if (this->GetSync()) { // Invoke the target function directly - return BaseType::operator()(args...); - } - else - { + return BaseType::operator()(std::forward(args)...); + } else { // Create a clone instance of this delegate auto delegate = std::shared_ptr(Clone()); // Create a new message instance for sending to the destination thread - auto msg = std::make_shared>(delegate, args...); + auto msg = std::make_shared>(delegate, std::forward(args)...); // Dispatch message onto the callback destination thread. DelegateInvoke() // will be called by the destintation thread. @@ -191,9 +203,8 @@ class DelegateFreeAsync : public DelegateFree(args)...); } /// @brief Invoke the delegate function on the destination thread. Called by the @@ -219,7 +230,7 @@ class DelegateFreeAsync : public DelegateFree struct DelegateMemberAsync; // Not defined /// @brief `DelegateMemberAsync<>` class asynchronously invokes a class member target function. -/// @tprarm TClass The class type that contains the member function. +/// @tparam TClass The class type that contains the member function. /// @tparam RetType The return type of the bound delegate function. /// @tparam Args The argument types of the bound delegate function. template @@ -271,11 +282,11 @@ class DelegateMemberAsync : public DelegateMember : public DelegateMember : public DelegateMember : public DelegateMemberGetSync()) - { + if (this->GetSync()) { // Invoke the target function directly - return BaseType::operator()(args...); - } - else - { + return BaseType::operator()(std::forward(args)...); + } else { // Create a clone instance of this delegate auto delegate = std::shared_ptr(Clone()); // Create a new message instance for sending to the destination thread - auto msg = std::make_shared>(delegate, args...); + auto msg = std::make_shared>(delegate, std::forward(args)...); // Dispatch message onto the callback destination thread. DelegateInvoke() // will be called by the destintation thread. @@ -397,12 +416,12 @@ class DelegateMemberAsync : public DelegateMember(args)...); } - /// @brief Invoke the delegate function on the destination thread. + /// @brief Invoke the delegate function on the destination thread. Called by the + /// destintation thread. /// @details Each source thread call to `operator()` generate a call to `DelegateInvoke()` /// on the destination thread. Unlike `DelegateAsyncWait`, a lock is not required between /// source and destination `delegateMsg` access because the source thread is not waiting @@ -424,7 +443,7 @@ class DelegateMemberAsync : public DelegateMember : public DelegateMemberSp< Bind(object, func, thread); } - /// @brief Creates a copy of the current object. - /// @details Clones the current instance of the class by creating a new object - /// and copying the state of the current object to it. - /// @return A pointer to a new `ClassType` instance. - /// @post The caller is responsible for deleting the clone object. + /// @brief Copy constructor that creates a copy of the given instance. + /// @details This constructor initializes a new object as a copy of the + /// provided `rhs` (right-hand side) object. The `rhs` object is used to + /// set the state of the new instance. + /// @param[in] rhs The object to copy from. DelegateMemberSpAsync(const ClassType& rhs) : BaseType(rhs), m_thread(rhs.m_thread) { Assign(rhs); @@ -543,6 +562,17 @@ class DelegateMemberSpAsync : public DelegateMemberSp< return *this; } + /// @brief Move assignment operator that transfers ownership of resources. + /// @param[in] rhs The object to move from. + /// @return A reference to the current object. + ClassType& operator=(ClassType&& rhs) noexcept { + if (&rhs != this) { + BaseType::operator=(std::move(rhs)); + m_thread = rhs.m_thread; // Use the resource + } + return *this; + } + /// @brief Compares two delegate objects for equality. /// @param[in] rhs The `DelegateBase` object to compare with the current object. /// @return `true` if the two delegate objects are equal, `false` otherwise. @@ -553,7 +583,7 @@ class DelegateMemberSpAsync : public DelegateMemberSp< BaseType::operator==(rhs); } - /// @brief Invoke the bound delegate function asynchronously. + /// @brief Invoke the bound delegate function asynchronously. Called by the source thread. /// @details Invoke delegate function asynchronously and do not wait for return value. /// This function is called by the source thread. Dispatches the delegate data into the /// destination thread message queue. `DelegateInvoke()` must be called by the destination @@ -569,18 +599,15 @@ class DelegateMemberSpAsync : public DelegateMemberSp< /// @post Do not use the return value as its not valid. virtual RetType operator()(Args... args) override { // Synchronously invoke the target function? - if (this->GetSync()) - { + if (this->GetSync()) { // Invoke the target function directly - return BaseType::operator()(args...); - } - else - { + return BaseType::operator()(std::forward(args)...); + } else { // Create a clone instance of this delegate auto delegate = std::shared_ptr(Clone()); // Create a new message instance for sending to the destination thread - auto msg = std::make_shared>(delegate, args...); + auto msg = std::make_shared>(delegate, std::forward(args)...); // Dispatch message onto the callback destination thread. DelegateInvoke() // will be called by the destintation thread. @@ -603,12 +630,12 @@ class DelegateMemberSpAsync : public DelegateMemberSp< /// @brief Invoke delegate function asynchronously. Do not wait for return value. /// Called by the source thread. /// @param[in] args The function arguments, if any. - /// @return None. Function invoked asynchronously without waiting for completion. void AsyncInvoke(Args... args) { - operator()(args...); + operator()(std::forward(args)...); } - /// @brief Invoke the delegate function on the destination thread. + /// @brief Invoke the delegate function on the destination thread. Called by the + /// destintation thread. /// @details Each source thread call to `operator()` generate a call to `DelegateInvoke()` /// on the destination thread. Unlike `DelegateAsyncWait`, a lock is not required between /// source and destination `delegateMsg` access because the source thread is not waiting @@ -630,7 +657,7 @@ class DelegateMemberSpAsync : public DelegateMemberSp< ///@brief Get the destination thread that the target function is invoked on. // @return The target thread. - DelegateThread& GetThread() { return m_thread; } + DelegateThread& GetThread() noexcept { return m_thread; } protected: /// @brief Get the synchronous target invoke flag. @@ -679,11 +706,11 @@ class DelegateFunctionAsync : public DelegateFunction : public DelegateFunction : public DelegateFunction : public DelegateFunctionGetSync()) - { + if (this->GetSync()) { // Invoke the target function directly - return BaseType::operator()(args...); - } - else - { + return BaseType::operator()(std::forward(args)...); + } else { // Create a clone instance of this delegate auto delegate = std::shared_ptr(Clone()); // Create a new message instance for sending to the destination thread - auto msg = std::make_shared>(delegate, args...); + auto msg = std::make_shared>(delegate, std::forward(args)...); // Dispatch message onto the callback destination thread. DelegateInvoke() // will be called by the destintation thread. @@ -792,12 +827,12 @@ class DelegateFunctionAsync : public DelegateFunction(args)...); } - /// @brief Invoke the delegate function on the destination thread. + /// @brief Invoke the delegate function on the destination thread. Called by the + /// destintation thread. /// @details Each source thread call to `operator()` generate a call to `DelegateInvoke()` /// on the destination thread. Unlike `DelegateAsyncWait`, a lock is not required between /// source and destination `delegateMsg` access because the source thread is not waiting @@ -819,7 +854,7 @@ class DelegateFunctionAsync : public DelegateFunction invoker, Args... args) : DelegateMsg(invoker), - m_args(args...) + m_args(std::forward(args)...) { } @@ -124,7 +124,7 @@ class DelegateFreeAsyncWait : public DelegateFreeAsync : public DelegateFreeAsync : public DelegateFreeAsync : public DelegateFreeAsyncGetSync()) - { + if (this->GetSync()) { // Invoke the target function directly - return BaseType::operator()(args...); - } - else - { + return BaseType::operator()(std::forward(args)...); + } else { // Create a clone instance of this delegate auto delegate = std::shared_ptr(Clone()); // Create a new message instance for sending to the destination thread. - auto msg = std::make_shared>(delegate, args...); + auto msg = std::make_shared>(delegate, std::forward(args)...); msg->SetInvokerWaiting(true); // Dispatch message onto the callback destination thread. DelegateInvoke() @@ -244,18 +258,14 @@ class DelegateFreeAsyncWait : public DelegateFreeAsyncSetInvokerWaiting(false); // Does the target function have a return value? - if constexpr (std::is_void::value == false) - { + if constexpr (std::is_void::value == false) { // Is the return value valid? - if (m_retVal.has_value()) - { + if (m_retVal.has_value()) { // Return the destination thread target function return value - return std::any_cast(m_retVal); - } - else - { + return GetRetVal(); + } else { // Return a default return value - return RetType(); + return RetType{}; } } } @@ -268,13 +278,10 @@ class DelegateFreeAsyncWait : public DelegateFreeAsync::value == true) - { + if constexpr (std::is_void::value == true) { operator()(args...); return IsSuccess() ? std::optional(true) : std::optional(); - } - else - { + } else { auto retVal = operator()(args...); return IsSuccess() ? std::optional(retVal) : std::optional(); } @@ -300,19 +307,15 @@ class DelegateFreeAsyncWait : public DelegateFreeAsync lock(delegateMsg->GetLock()); // Is the source thread waiting for the target function invoke to complete? - if (delegateMsg->GetInvokerWaiting()) - { + if (delegateMsg->GetInvokerWaiting()) { // Invoke the delegate function synchronously this->SetSync(true); // Does target function have a void return value? - if constexpr (std::is_void::value == true) - { + if constexpr (std::is_void::value == true) { // Invoke the target function using the source thread supplied function arguments std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs())); - } - else - { + } else { // Invoke the target function using the source thread supplied function arguments // and get the return value m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs())); @@ -326,11 +329,18 @@ class DelegateFreeAsyncWait : public DelegateFreeAsync(m_retVal); } + RetType GetRetVal() noexcept { + try { + return std::any_cast(m_retVal); + } + catch (const std::bad_any_cast&) { + return RetType{}; // Return a default value if error + } + } private: /// Set to `true` if async function call succeeds @@ -362,7 +372,7 @@ class DelegateMemberAsyncWait : public DelegateMemberA using BaseType = DelegateMemberAsync; // Contructors take a class instance, member function, and delegate thread - DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) : + DelegateMemberAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout = WAIT_INFINITE) : BaseType(object, func, thread), m_timeout(timeout) { Bind(object, func, thread); } @@ -417,6 +427,17 @@ class DelegateMemberAsyncWait : public DelegateMemberA return *this; } + /// @brief Move assignment operator that transfers ownership of resources. + /// @param[in] rhs The object to move from. + /// @return A reference to the current object. + ClassType& operator=(ClassType&& rhs) noexcept { + if (&rhs != this) { + BaseType::operator=(std::move(rhs)); + m_timeout = rhs.m_timeout; // Use the resource + } + return *this; + } + /// @brief Compares two delegate objects for equality. /// @param[in] rhs The `DelegateBase` object to compare with the current object. /// @return `true` if the two delegate objects are equal, `false` otherwise. @@ -427,7 +448,8 @@ class DelegateMemberAsyncWait : public DelegateMemberA BaseType::operator==(rhs); } - /// @brief Invoke delegate function asynchronously and block for function return value. + /// @brief Invoke delegate function asynchronously and block for function return value. + /// Called by the source thread. /// @details Invoke delegate function asynchronously and wait for the return value. /// This function is called by the source thread. Dispatches the delegate data into the /// destination thread message queue. `DelegateInvoke()` must be called by the destination @@ -449,18 +471,15 @@ class DelegateMemberAsyncWait : public DelegateMemberA /// the return value is valid before use. virtual RetType operator()(Args... args) override { // Synchronously invoke the target function? - if (this->GetSync()) - { + if (this->GetSync()) { // Invoke the target function directly - return BaseType::operator()(args...); - } - else - { + return BaseType::operator()(std::forward(args)...); + } else { // Create a clone instance of this delegate auto delegate = std::shared_ptr(Clone()); // Create a new message instance for sending to the destination thread. - auto msg = std::make_shared>(delegate, args...); + auto msg = std::make_shared>(delegate, std::forward(args)...); msg->SetInvokerWaiting(true); // Dispatch message onto the callback destination thread. DelegateInvoke() @@ -478,18 +497,14 @@ class DelegateMemberAsyncWait : public DelegateMemberA msg->SetInvokerWaiting(false); // Does the target function have a return value? - if constexpr (std::is_void::value == false) - { + if constexpr (std::is_void::value == false) { // Is the return value valid? - if (m_retVal.has_value()) - { + if (m_retVal.has_value()) { // Return the destination thread target function return value - return std::any_cast(m_retVal); - } - else - { + return GetRetVal(); + } else { // Return a default return value - return RetType(); + return RetType{}; } } } @@ -502,19 +517,17 @@ class DelegateMemberAsyncWait : public DelegateMemberA /// `has_value()` to check if the the return value is valid. `value()` contains /// the target function return value. auto AsyncInvoke(Args... args) { - if constexpr (std::is_void::value == true) - { + if constexpr (std::is_void::value == true) { operator()(args...); return IsSuccess() ? std::optional(true) : std::optional(); - } - else - { + } else { auto retVal = operator()(args...); return IsSuccess() ? std::optional(retVal) : std::optional(); } } - /// @brief Invoke the delegate function on the destination thread. + /// @brief Invoke the delegate function on the destination thread. Called by the + /// destination thread. /// @details Each source thread call to `operator()` generate a call to `DelegateInvoke()` /// on the destination thread. A lock is used to protect source and destination thread shared /// data. A semaphore is used to signal the source thread when the destination thread @@ -533,19 +546,15 @@ class DelegateMemberAsyncWait : public DelegateMemberA const std::lock_guard lock(delegateMsg->GetLock()); // Is the source thread waiting for the target function invoke to complete? - if (delegateMsg->GetInvokerWaiting()) - { + if (delegateMsg->GetInvokerWaiting()) { // Invoke the delegate function synchronously this->SetSync(true); // Does target function have a void return value? - if constexpr (std::is_void::value == true) - { + if constexpr (std::is_void::value == true) { // Invoke the target function using the source thread supplied function arguments std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs())); - } - else - { + } else { // Invoke the target function using the source thread supplied function arguments // and get the return value m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs())); @@ -559,11 +568,18 @@ class DelegateMemberAsyncWait : public DelegateMemberA /// Returns `true` if asynchronous function successfully invoked on the target thread /// @return `true` if the target asynchronous function call succeeded. `false` if /// the timeout expired before the target function could be invoked. - bool IsSuccess() { return m_success; } + bool IsSuccess() noexcept { return m_success; } /// Get the asynchronous function return value /// @return The destination thraed target function return value - RetType GetRetVal() { return std::any_cast(m_retVal); } + RetType GetRetVal() noexcept { + try { + return std::any_cast(m_retVal); + } + catch (const std::bad_any_cast&) { + return RetType{}; // Return a default value if error + } + } private: /// Set to `true` if async function call succeeds @@ -595,7 +611,7 @@ class DelegateMemberSpAsyncWait : public DelegateMembe using BaseType = DelegateMemberSpAsync; // Contructors take a class instance, member function, and delegate thread - DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout) : + DelegateMemberSpAsyncWait(ObjectPtr object, MemberFunc func, DelegateThread& thread, std::chrono::milliseconds timeout = WAIT_INFINITE) : BaseType(object, func, thread), m_timeout(timeout) { Bind(object, func, thread); } @@ -650,6 +666,17 @@ class DelegateMemberSpAsyncWait : public DelegateMembe return *this; } + /// @brief Move assignment operator that transfers ownership of resources. + /// @param[in] rhs The object to move from. + /// @return A reference to the current object. + ClassType& operator=(ClassType&& rhs) noexcept { + if (&rhs != this) { + BaseType::operator=(std::move(rhs)); + m_timeout = rhs.m_timeout; // Use the resource + } + return *this; + } + /// @brief Compares two delegate objects for equality. /// @param[in] rhs The `DelegateBase` object to compare with the current object. /// @return `true` if the two delegate objects are equal, `false` otherwise. @@ -660,7 +687,8 @@ class DelegateMemberSpAsyncWait : public DelegateMembe BaseType::operator==(rhs); } - /// @brief Invoke delegate function asynchronously and block for function return value. + /// @brief Invoke delegate function asynchronously and block for function return value. + /// Called by the source thread. /// @details Invoke delegate function asynchronously and wait for the return value. /// This function is called by the source thread. Dispatches the delegate data into the /// destination thread message queue. `DelegateInvoke()` must be called by the destination @@ -682,18 +710,15 @@ class DelegateMemberSpAsyncWait : public DelegateMembe /// the return value is valid before use. virtual RetType operator()(Args... args) override { // Synchronously invoke the target function? - if (this->GetSync()) - { + if (this->GetSync()) { // Invoke the target function directly - return BaseType::operator()(args...); - } - else - { + return BaseType::operator()(std::forward(args)...); + } else { // Create a clone instance of this delegate auto delegate = std::shared_ptr(Clone()); // Create a new message instance for sending to the destination thread. - auto msg = std::make_shared>(delegate, args...); + auto msg = std::make_shared>(delegate, std::forward(args)...); msg->SetInvokerWaiting(true); // Dispatch message onto the callback destination thread. DelegateInvoke() @@ -711,18 +736,14 @@ class DelegateMemberSpAsyncWait : public DelegateMembe msg->SetInvokerWaiting(false); // Does the target function have a return value? - if constexpr (std::is_void::value == false) - { + if constexpr (std::is_void::value == false) { // Is the return value valid? - if (m_retVal.has_value()) - { + if (m_retVal.has_value()) { // Return the destination thread target function return value - return std::any_cast(m_retVal); - } - else - { + return GetRetVal(); + } else { // Return a default return value - return RetType(); + return RetType{}; } } } @@ -735,19 +756,17 @@ class DelegateMemberSpAsyncWait : public DelegateMembe /// `has_value()` to check if the the return value is valid. `value()` contains /// the target function return value. auto AsyncInvoke(Args... args) { - if constexpr (std::is_void::value == true) - { + if constexpr (std::is_void::value == true) { operator()(args...); return IsSuccess() ? std::optional(true) : std::optional(); - } - else - { + } else { auto retVal = operator()(args...); return IsSuccess() ? std::optional(retVal) : std::optional(); } } - /// @brief Invoke the delegate function on the destination thread. + /// @brief Invoke the delegate function on the destination thread. Called by the + /// destination thread. /// @details Each source thread call to `operator()` generate a call to `DelegateInvoke()` /// on the destination thread. A lock is used to protect source and destination thread shared /// data. A semaphore is used to signal the source thread when the destination thread @@ -766,19 +785,15 @@ class DelegateMemberSpAsyncWait : public DelegateMembe const std::lock_guard lock(delegateMsg->GetLock()); // Is the source thread waiting for the target function invoke to complete? - if (delegateMsg->GetInvokerWaiting()) - { + if (delegateMsg->GetInvokerWaiting()) { // Invoke the delegate function synchronously this->SetSync(true); // Does target function have a void return value? - if constexpr (std::is_void::value == true) - { + if constexpr (std::is_void::value == true) { // Invoke the target function using the source thread supplied function arguments std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs())); - } - else - { + } else { // Invoke the target function using the source thread supplied function arguments // and get the return value m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs())); @@ -792,11 +807,18 @@ class DelegateMemberSpAsyncWait : public DelegateMembe /// Returns `true` if asynchronous function successfully invoked on the target thread /// @return `true` if the target asynchronous function call succeeded. `false` if /// the timeout expired before the target function could be invoked. - bool IsSuccess() { return m_success; } + bool IsSuccess() noexcept { return m_success; } /// Get the asynchronous function return value /// @return The destination thraed target function return value - RetType GetRetVal() { return std::any_cast(m_retVal); } + RetType GetRetVal() noexcept { + try { + return std::any_cast(m_retVal); + } + catch (const std::bad_any_cast&) { + return RetType{}; // Return a default value if error + } + } private: /// Set to `true` if async function call succeeds @@ -828,7 +850,7 @@ class DelegateFunctionAsyncWait : public DelegateFunctionAsync using BaseType = DelegateFunctionAsync; // Contructors take a std::function, delegate thread and timeout - DelegateFunctionAsyncWait(FunctionType func, DelegateThread& thread, std::chrono::milliseconds timeout) : + DelegateFunctionAsyncWait(FunctionType func, DelegateThread& thread, std::chrono::milliseconds timeout = WAIT_INFINITE) : BaseType(func, thread), m_timeout(timeout) { Bind(func, thread); } @@ -874,6 +896,17 @@ class DelegateFunctionAsyncWait : public DelegateFunctionAsync return *this; } + /// @brief Move assignment operator that transfers ownership of resources. + /// @param[in] rhs The object to move from. + /// @return A reference to the current object. + ClassType& operator=(ClassType&& rhs) noexcept { + if (&rhs != this) { + BaseType::operator=(std::move(rhs)); + m_timeout = rhs.m_timeout; // Use the resource + } + return *this; + } + /// @brief Compares two delegate objects for equality. /// @param[in] rhs The `DelegateBase` object to compare with the current object. /// @return `true` if the two delegate objects are equal, `false` otherwise. @@ -884,7 +917,8 @@ class DelegateFunctionAsyncWait : public DelegateFunctionAsync BaseType::operator==(rhs); } - /// @brief Invoke delegate function asynchronously and block for function return value. + /// @brief Invoke delegate function asynchronously and block for function return value. + /// Called by the source thread. /// @details Invoke delegate function asynchronously and wait for the return value. /// This function is called by the source thread. Dispatches the delegate data into the /// destination thread message queue. `DelegateInvoke()` must be called by the destination @@ -906,18 +940,15 @@ class DelegateFunctionAsyncWait : public DelegateFunctionAsync /// the return value is valid before use. virtual RetType operator()(Args... args) override { // Synchronously invoke the target function? - if (this->GetSync()) - { + if (this->GetSync()) { // Invoke the target function directly - return BaseType::operator()(args...); - } - else - { + return BaseType::operator()(std::forward(args)...); + } else { // Create a clone instance of this delegate auto delegate = std::shared_ptr(Clone()); // Create a new message instance for sending to the destination thread. - auto msg = std::make_shared>(delegate, args...); + auto msg = std::make_shared>(delegate, std::forward(args)...); msg->SetInvokerWaiting(true); // Dispatch message onto the callback destination thread. DelegateInvoke() @@ -935,18 +966,14 @@ class DelegateFunctionAsyncWait : public DelegateFunctionAsync msg->SetInvokerWaiting(false); // Does the target function have a return value? - if constexpr (std::is_void::value == false) - { + if constexpr (std::is_void::value == false) { // Is the return value valid? - if (m_retVal.has_value()) - { + if (m_retVal.has_value()) { // Return the destination thread target function return value - return std::any_cast(m_retVal); - } - else - { + return GetRetVal(); + } else { // Return a default return value - return RetType(); + return RetType{}; } } } @@ -959,19 +986,17 @@ class DelegateFunctionAsyncWait : public DelegateFunctionAsync /// `has_value()` to check if the the return value is valid. `value()` contains /// the target function return value. auto AsyncInvoke(Args... args) { - if constexpr (std::is_void::value == true) - { + if constexpr (std::is_void::value == true) { operator()(args...); return IsSuccess() ? std::optional(true) : std::optional(); - } - else - { + } else { auto retVal = operator()(args...); return IsSuccess() ? std::optional(retVal) : std::optional(); } } - /// @brief Invoke the delegate function on the destination thread. + /// @brief Invoke the delegate function on the destination thread. Called by the + /// destination thread. /// @details Each source thread call to `operator()` generate a call to `DelegateInvoke()` /// on the destination thread. A lock is used to protect source and destination thread shared /// data. A semaphore is used to signal the source thread when the destination thread @@ -990,19 +1015,15 @@ class DelegateFunctionAsyncWait : public DelegateFunctionAsync const std::lock_guard lock(delegateMsg->GetLock()); // Is the source thread waiting for the target function invoke to complete? - if (delegateMsg->GetInvokerWaiting()) - { + if (delegateMsg->GetInvokerWaiting()) { // Invoke the delegate function synchronously this->SetSync(true); // Does target function have a void return value? - if constexpr (std::is_void::value == true) - { + if constexpr (std::is_void::value == true) { // Invoke the target function using the source thread supplied function arguments std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs())); - } - else - { + } else { // Invoke the target function using the source thread supplied function arguments // and get the return value m_retVal = std::apply(&BaseType::operator(), std::tuple_cat(std::make_tuple(this), delegateMsg->GetArgs())); @@ -1016,11 +1037,18 @@ class DelegateFunctionAsyncWait : public DelegateFunctionAsync /// Returns `true` if asynchronous function successfully invoked on the target thread /// @return `true` if the target asynchronous function call succeeded. `false` if /// the timeout expired before the target function could be invoked. - bool IsSuccess() { return m_success; } + bool IsSuccess() noexcept { return m_success; } /// Get the asynchronous function return value /// @return The destination thraed target function return value - RetType GetRetVal() { return std::any_cast(m_retVal); } + RetType GetRetVal() noexcept { + try { + return std::any_cast(m_retVal); + } + catch (const std::bad_any_cast&) { + return RetType{}; // Return a default value if error + } + } private: /// Set to `true` if async function call succeeds diff --git a/src/Delegate/MulticastDelegate.h b/src/Delegate/MulticastDelegate.h index 4328b6f..38064d3 100644 --- a/src/Delegate/MulticastDelegate.h +++ b/src/Delegate/MulticastDelegate.h @@ -29,7 +29,7 @@ class MulticastDelegate /// @param[in] args The farguments used when invoking the target function void operator()(Args... args) { for (Delegate* delegate : m_delegates) - (*delegate)(args...); // Invoke delegate callback + (*delegate)(std::forward(args)...); // Invoke delegate callback } /// Insert a delegate into the container. diff --git a/src/Delegate/SinglecastDelegate.h b/src/Delegate/SinglecastDelegate.h index e5a6ffc..616e453 100644 --- a/src/Delegate/SinglecastDelegate.h +++ b/src/Delegate/SinglecastDelegate.h @@ -22,7 +22,7 @@ class SinglecastDelegate ~SinglecastDelegate() { Clear(); } RetType operator()(Args... args) { - return (*m_delegate)(args...); // Invoke delegate callback + return (*m_delegate)(std::forward(args)...); // Invoke delegate callback } void operator=(const Delegate& delegate) { diff --git a/tests/UnitTests/DelegateAsyncWait_UT.cpp b/tests/UnitTests/DelegateAsyncWait_UT.cpp new file mode 100644 index 0000000..f9d716b --- /dev/null +++ b/tests/UnitTests/DelegateAsyncWait_UT.cpp @@ -0,0 +1,25 @@ +#include "DelegateLib.h" +#include "UnitTestCommon.h" +#include +#include "WorkerThreadStd.h" +#ifdef WIN32 +#include +#endif + +using namespace DelegateLib; +using namespace std; +using namespace UnitTestData; + +static void DelegateFreeTests() +{ + int stackVal = 100; + std::function LambdaCapture = [stackVal](int i) { + }; + + // TODO +} + +void DelegateAsyncWait_UT() +{ + +} \ No newline at end of file diff --git a/tests/UnitTests/DelegateAsync_UT.cpp b/tests/UnitTests/DelegateAsync_UT.cpp new file mode 100644 index 0000000..f2aed81 --- /dev/null +++ b/tests/UnitTests/DelegateAsync_UT.cpp @@ -0,0 +1,25 @@ +#include "DelegateLib.h" +#include "UnitTestCommon.h" +#include +#include "WorkerThreadStd.h" +#ifdef WIN32 +#include +#endif + +using namespace DelegateLib; +using namespace std; +using namespace UnitTestData; + +static void DelegateFreeTests() +{ + int stackVal = 100; + std::function LambdaCapture = [stackVal](int i) { + }; + + // TODO +} + +void DelegateAsync_UT() +{ + +} \ No newline at end of file diff --git a/tests/UnitTests/DelegateUnitTests.cpp b/tests/UnitTests/DelegateUnitTests.cpp index 9bc804c..903dbd1 100644 --- a/tests/UnitTests/DelegateUnitTests.cpp +++ b/tests/UnitTests/DelegateUnitTests.cpp @@ -1,4 +1,5 @@ #include "DelegateLib.h" +#include "UnitTestCommon.h" #include #include "WorkerThreadStd.h" #ifdef WIN32 @@ -2571,8 +2572,16 @@ void DelegateMemberAsyncWaitTests() int ret = MemberFuncIntWithReturn5Delegate(TEST_INT, TEST_INT, TEST_INT, TEST_INT, TEST_INT); } +extern void Delegate_UT(); +extern void DelegateAsync_UT(); +extern void DelegateAsyncWait_UT(); + void DelegateUnitTests() { + Delegate_UT(); + DelegateAsync_UT(); + DelegateAsyncWait_UT(); + testThread.CreateThread(); #ifdef WIN32 diff --git a/tests/UnitTests/Delegate_UT.cpp b/tests/UnitTests/Delegate_UT.cpp new file mode 100644 index 0000000..e38407b --- /dev/null +++ b/tests/UnitTests/Delegate_UT.cpp @@ -0,0 +1,25 @@ +#include "DelegateLib.h" +#include "UnitTestCommon.h" +#include +#include "WorkerThreadStd.h" +#ifdef WIN32 +#include +#endif + +using namespace DelegateLib; +using namespace std; +using namespace UnitTestData; + +static void DelegateFreeTests() +{ + int stackVal = 100; + std::function LambdaCapture = [stackVal](int i) { + }; + + // TODO +} + +void Delegate_UT() +{ + DelegateFreeTests(); +} \ No newline at end of file diff --git a/tests/UnitTests/UnitTestCommon.h b/tests/UnitTests/UnitTestCommon.h new file mode 100644 index 0000000..6814905 --- /dev/null +++ b/tests/UnitTests/UnitTestCommon.h @@ -0,0 +1,93 @@ +#pragma once + +#include +#include + +namespace UnitTestData +{ + static int callCnt = 0; + + static const int TEST_INT = 12345678; + + static std::function LambdaNoCapture = [](int i) { + }; + + static std::function LambdaForcedCapture = +[](int i) { + }; + + struct StructParam { int val; }; + static int FreeFuncIntWithReturn0() { return TEST_INT; } + + static void FreeFunc0() { } + + static void FreeFuncInt1(int i) { ASSERT_TRUE(i == TEST_INT); } + static int FreeFuncIntWithReturn1(int i) { ASSERT_TRUE(i == TEST_INT); return i; } + static void FreeFuncPtrPtr1(StructParam** s) { ASSERT_TRUE((*s)->val == TEST_INT); } + static void FreeFuncStruct1(StructParam s) { ASSERT_TRUE(s.val == TEST_INT); } + static void FreeFuncStructPtr1(StructParam* s) { ASSERT_TRUE(s->val == TEST_INT); } + static void FreeFuncStructConstPtr1(const StructParam* s) { ASSERT_TRUE(s->val == TEST_INT); } + static void FreeFuncStructRef1(StructParam& s) { ASSERT_TRUE(s.val == TEST_INT); } + static void FreeFuncStructConstRef1(const StructParam& s) { ASSERT_TRUE(s.val == TEST_INT); } + + static void FreeFuncInt2(int i, int i2) { ASSERT_TRUE(i == TEST_INT); ASSERT_TRUE(i2 == TEST_INT); } + static int FreeFuncIntWithReturn2(int i, int i2) { ASSERT_TRUE(i == TEST_INT); return i; } + static void FreeFuncPtrPtr2(StructParam** s, int i) { ASSERT_TRUE((*s)->val == TEST_INT); } + static void FreeFuncStruct2(StructParam s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + static void FreeFuncStructPtr2(StructParam* s, int i) { ASSERT_TRUE(s->val == TEST_INT); } + static void FreeFuncStructConstPtr2(const StructParam* s, int i) { ASSERT_TRUE(s->val == TEST_INT); } + static void FreeFuncStructRef2(StructParam& s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + static void FreeFuncStructConstRef2(const StructParam& s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + + class TestClass0 + { + public: + void MemberFunc0() { } + void MemberFunc0Const() const { } + int MemberFuncWithReturn0() { return TEST_INT; } + + static void StaticFunc0() { } + }; + + class TestClass1 + { + public: + void MemberFuncInt1(int i) { ASSERT_TRUE(i == TEST_INT); } + void MemberFuncInt1Const(int i) const { ASSERT_TRUE(i == TEST_INT); } + int MemberFuncIntWithReturn1(int i) { ASSERT_TRUE(i == TEST_INT); return i; } + void MemberFuncStruct1(StructParam s) { ASSERT_TRUE(s.val == TEST_INT); } + void MemberFuncStructPtr1(StructParam* s) { ASSERT_TRUE(s->val == TEST_INT); } + void MemberFuncStructPtrPtr1(StructParam** s) { ASSERT_TRUE((*s)->val == TEST_INT); } + void MemberFuncStructConstPtr1(const StructParam* s) { ASSERT_TRUE(s->val == TEST_INT); } + void MemberFuncStructRef1(StructParam& s) { ASSERT_TRUE(s.val == TEST_INT); } + void MemberFuncStructConstRef1(const StructParam& s) { ASSERT_TRUE(s.val == TEST_INT); } + + static void StaticFuncInt1(int i) { ASSERT_TRUE(i == TEST_INT); } + static void StaticFuncStruct1(StructParam s) { ASSERT_TRUE(s.val == TEST_INT); } + static void StaticFuncStructPtr1(StructParam* s) { ASSERT_TRUE(s->val == TEST_INT); } + static void StaticFuncStructConstPtr1(const StructParam* s) { ASSERT_TRUE(s->val == TEST_INT); } + static void StaticFuncStructRef1(StructParam& s) { ASSERT_TRUE(s.val == TEST_INT); } + static void StaticFuncStructConstRef1(const StructParam& s) { ASSERT_TRUE(s.val == TEST_INT); } + }; + + class TestClass2 + { + public: + void MemberFuncInt2(int i, int i2) { ASSERT_TRUE(i == TEST_INT); } + void MemberFuncInt2Const(int i, int i2) const { ASSERT_TRUE(i == TEST_INT); } + int MemberFuncIntWithReturn2(int i, int i2) { ASSERT_TRUE(i == TEST_INT); return i; } + void MemberFuncStruct2(StructParam s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + void MemberFuncStructPtr2(StructParam* s, int i) { ASSERT_TRUE(s->val == TEST_INT); } + void MemberFuncStructPtrPtr2(StructParam** s, int i) { ASSERT_TRUE((*s)->val == TEST_INT); } + void MemberFuncStructConstPtr2(const StructParam* s, int i) { ASSERT_TRUE(s->val == TEST_INT); } + void MemberFuncStructRef2(StructParam& s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + void MemberFuncStructConstRef2(const StructParam& s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + + static void StaticFuncInt2(int i, int i2) { ASSERT_TRUE(i == TEST_INT); } + static void StaticFuncStruct2(StructParam s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + static void StaticFuncStructPtr2(StructParam* s, int i) { ASSERT_TRUE(s->val == TEST_INT); } + static void StaticFuncStructConstPtr2(const StructParam* s, int i) { ASSERT_TRUE(s->val == TEST_INT); } + static void StaticFuncStructRef2(StructParam& s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + static void StaticFuncStructConstRef2(const StructParam& s, int i) { ASSERT_TRUE(s.val == TEST_INT); } + }; +} +