|
|
|
|
@ -8,6 +8,7 @@
|
|
|
|
|
#include <array> |
|
|
|
|
#include <cstdint> |
|
|
|
|
#include <optional> |
|
|
|
|
#include <type_traits> |
|
|
|
|
#include <vector> |
|
|
|
|
|
|
|
|
|
#include <function_ref.hpp> |
|
|
|
|
@ -16,7 +17,6 @@
|
|
|
|
|
#include "engine.h" |
|
|
|
|
#include "engine/point.hpp" |
|
|
|
|
#include "utils/attributes.h" |
|
|
|
|
#include "utils/stdcompat/invoke_result_t.hpp" |
|
|
|
|
|
|
|
|
|
namespace devilution { |
|
|
|
|
|
|
|
|
|
@ -110,9 +110,9 @@ bool DoCrawl(unsigned radius, tl::function_ref<bool(Displacement)> function);
|
|
|
|
|
bool DoCrawl(unsigned minRadius, unsigned maxRadius, tl::function_ref<bool(Displacement)> function); |
|
|
|
|
|
|
|
|
|
template <typename F> |
|
|
|
|
auto Crawl(unsigned radius, F function) -> invoke_result_t<decltype(function), Displacement> |
|
|
|
|
auto Crawl(unsigned radius, F function) -> std::invoke_result_t<decltype(function), Displacement> |
|
|
|
|
{ |
|
|
|
|
invoke_result_t<decltype(function), Displacement> result; |
|
|
|
|
std::invoke_result_t<decltype(function), Displacement> result; |
|
|
|
|
DoCrawl(radius, [&result, &function](Displacement displacement) -> bool { |
|
|
|
|
result = function(displacement); |
|
|
|
|
return !result; |
|
|
|
|
@ -121,9 +121,9 @@ auto Crawl(unsigned radius, F function) -> invoke_result_t<decltype(function), D
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <typename F> |
|
|
|
|
auto Crawl(unsigned minRadius, unsigned maxRadius, F function) -> invoke_result_t<decltype(function), Displacement> |
|
|
|
|
auto Crawl(unsigned minRadius, unsigned maxRadius, F function) -> std::invoke_result_t<decltype(function), Displacement> |
|
|
|
|
{ |
|
|
|
|
invoke_result_t<decltype(function), Displacement> result; |
|
|
|
|
std::invoke_result_t<decltype(function), Displacement> result; |
|
|
|
|
DoCrawl(minRadius, maxRadius, [&result, &function](Displacement displacement) -> bool { |
|
|
|
|
result = function(displacement); |
|
|
|
|
return !result; |
|
|
|
|
|