001/* 002 * Copyright (C) Photon Vision. 003 * 004 * This program is free software: you can redistribute it and/or modify 005 * it under the terms of the GNU General Public License as published by 006 * the Free Software Foundation, either version 3 of the License, or 007 * (at your option) any later version. 008 * 009 * This program is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU General Public License for more details. 013 * 014 * You should have received a copy of the GNU General Public License 015 * along with this program. If not, see <https://www.gnu.org/licenses/>. 016 */ 017 018package org.photonvision.common.util.numbers; 019 020import com.fasterxml.jackson.annotation.JsonIgnore; 021 022public abstract class NumberCouple<T extends Number> { 023 protected T first; 024 protected T second; 025 026 public NumberCouple(T first, T second) { 027 this.first = first; 028 this.second = second; 029 } 030 031 public void setFirst(T first) { 032 this.first = first; 033 } 034 035 public T getFirst() { 036 return first; 037 } 038 039 public void setSecond(T second) { 040 this.second = second; 041 } 042 043 public T getSecond() { 044 return second; 045 } 046 047 public void set(T first, T second) { 048 this.first = first; 049 this.second = second; 050 } 051 052 @Override 053 public boolean equals(Object obj) { 054 return obj instanceof NumberCouple<?> couple 055 && couple.first.equals(first) 056 && couple.second.equals(second); 057 } 058 059 @JsonIgnore 060 public boolean isEmpty() { 061 return first.intValue() == 0 && second.intValue() == 0; 062 } 063}