126 lines
3.2 KiB
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;
|
|
}
|