#pragma once #include "table3d_typedefs.h" // A table location. struct coord2d { table3d_axis_t x; table3d_axis_t y; }; struct table3DGetValueCache { // Store the upper *index* of the X and Y axis bins that were last hit. // This is used to make the next check faster since very likely the x & y values have // only changed by a small amount & are in the same bin (or an adjacent bin). // // It's implicit that the other bin index is max bin index - 1 (a single axis // value can't span 2 axis bins). This saves 1 byte. // // E.g. 6 element x-axis contents: // [ 8| 9|12|15|18|21] // indices: // 0, 1, 2, 3, 4, 5 // If lastXBinMax==3, the min index must be 2. I.e. the last X value looked // up was between 12last_lookup.x = INT16_MAX; } /* 3D Tables have an origin (0,0) in the top left hand corner. Vertical axis is expressed first. Eg: 2x2 table ----- |2 7| |1 4| ----- (0,1) = 7 (0,0) = 2 (1,0) = 1 */ table3d_value_t get3DTableValue(struct table3DGetValueCache *pValueCache, table3d_dim_t axisSize, const table3d_value_t *pValues, const table3d_axis_t *pXAxis, const table3d_axis_t *pYAxis, table3d_axis_t y, table3d_axis_t x);