Skip to content

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(())
}

Released under the MIT Licence.