/*
    SPDX-FileCopyrightText: 2023 Gabriel Barrantes <gabriel.barrantes.dev@outlook.com>
    SPDX-License-Identifier: GPL-2.0-or-later
*/

#define NO_LEVEL -1

#define LEVEL_0 0
#define LEVEL_1 1
#define LEVEL_2 2
#define LEVEL_3 3
#define LEVEL_4 4

#define ADD_PRIORITY_LEVEL LEVEL_0
#define SUB_PRIORITY_LEVEL LEVEL_0
#define MUL_PRIORITY_LEVEL LEVEL_1
#define DIV_PRIORITY_LEVEL LEVEL_1
#define INVERTSIGN_PRIORITY_LEVEL LEVEL_0

#define BINOMIAL_PRIORITY_LEVEL LEVEL_1
#define MODULO_PRIORITY_LEVEL LEVEL_1
#define INTEGER_DIVISION_PRIORITY_LEVEL LEVEL_1

#define OR_PRIORITY_LEVEL LEVEL_1
#define AND_PRIORITY_LEVEL LEVEL_1
#define XOR_PRIORITY_LEVEL LEVEL_1
#define RSH_STR_PRIORITY_LEVEL LEVEL_1
#define LSH_STR_PRIORITY_LEVEL LEVEL_1
#define ONE_S_COMPLEMENT_PRIORITY_LEVEL LEVEL_1
#define TWO_S_COMPLEMENT_PRIORITY_LEVEL LEVEL_1

#define POWER_PRIORITY_LEVEL LEVEL_4
#define POWER_ROOT_PRIORITY_LEVEL LEVEL_4

#define PERMILE_PRIORITY_LEVEL LEVEL_3
#define PERCENTAGE_PRIORITY_LEVEL LEVEL_3

#define CUBE_PRIORITY_LEVEL LEVEL_3
#define SQUARE_PRIORITY_LEVEL LEVEL_3
#define CUBIC_ROOT_PRIORITY_LEVEL LEVEL_3
#define SQUARE_ROOT_PRIORITY_LEVEL LEVEL_3
#define RECIPROCAL_ROOT_PRIORITY_LEVEL LEVEL_4

#define LN_PRIORITY_LEVEL LEVEL_4
#define EXP_PRIORITY_LEVEL LEVEL_4
#define EXP_10_PRIORITY_LEVEL LEVEL_4
#define LOG_10_PRIORITY_LEVEL LEVEL_4

#define SIN_PRIORITY_LEVEL LEVEL_4
#define COS_PRIORITY_LEVEL LEVEL_4
#define TAN_PRIORITY_LEVEL LEVEL_4
#define ASIN_PRIORITY_LEVEL LEVEL_4
#define ACOS_PRIORITY_LEVEL LEVEL_4
#define ATAN_PRIORITY_LEVEL LEVEL_4

#define SINH_PRIORITY_LEVEL LEVEL_4
#define COSH_PRIORITY_LEVEL LEVEL_4
#define TANH_PRIORITY_LEVEL LEVEL_4
#define ASINH_PRIORITY_LEVEL LEVEL_4
#define ACOSH_PRIORITY_LEVEL LEVEL_4
#define ATANH_PRIORITY_LEVEL LEVEL_4

#define GAMMA_PRIORITY_LEVEL LEVEL_4
#define FACTORIAL_PRIORITY_LEVEL LEVEL_3
