mirror of
https://github.com/wqking/eventpp.git
synced 2024-12-25 23:30:49 +08:00
Fix compile error when using Heter classes with CounterRemover, #68
This commit is contained in:
parent
39daab7963
commit
60761df5e3
@ -15,6 +15,7 @@
|
|||||||
#define COUNTERREMOVER_H_211532679833
|
#define COUNTERREMOVER_H_211532679833
|
||||||
|
|
||||||
#include "../eventpolicies.h"
|
#include "../eventpolicies.h"
|
||||||
|
#include "../internal/typeutil_i.h"
|
||||||
|
|
||||||
namespace eventpp {
|
namespace eventpp {
|
||||||
|
|
||||||
@ -41,7 +42,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename ...Args>
|
template <typename ...Args>
|
||||||
void operator() (Args && ...args) const {
|
auto operator() (Args && ...args) const
|
||||||
|
-> typename std::enable_if<internal_::CanInvoke<Callback, Args ...>::value, void>::type {
|
||||||
if(--data->triggerCount <= 0) {
|
if(--data->triggerCount <= 0) {
|
||||||
data->dispatcher.removeListener(data->event, data->handle);
|
data->dispatcher.removeListener(data->event, data->handle);
|
||||||
}
|
}
|
||||||
@ -123,7 +125,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename ...Args>
|
template <typename ...Args>
|
||||||
void operator() (Args && ...args) const {
|
auto operator() (Args && ...args) const
|
||||||
|
-> typename std::enable_if<internal_::CanInvoke<Callback, Args ...>::value, void>::type {
|
||||||
if(--data->triggerCount <= 0) {
|
if(--data->triggerCount <= 0) {
|
||||||
data->callbackList.remove(data->handle);
|
data->callbackList.remove(data->handle);
|
||||||
}
|
}
|
||||||
|
@ -320,6 +320,7 @@ Added CallbackList, EventDispatcher, EventQueue, CounterRemover, ConditionalRemo
|
|||||||
<td align="center"><a href="https://github.com/henaiguo/"><img alt="henaiguo" src="https://github.com/henaiguo.png?s=100" width="100px;" /></a><span>henaiguo</span></td>
|
<td align="center"><a href="https://github.com/henaiguo/"><img alt="henaiguo" src="https://github.com/henaiguo.png?s=100" width="100px;" /></a><span>henaiguo</span></td>
|
||||||
<td align="center"><a href="https://github.com/sr-tream/"><img alt="sr-tream" src="https://github.com/sr-tream.png?s=100" width="100px;" /></a><span>sr-tream</span></td>
|
<td align="center"><a href="https://github.com/sr-tream/"><img alt="sr-tream" src="https://github.com/sr-tream.png?s=100" width="100px;" /></a><span>sr-tream</span></td>
|
||||||
<td align="center"><a href="https://github.com/Drise13/"><img alt="Drise13" src="https://github.com/Drise13.png?s=100" width="100px;" /></a><span>Drise13</span></td>
|
<td align="center"><a href="https://github.com/Drise13/"><img alt="Drise13" src="https://github.com/Drise13.png?s=100" width="100px;" /></a><span>Drise13</span></td>
|
||||||
|
<td align="center"><a href="https://github.com/iamzone/"><img alt="iamzone" src="https://github.com/iamzone.png?s=100" width="100px;" /></a><span>iamzone</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
@ -162,7 +162,7 @@ TEST_CASE("CounterRemover, CallbackList, has parameters")
|
|||||||
|
|
||||||
TEST_CASE("CounterRemover, HeterEventDispatcher")
|
TEST_CASE("CounterRemover, HeterEventDispatcher")
|
||||||
{
|
{
|
||||||
eventpp::HeterEventDispatcher<int, eventpp::HeterTuple<void ()> > dispatcher;
|
eventpp::HeterEventDispatcher<int, eventpp::HeterTuple<void (), void (int)> > dispatcher;
|
||||||
constexpr int event = 3;
|
constexpr int event = 3;
|
||||||
|
|
||||||
std::vector<int> dataList(4);
|
std::vector<int> dataList(4);
|
||||||
@ -174,7 +174,7 @@ TEST_CASE("CounterRemover, HeterEventDispatcher")
|
|||||||
eventpp::counterRemover(dispatcher).prependListener(event, [&dataList]() {
|
eventpp::counterRemover(dispatcher).prependListener(event, [&dataList]() {
|
||||||
++dataList[1];
|
++dataList[1];
|
||||||
});
|
});
|
||||||
auto handle = eventpp::counterRemover(dispatcher).appendListener(event, [&dataList]() {
|
auto handle = eventpp::counterRemover(dispatcher).appendListener(event, [&dataList](int) {
|
||||||
++dataList[2];
|
++dataList[2];
|
||||||
}, 2);
|
}, 2);
|
||||||
eventpp::counterRemover(dispatcher).insertListener(event, [&dataList]() {
|
eventpp::counterRemover(dispatcher).insertListener(event, [&dataList]() {
|
||||||
@ -183,22 +183,27 @@ TEST_CASE("CounterRemover, HeterEventDispatcher")
|
|||||||
|
|
||||||
REQUIRE(dataList == std::vector<int> { 0, 0, 0, 0 });
|
REQUIRE(dataList == std::vector<int> { 0, 0, 0, 0 });
|
||||||
|
|
||||||
dispatcher.dispatch(event);
|
dispatcher.dispatch(event); // for void()
|
||||||
|
REQUIRE(dataList == std::vector<int> { 1, 1, 0, 1 });
|
||||||
|
dispatcher.dispatch(event, 5); // for void(int)
|
||||||
REQUIRE(dataList == std::vector<int> { 1, 1, 1, 1 });
|
REQUIRE(dataList == std::vector<int> { 1, 1, 1, 1 });
|
||||||
|
|
||||||
dispatcher.dispatch(event);
|
dispatcher.dispatch(event);
|
||||||
|
dispatcher.dispatch(event, 5);
|
||||||
REQUIRE(dataList == std::vector<int> { 2, 1, 2, 2 });
|
REQUIRE(dataList == std::vector<int> { 2, 1, 2, 2 });
|
||||||
|
|
||||||
dispatcher.dispatch(event);
|
dispatcher.dispatch(event);
|
||||||
|
dispatcher.dispatch(event, 5);
|
||||||
REQUIRE(dataList == std::vector<int> { 3, 1, 2, 3 });
|
REQUIRE(dataList == std::vector<int> { 3, 1, 2, 3 });
|
||||||
|
|
||||||
dispatcher.dispatch(event);
|
dispatcher.dispatch(event);
|
||||||
|
dispatcher.dispatch(event, 5);
|
||||||
REQUIRE(dataList == std::vector<int> { 4, 1, 2, 3 });
|
REQUIRE(dataList == std::vector<int> { 4, 1, 2, 3 });
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("CounterRemover, HeterCallbackList")
|
TEST_CASE("CounterRemover, HeterCallbackList")
|
||||||
{
|
{
|
||||||
eventpp::HeterCallbackList<eventpp::HeterTuple<void ()> > callbackList;
|
eventpp::HeterCallbackList<eventpp::HeterTuple<void (), void (int)> > callbackList;
|
||||||
|
|
||||||
std::vector<int> dataList(4);
|
std::vector<int> dataList(4);
|
||||||
|
|
||||||
@ -209,7 +214,7 @@ TEST_CASE("CounterRemover, HeterCallbackList")
|
|||||||
eventpp::counterRemover(callbackList).prepend([&dataList]() {
|
eventpp::counterRemover(callbackList).prepend([&dataList]() {
|
||||||
++dataList[1];
|
++dataList[1];
|
||||||
});
|
});
|
||||||
auto handle = eventpp::counterRemover(callbackList).append([&dataList]() {
|
auto handle = eventpp::counterRemover(callbackList).append([&dataList](int) {
|
||||||
++dataList[2];
|
++dataList[2];
|
||||||
}, 2);
|
}, 2);
|
||||||
eventpp::counterRemover(callbackList).insert([&dataList]() {
|
eventpp::counterRemover(callbackList).insert([&dataList]() {
|
||||||
@ -219,15 +224,20 @@ TEST_CASE("CounterRemover, HeterCallbackList")
|
|||||||
REQUIRE(dataList == std::vector<int> { 0, 0, 0, 0 });
|
REQUIRE(dataList == std::vector<int> { 0, 0, 0, 0 });
|
||||||
|
|
||||||
callbackList();
|
callbackList();
|
||||||
|
REQUIRE(dataList == std::vector<int> { 1, 1, 0, 1 });
|
||||||
|
callbackList(5);
|
||||||
REQUIRE(dataList == std::vector<int> { 1, 1, 1, 1 });
|
REQUIRE(dataList == std::vector<int> { 1, 1, 1, 1 });
|
||||||
|
|
||||||
callbackList();
|
callbackList();
|
||||||
|
callbackList(5);
|
||||||
REQUIRE(dataList == std::vector<int> { 2, 1, 2, 2 });
|
REQUIRE(dataList == std::vector<int> { 2, 1, 2, 2 });
|
||||||
|
|
||||||
callbackList();
|
callbackList();
|
||||||
|
callbackList(5);
|
||||||
REQUIRE(dataList == std::vector<int> { 3, 1, 2, 3 });
|
REQUIRE(dataList == std::vector<int> { 3, 1, 2, 3 });
|
||||||
|
|
||||||
callbackList();
|
callbackList();
|
||||||
|
callbackList(5);
|
||||||
REQUIRE(dataList == std::vector<int> { 4, 1, 2, 3 });
|
REQUIRE(dataList == std::vector<int> { 4, 1, 2, 3 });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user