Skip to content
/ emio Public

A safe and fast high-level and low-level character input/output library for bare-metal and RTOS based embedded systems with a very small binary footprint.

License

Notifications You must be signed in to change notification settings

Viatorus/emio

Repository files navigation

logo

Continuous Integration codecov Conan Center

em{io} is a safe and fast high-level and low-level character input/output library for bare-metal and RTOS based embedded systems with a very small binary footprint.

// High-level
std::string str = emio::format("The answer is {}.", 42);  // Format argument.

int answer{};
emio::result<void> scan_res = emio::scan(str, "The answer is {}.", answer);  // Scan input string.
if (scan_res) {
    emio::print("The answer is {}.", answer);  // Output to console.
}

// Without using heap.
emio::static_buffer<128> buf{}; 
emio::format_to(buf, "The answer is {:#x}.", 42).value();
buf.view();  // <- The answer is 0x2a.

// Low-level
emio::writer wrt{buf};
wrt.write_str(" In decimal: ").value();
wrt.write_int(42).value();
wrt.write_char('.').value();
buf.view();  // <- The answer is 0x2a. In decimal: 42.

emio::reader rdr{"17c"};
EMIO_TRY(uint32_t number, rdr.parse_int<uint32_t>());  // <- 17
EMIO_TRY(char suffix, rdr.read_char());                // <- c

This library is in beta status! Please help to make it fly!

Yet another character input/output library

Bare-metal and RTOS based embedded systems do have special requirements which are mostly overlooked by the C++ standard, its implementations and other libraries.

Therefore, this library:

  • has a very small binary footprint (~38 times smaller than fmtlib!)
  • returns a result object instead of throwing an exception
  • provides a high-level and low-level API which can be used at compile-time

Read more about it in the DESIGN document.

Including emio in your project

  • With CMake and fetch content
FetchContent_Declare(
        emio
        GIT_TAG main
        GIT_REPOSITORY https://github.com/Viatorus/emio.git
        GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(emio)

A compiler supporting C++20 is required. Tested with GCC 11/12/13 and Clang 16/17.

Contributing

See the CONTRIBUTING document.

Licensing

em{io} is distributed under the MIT license.

About

A safe and fast high-level and low-level character input/output library for bare-metal and RTOS based embedded systems with a very small binary footprint.

Resources

License

Code of conduct

Stars

Watchers

Forks

Languages