mirror of
https://github.com/wqking/eventpp.git
synced 2024-12-27 00:17:02 +08:00
Added universal reference to args
parameter in EventQueue::enqueue, see issue #56. Updated contributor list.
This commit is contained in:
parent
63497c60ef
commit
6f6ba44479
@ -155,7 +155,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename ...A>
|
template <typename ...A>
|
||||||
auto enqueue(A ...args) -> typename std::enable_if<sizeof...(A) == sizeof...(Args), void>::type
|
auto enqueue(A && ...args) -> typename std::enable_if<sizeof...(A) == sizeof...(Args), void>::type
|
||||||
{
|
{
|
||||||
static_assert(super::ArgumentPassingMode::canIncludeEventType, "Enqueuing arguments count doesn't match required (Event type should be included).");
|
static_assert(super::ArgumentPassingMode::canIncludeEventType, "Enqueuing arguments count doesn't match required (Event type should be included).");
|
||||||
|
|
||||||
@ -172,7 +172,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T, typename ...A>
|
template <typename T, typename ...A>
|
||||||
auto enqueue(T && first, A ...args) -> typename std::enable_if<sizeof...(A) == sizeof...(Args), void>::type
|
auto enqueue(T && first, A && ...args) -> typename std::enable_if<sizeof...(A) == sizeof...(Args), void>::type
|
||||||
{
|
{
|
||||||
static_assert(super::ArgumentPassingMode::canExcludeEventType, "Enqueuing arguments count doesn't match required (Event type should NOT be included).");
|
static_assert(super::ArgumentPassingMode::canExcludeEventType, "Enqueuing arguments count doesn't match required (Event type should NOT be included).");
|
||||||
|
|
||||||
|
@ -308,10 +308,11 @@ Added CallbackList, EventDispatcher, EventQueue, CounterRemover, ConditionalRemo
|
|||||||
<td align="center"><a href="https://github.com/MH2033/"><img alt="MH2033" src="https://github.com/MH2033.png?s=100" width="100px;" /></a><span>MH2033</span></td>
|
<td align="center"><a href="https://github.com/MH2033/"><img alt="MH2033" src="https://github.com/MH2033.png?s=100" width="100px;" /></a><span>MH2033</span></td>
|
||||||
<td align="center"><a href="https://github.com/zhllxt/"><img alt="zhllxt" src="https://github.com/zhllxt.png?s=100" width="100px;" /></a><span>zhllxt</span></td>
|
<td align="center"><a href="https://github.com/zhllxt/"><img alt="zhllxt" src="https://github.com/zhllxt.png?s=100" width="100px;" /></a><span>zhllxt</span></td>
|
||||||
<td align="center"><a href="https://github.com/marsCatXdu/"><img alt="marsCatXdu" src="https://github.com/marsCatXdu.png?s=100" width="100px;" /></a><span>marsCatXdu</span></td>
|
<td align="center"><a href="https://github.com/marsCatXdu/"><img alt="marsCatXdu" src="https://github.com/marsCatXdu.png?s=100" width="100px;" /></a><span>marsCatXdu</span></td>
|
||||||
|
<td align="center"><a href="https://github.com/Chaojimengnan/"><img alt="Chaojimengnan" src="https://github.com/Chaojimengnan.png?s=100" width="100px;" /></a><span>Chaojimengnan</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
I (wqking) would like to sincerely thank all participants for the contributions. Your contributions makes `eventpp` better and bright future.
|
I (wqking) would like to sincerely thank all participants for the contributions. Your contributions make `eventpp` better and bright future.
|
||||||
I maintain the contributors list manually, according to the criteria below,
|
I maintain the contributors list manually, according to the criteria below,
|
||||||
|
|
||||||
1. Your Pull Request is approved and merged to any branch.
|
1. Your Pull Request is approved and merged to any branch.
|
||||||
|
@ -344,6 +344,48 @@ TEST_CASE("EventQueue, non-copyable but movable unique_ptr")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("EventQueue, copyable event object")
|
||||||
|
{
|
||||||
|
struct MyCopyable {
|
||||||
|
MyCopyable(int * counter, const int value) : counter(counter), value(value) {
|
||||||
|
}
|
||||||
|
|
||||||
|
MyCopyable(const MyCopyable & other) : counter(other.counter), value(other.value) {
|
||||||
|
++*counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
MyCopyable(MyCopyable && other) : counter(other.counter), value(other.value) {
|
||||||
|
}
|
||||||
|
|
||||||
|
MyCopyable & operator = (const MyCopyable & other) {
|
||||||
|
counter = other.counter;
|
||||||
|
value = other.value;
|
||||||
|
++*counter;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
int * counter;
|
||||||
|
int value;
|
||||||
|
};
|
||||||
|
|
||||||
|
using EQ = eventpp::EventQueue<int, void (const MyCopyable &)>;
|
||||||
|
EQ queue;
|
||||||
|
|
||||||
|
// This is to ensure changing EventQueue::enqueue(A ...args) to EventQueue::enqueue(A && ...args) works properly
|
||||||
|
SECTION("For enqueue by r-value, there should be no copy/assignment") {
|
||||||
|
int copiedCount = 0;
|
||||||
|
queue.appendListener(3, [&copiedCount](const MyCopyable & object) {
|
||||||
|
REQUIRE(*object.counter == 0);
|
||||||
|
REQUIRE(copiedCount == 0);
|
||||||
|
REQUIRE(object.value == 5);
|
||||||
|
});
|
||||||
|
|
||||||
|
queue.enqueue(3, MyCopyable(&copiedCount, 5));
|
||||||
|
queue.process();
|
||||||
|
REQUIRE(copiedCount == 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("EventQueue, peekEvent/takeEvent/dispatch")
|
TEST_CASE("EventQueue, peekEvent/takeEvent/dispatch")
|
||||||
{
|
{
|
||||||
using SP = std::shared_ptr<int>;
|
using SP = std::shared_ptr<int>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user