N_To_One/src/n_to_one.c

126 lines
3.2 KiB
C

#include "n_to_one.h"
unsigned long two_to_one(
unsigned long x,
unsigned long y,
unsigned long x_width) {
return x + y * x_width;
}
void one_to_two(
unsigned long idx,
unsigned long *x,
unsigned long *y,
unsigned long x_width) {
*x = idx % x_width;
*y = idx / x_width;
}
unsigned long three_to_one(
unsigned long x,
unsigned long y,
unsigned long z,
unsigned long x_width,
unsigned long y_width){
return x + y * x_width + z * x_width * y_width;
}
void one_to_three(
unsigned long idx,
unsigned long *x,
unsigned long *y,
unsigned long *z,
unsigned long x_width,
unsigned long y_width) {
*x = idx % x_width;
*y = (idx / x_width) % y_width;
*z = idx / x_width / y_width;
}
unsigned long four_to_one(
unsigned long x,
unsigned long y,
unsigned long z,
unsigned long i,
unsigned long x_width,
unsigned long y_width,
unsigned long z_width) {
return x + y * x_width + z * x_width * y_width + i * x_width * y_width * z_width;
}
void one_to_four(
unsigned long idx,
unsigned long *x,
unsigned long *y,
unsigned long *z,
unsigned long *i,
unsigned long x_width,
unsigned long y_width,
unsigned long z_width) {
*x = idx % x_width;
*y = (idx / x_width) % y_width;
*z = ((idx / x_width) / y_width) % z_width;
*i = ((idx / x_width) / y_width) / z_width;
}
unsigned long long two_to_one_l(
unsigned long long x,
unsigned long long y,
unsigned long long x_width) {
return x + y * x_width;
}
void one_to_two_l(
unsigned long long idx,
unsigned long long *x,
unsigned long long *y,
unsigned long long x_width) {
*x = idx % x_width;
*y = idx / x_width;
}
unsigned long long three_to_one_l(
unsigned long long x,
unsigned long long y,
unsigned long long z,
unsigned long long x_width,
unsigned long long y_width){
return x + y * x_width + z * x_width * y_width;
}
void one_to_three_l(
unsigned long long idx,
unsigned long long *x,
unsigned long long *y,
unsigned long long *z,
unsigned long long x_width,
unsigned long long y_width) {
*x = idx % x_width;
*y = (idx / x_width) % y_width;
*z = idx / x_width / y_width;
}
unsigned long long four_to_one_l(
unsigned long long x,
unsigned long long y,
unsigned long long z,
unsigned long long i,
unsigned long long x_width,
unsigned long long y_width,
unsigned long long z_width) {
return x + y * x_width + z * x_width * y_width + i * x_width * y_width * z_width;
}
void one_to_four_l(
unsigned long long idx,
unsigned long long *x,
unsigned long long *y,
unsigned long long *z,
unsigned long long *i,
unsigned long long x_width,
unsigned long long y_width,
unsigned long long z_width) {
*x = idx % x_width;
*y = (idx / x_width) % y_width;
*z = ((idx / x_width) / y_width) % z_width;
*i = ((idx / x_width) / y_width) / z_width;
}