Skip to content

Commit

Permalink
Fix clang 15 reverse_view borking.
Browse files Browse the repository at this point in the history
  • Loading branch information
karnkaul committed Sep 7, 2023
1 parent f427230 commit 98c228e
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 4 deletions.
1 change: 1 addition & 0 deletions engine/header_list.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ set(core_headers
${prefix}/core/ptr.hpp
${prefix}/core/radians.hpp
${prefix}/core/random.hpp
${prefix}/core/reverse_view.hpp
${prefix}/core/signal.hpp
${prefix}/core/time.hpp
${prefix}/core/version.hpp
Expand Down
23 changes: 23 additions & 0 deletions engine/include/le/core/reverse_view.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#pragma once
#include <iterator>

namespace le {
template <typename It>
struct Reversed {
It first{};
It last{};

constexpr auto begin() const { return std::reverse_iterator<It>{first}; }
constexpr auto end() const { return std::reverse_iterator<It>{last}; }
};

template <typename It>
constexpr auto reverse_view(It first, It last) {
return Reversed<It>{first, last};
}

template <typename ContainerT>
constexpr auto reverse_view(ContainerT&& container) {
return reverse_view(std::end(container), std::begin(container));
}
} // namespace le
8 changes: 4 additions & 4 deletions engine/src/engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@

#include <impl/frame_profiler.hpp>
#include <le/core/enumerate.hpp>
#include <le/core/reverse_view.hpp>
#include <le/core/zip_ranges.hpp>
#include <le/engine.hpp>
#include <le/error.hpp>
#include <le/input/receiver.hpp>
#include <format>
#include <ranges>
#include <thread>

namespace le {
Expand Down Expand Up @@ -230,19 +230,19 @@ auto Engine::setup_signals(GLFWwindow* window) -> void {
auto& engine = get_engine(window);
auto& input_state = engine.m_input_state;
if (key >= 0 && key < static_cast<int>(input_state.keyboard.size())) { input_state.keyboard.at(static_cast<std::size_t>(key)) = to_action(action); }
for (auto* receiver : std::ranges::reverse_view(g_receivers)) {
for (auto* receiver : reverse_view(g_receivers)) {
if (receiver->on_key(key, action, mods)) { break; }
}
});
glfwSetCharCallback(window, [](GLFWwindow* /*window*/, std::uint32_t codepoint) {
for (auto* receiver : std::ranges::reverse_view(g_receivers)) {
for (auto* receiver : reverse_view(g_receivers)) {
if (receiver->on_char(graphics::Codepoint{codepoint})) { break; }
}
});
glfwSetMouseButtonCallback(window, [](GLFWwindow* window, int button, int action, [[maybe_unused]] int mods) {
auto& input_state = get_engine(window).m_input_state;
input_state.mouse_buttons.at(static_cast<std::size_t>(button)) = to_action(action);
for (auto* receiver : std::ranges::reverse_view(g_receivers)) {
for (auto* receiver : reverse_view(g_receivers)) {
if (receiver->on_mouse(button, action, mods)) { break; }
}
});
Expand Down

0 comments on commit 98c228e

Please sign in to comment.