/**
* @addtogroup table_3d
* @{
*/
/** \file
* @brief Typedefs for primitive 3D table elements
*
* These used are for consistency across functions that work on 3D table data.
* For example:
* table3d_value_t foo(table3d_axis_t input);
* instead of:
* uint8_t foo(int16_t input);
*/
#pragma once
#include
/** @brief Encodes the \b length of the axes */
using table3d_dim_t = uint8_t;
/** @brief The type of each table value */
using table3d_value_t = uint8_t;
/** @brief The type of each axis value */
using table3d_axis_t = int16_t;
/** @brief Core 3d table generation macro
*
* We have a fixed number of table types: they are defined by this macro.
* GENERATOR is expected to be another macros that takes at least 3 arguments:
* axis length, x-axis domain, y-axis domain
*/
#define TABLE3D_GENERATOR(GENERATOR, ...) \
GENERATOR(6, Rpm, Load, ##__VA_ARGS__) \
GENERATOR(4, Rpm, Load, ##__VA_ARGS__) \
GENERATOR(8, Rpm, Load, ##__VA_ARGS__) \
GENERATOR(8, Rpm, Tps, ##__VA_ARGS__) \
GENERATOR(16, Rpm, Load, ##__VA_ARGS__)
// Each 3d table is given a distinct type based on size & axis domains
// This encapsulates the generation of the type name
#define TABLE3D_TYPENAME_BASE(size, xDom, yDom) table3d ## size ## xDom ## yDom
#define CAT_HELPER(a, b) a ## b
#define CONCAT(A, B) CAT_HELPER(A, B)
/** @} */