1 package io.github.robertograham.rleparser.domain; 2 3 import java.util.Objects; 4 5 public class Coordinate { 6 7 private final int x; 8 private final int y; 9 10 public Coordinate(int x, int y) { 11 this.x = x; 12 this.y = y; 13 } 14 15 public int getX() { 16 return x; 17 } 18 19 public int getY() { 20 return y; 21 } 22 23 public Coordinate withX(int x) { 24 return this.x == x ? this : new Coordinate(x, y); 25 } 26 27 public Coordinate withY(int y) { 28 return this.y == y ? this : new Coordinate(x, y); 29 } 30 31 public Coordinate plusToX(int amount) { 32 return amount == 0 ? this : withX(x + amount); 33 } 34 35 public Coordinate plusToY(int amount) { 36 return amount == 0 ? this : withY(y + amount); 37 } 38 39 @Override 40 public String toString() { 41 return "Coordinate{" + 42 "x=" + x + 43 ", y=" + y + 44 '}'; 45 } 46 47 @Override 48 public boolean equals(Object object) { 49 if (this == object) 50 return true; 51 52 if (!(object instanceof Coordinate)) 53 return false; 54 55 Coordinate coordinate = (Coordinate) object; 56 57 return x == coordinate.x && 58 y == coordinate.y; 59 } 60 61 @Override 62 public int hashCode() { 63 return Objects.hash(x, y); 64 } 65 }