From ee64fef165331b267148407eff60f5f4fb89db5b Mon Sep 17 00:00:00 2001
From: Vojtech Moravec <vojtech.moravec.st@vsb.cz>
Date: Fri, 16 Oct 2020 18:34:33 +0200
Subject: [PATCH] Fix MirroredRepeat wrapping strategy.

Our old calculation would fail if we oveflow by more than one dimension. Eg. dimX = 2 and X = 4, we would wrap it to -1 instead of 1.
---
 src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java b/src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java
index 60d9698..a5bac1b 100644
--- a/src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java
+++ b/src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java
@@ -62,7 +62,7 @@ public abstract class BasicLoader {
         if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
             return dims.getX() - 1;
         } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
-            return (dims.getX() - ((x - dims.getX()) + 1));
+            return (dims.getX() - (1 + (x % dims.getX())));
         }
         return x;
     }
@@ -77,7 +77,7 @@ public abstract class BasicLoader {
         if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
             return dims.getY() - 1;
         } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
-            return (dims.getY() - ((y - dims.getY()) + 1));
+            return (dims.getY() - (1 + (y % dims.getY())));
         }
         return y;
     }
@@ -92,7 +92,7 @@ public abstract class BasicLoader {
         if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
             return dims.getZ() - 1;
         } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
-            return (dims.getZ() - ((z - dims.getZ()) + 1));
+            return (dims.getZ() - (1 + (z % dims.getZ())));
         }
         return z;
     }
-- 
GitLab