[C++] Integrate std::span support for flyweight API by mspdt22 · Pull Request #1027 · aeron-io/simple-binary-encoding (original) (raw)

The impetus was a bug that we ran into when writing a string-literal to a fixed-width char field:

flyweight.putFixedChar("hello");

This is unsafe:

Instead, we build on support for the std::string_view getters and setters, which do length checking. std::span generalizes this to fixed-width fields of all types. Notably, if the size of the std::span is knowable at compile time, we pay no runtime cost for the length checking, and we should get similar performance to the existing API which takes a raw pointer.

Further, we add a sbetool option to disable accepting arrays by raw pointer, which should prevent memcpy operation without bounds checking. This is off by default to avoid a breaking change.