Examples
These examples are included from source files that are compiled by the repository's test and packaging gates.
Native C
c
#include "Table.h"
#include <stdint.h>
#include <stdio.h>
int main(void) {
const int32_t rpm[] = {0, 1000, 2000, 3000};
const float advance[] = {5.0F, 10.0F, 18.0F, 24.0F};
table_view_t curve = {0};
float result = 0.0F;
if (table_curve_view_init(&curve, rpm, 4u, TABLE_SCALAR_I32, advance, TABLE_SCALAR_F32) != TABLE_OK)
return 1;
if (table_curve_lookup(&curve, 1500.0F, &result) != TABLE_OK)
return 2;
printf("Advance at 1500 rpm: %.1f\n", (double)result);
return 0;
}Native C++
cpp
#include "Table.h"
#include <cstdint>
#include <iostream>
int main() {
table::Map<float, 3u, 2u, std::uint16_t, std::uint16_t> fuelMap;
const std::uint16_t rpm[] = {1000u, 2000u, 3000u};
const std::uint16_t load[] = {20u, 100u};
const float fuel[2][3] = {{2.0F, 2.5F, 3.0F}, {4.0F, 5.0F, 6.0F}};
if (fuelMap.init(rpm, load, fuel) != table::Status::Ok)
return 1;
float result = 0.0F;
if (fuelMap.lookup(2500.0F, 60.0F, result) != table::Status::Ok)
return 2;
std::cout << "Fuel value: " << result << '\n';
return 0;
}Arduino curve
cpp
#include <Table.h>
#include <stdint.h>
table::Curve<uint8_t, 4, int16_t> throttleCurve;
void setup() {
Serial.begin(115200);
const int16_t sensorMillivolts[] = {500, 1500, 2500, 4500};
const uint8_t throttlePercent[] = {0, 25, 55, 100};
if (throttleCurve.init(sensorMillivolts, throttlePercent) != table::Status::Ok) {
Serial.println("Curve validation failed");
return;
}
float result = 0.0F;
if (throttleCurve.lookup(2000.0F, result) == table::Status::Ok) {
Serial.print("Throttle: ");
Serial.println(result);
}
}
void loop() {}Arduino map
cpp
#include <Table.h>
#include <stdint.h>
table::Map<float, 3, 2, uint16_t, uint8_t> fuelMap;
void setup() {
Serial.begin(115200);
const uint16_t rpm[] = {1000, 2000, 3000};
const uint8_t loadPercent[] = {20, 100};
const float fuel[2][3] = {
{2.0F, 2.5F, 3.0F},
{4.0F, 5.0F, 6.0F},
};
if (fuelMap.init(rpm, loadPercent, fuel) != table::Status::Ok) {
Serial.println("Map validation failed");
return;
}
float result = 0.0F;
if (fuelMap.lookup(2500.0F, 60.0F, result) == table::Status::Ok) {
Serial.print("Fuel value: ");
Serial.println(result);
}
}
void loop() {}Rust curve
rust
// SPDX-License-Identifier: MIT
use table::Curve;
fn main() -> Result<(), table::Error> {
let throttle = Curve::new(vec![500_u16, 1_500, 2_500, 4_500], vec![0_u8, 25, 55, 100])?;
let percent = throttle.lookup(2_000.0)?;
println!("Throttle: {percent:.1}%");
Ok(())
}Rust map
rust
// SPDX-License-Identifier: MIT
use table::Map;
fn main() -> Result<(), table::Error> {
let fuel = Map::new(
vec![1_000_u16, 2_000, 3_000],
vec![20_u8, 100],
vec![2.0_f32, 2.5, 3.0, 4.0, 5.0, 6.0],
)?;
let value = fuel.lookup(2_500.0, 60.0)?;
println!("Fuel value: {value:.3}");
Ok(())
}