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}