#include "num.h"

Num::Num(int new_value, int new_modulo) {
    if (new_modulo != 0) {
        Num::value = (new_value % new_modulo);
        Num::modulo = new_modulo;
    } else {
        Num::value = new_value;
        Num::modulo = 0;
    }
}

Num& Num::operator=(const Num& other) {
    Num::value = other.value;
    Num::modulo = other.modulo;
    return *this;
}

Num Num::operator+(const Num& other) {
    int new_value = Num::value + other.value;
    return { new_value, Num::modulo };
}

Num Num::operator-(const Num& other) {
    int new_value = Num::value - other.value;
    return { new_value, Num::modulo };
}

Num Num::operator*(const Num& other) {
    int new_value = Num::value * other.value;
    return { new_value, Num::modulo };
}

Num Num::operator+(int num) {
    int new_value = Num::value + num;
    return { new_value, Num::modulo };
}

Num Num::operator-(int dif_num) {
    int new_value = Num::value - dif_num;
    return { new_value, Num::modulo };
}

Num Num::operator*(int dif_num) {
    int new_value = Num::value * dif_num;
    return { new_value, Num::modulo };
}

Num& Num::operator+=(const Num& other) {
    Num::value += other.value;
    return *this;
}

Num& Num::operator-=(const Num& other) {
    Num::value -= other.value;
    return *this;
}

Num& Num::operator*=(const Num& other) {
    Num::value *= other.value;
    return *this;
}

Num& Num::operator+=(int num) {
    Num::value += num;
    return *this;
}

Num& Num::operator-=(int num) {
    Num::value -= num;
    return *this;
}

Num& Num::operator*=(int num) {
    Num::value *= num;
    return *this;
}