diff --git a/src/seam-carving.cpp b/src/seam-carving.cpp index 92caa67..80f3fd9 100644 --- a/src/seam-carving.cpp +++ b/src/seam-carving.cpp @@ -15,9 +15,7 @@ bool silent; bool test_energy; -int min(int a, int b) { - return a < b ? a : b; -} +#define min(a, b) { (a < b ? a : b) } bool nearly_equal(float a, float b) { return std::nextafter(a, std::numeric_limits::lowest()) <= b @@ -110,9 +108,9 @@ std::vector optimal_vertical_seam(std::vector energy, int width, int //Idea : float next_energy = min_val - energy[width*i + min_idx]; //! With floats, we don't always have x + y - y == x, so we check is x+y == x+y - auto is_next_idx = [=](int idx) { - return nearly_equal(dyn_energy[(i-1)*width + idx]+energy[width*i + min_idx], min_val); - }; + // This define is a bit ugly but 200x faster than using a lambda function + #define is_next_idx(idx) \ + (dyn_energy[(i-1)*width + idx]+energy[width*i + min_idx] == min_val) if (is_next_idx(min_idx)) { // min_idx does not change