Added support for lambdas in place for EventPolling

This commit is contained in:
Vraiment 2017-07-22 15:16:41 -07:00
parent b7e977638b
commit 9db15981bf
2 changed files with 14 additions and 14 deletions

View File

@ -70,7 +70,7 @@ namespace SDL2pp {
/// ///
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
template <typename T> template <typename T>
bool PollEvent(T& eventHandler) { bool PollEvent(T&& eventHandler) {
SDL_Event event; SDL_Event event;
if (!SDL_PollEvent(&event)) { if (!SDL_PollEvent(&event)) {
return false; return false;
@ -120,7 +120,7 @@ namespace SDL2pp {
/// ///
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
template <typename T> template <typename T>
int PollAllEvents(T& eventHandler) { int PollAllEvents(T&& eventHandler) {
int result; int result;
for (result = 0; PollEvent(eventHandler); result++); for (result = 0; PollEvent(eventHandler); result++);
return result; return result;

View File

@ -77,13 +77,11 @@ BEGIN_TEST(int, char*[])
// With lambda as an event handler // With lambda as an event handler
{ {
vector<SDL_Event> events; vector<SDL_Event> events;
auto eventHandler = [&events](const SDL_Event& event) {
events.push_back(event);
};
const SDL_Event expectedEvent = PushUserEvent(22); const SDL_Event expectedEvent = PushUserEvent(22);
EXPECT_TRUE(PollEvent(eventHandler) == true); EXPECT_TRUE(PollEvent([&events](const SDL_Event& event) {
events.push_back(event);
}) == true);
EXPECT_TRUE(events.size() == 1); EXPECT_TRUE(events.size() == 1);
const SDL_Event result = events[0]; const SDL_Event result = events[0];
@ -91,7 +89,9 @@ BEGIN_TEST(int, char*[])
EXPECT_TRUE(result.user.code == expectedEvent.user.code); EXPECT_TRUE(result.user.code == expectedEvent.user.code);
// Verify no further events // Verify no further events
EXPECT_TRUE(PollEvent(eventHandler) == false); EXPECT_TRUE(PollEvent([&events](const SDL_Event& event) {
events.push_back(event);
}) == false);
EXPECT_TRUE(events.size() == 1); EXPECT_TRUE(events.size() == 1);
} }
@ -159,17 +159,15 @@ BEGIN_TEST(int, char*[])
// With lambda as an event handler // With lambda as an event handler
{ {
vector<SDL_Event> handledEvents; vector<SDL_Event> handledEvents;
auto eventHandler = [&handledEvents](const SDL_Event& event) {
handledEvents.push_back(event);
};
vector<SDL_Event> expectedEvents; vector<SDL_Event> expectedEvents;
for (const auto eventCode : { 37, 88, 42, 63, 23, 19 }) { for (const auto eventCode : { 37, 88, 42, 63, 23, 19 }) {
expectedEvents.push_back(PushUserEvent(eventCode)); expectedEvents.push_back(PushUserEvent(eventCode));
} }
int totalExpectedEvents = static_cast<int>(expectedEvents.size()); int totalExpectedEvents = static_cast<int>(expectedEvents.size());
EXPECT_TRUE(PollAllEvents(eventHandler) == totalExpectedEvents); EXPECT_TRUE(PollAllEvents([&handledEvents](const SDL_Event& event) {
handledEvents.push_back(event);
}) == totalExpectedEvents);
EXPECT_TRUE(handledEvents.size() == expectedEvents.size()); EXPECT_TRUE(handledEvents.size() == expectedEvents.size());
for (int n = 0; n < totalExpectedEvents; n++) { for (int n = 0; n < totalExpectedEvents; n++) {
@ -181,7 +179,9 @@ BEGIN_TEST(int, char*[])
} }
// Verify no further events // Verify no further events
EXPECT_TRUE(PollEvent(eventHandler) == false); EXPECT_TRUE(PollEvent([&handledEvents](const SDL_Event& event) {
handledEvents.push_back(event);
}) == false);
EXPECT_TRUE(handledEvents.size() == expectedEvents.size()); EXPECT_TRUE(handledEvents.size() == expectedEvents.size());
} }