Skip to main content

Common Definitions

libxr_def.hpp provides the basic macros, constants, error codes and generic template functions that the other LibXR headers build on.

Math and Physical Constants​

  • PI, TWO_PI: π and 2π, commonly used in angle calculations.
  • STANDARD_GRAVITY: Standard gravitational acceleration constant, with a value of 9.80665 m/s².

Common Macros​

  • DEF2STR(x): Converts a macro value to string.
  • UNUSED(x): Suppresses compiler warnings for unused variables.
  • LIBXR_NOINLINE: Portability macro for disabling inlining.
  • LIBXR_PACKED_BEGIN / LIBXR_PACKED_END / LIBXR_PACKED: packed-layout related macros.

Alignment and Cache-Line Definitions​

  • HW_CACHE_LINE_SIZE: hardware cache-line size, 64 when pointers are 8 bytes, otherwise 32.
  • CONCURRENCY_ALIGNMENT: alignment used by concurrent structures; sizeof(size_t) when LIBXR_SINGLE_CORE is true, otherwise HW_CACHE_LINE_SIZE. CMake defaults LIBXR_SINGLE_CORE to OFF on linux, webots and windows and to ON elsewhere.
  • CACHE_LINE_SIZE: backward-compatible cache-line alias.
  • ALIGN_SIZE: native platform alignment size, currently sizeof(void*).

Error Codes (ErrorCode)​

The ErrorCode enum defines a unified error code system used to represent various operation results:

NameValueMeaning
PENDING1Operation in progress
OK0Operation succeeded
FAILED-1Operation failed
INIT_ERR-2Initialization error
ARG_ERR-3Invalid argument
STATE_ERR-4Invalid state
SIZE_ERR-5Size mismatch
CHECK_ERR-6Validation failed
NOT_SUPPORT-7Feature not supported
NOT_FOUND-8Object not found
NO_RESPONSE-9No response
NO_MEM-10Insufficient memory
NO_BUFF-11Insufficient buffer
TIMEOUT-12Operation timeout
EMPTY-13No data available
FULL-14Data full
BUSY-15Resource busy
PTR_NULL-16Null pointer error
OUT_OF_RANGE-17Out of valid range

Convention: positive values usually indicate a non-terminal / in-progress state (for example PENDING), 0 means success, and negative values indicate a failure reason.

Size Limit Modes (SizeLimitMode)​

Used for runtime checks to validate data size:

  • EQUAL: Must exactly match the reference value
  • LESS: Must be less than or equal to the reference
  • MORE: Must be greater than or equal to the reference
  • NONE: No size restriction

The size check function:

constexpr bool SizeLimitCheck(SizeLimitMode mode, size_t limit, size_t size) noexcept;

This is a pure predicate only. It answers whether the requested size relation holds, but does not decide whether the caller should assert, abort, or return an error code.

Assertion Macros​

libxr_def.hpp also defines the three groups of check macros ASSERT, REQUIRE and DEV_ASSERT; when each is active, how it behaves when disabled, and how failures are handled are described in Assertions and Error Handling.

Generic Template Utilities​

It also provides:

  • OffsetOf(member) for member-offset computation via a member pointer;
  • ContainerOf(ptr, member) for recovering the owning object pointer from a member pointer;
  • concepts such as MemberObjectPointer and CommonOrdered.

These are used mainly by low-level containers and driver code to recover the owning object from a member pointer.

Generic Template Functions​

template <typename LeftType, typename RightType>
requires CommonOrdered<LeftType, RightType>
constexpr auto LibXR::max(LeftType a, RightType b) -> std::common_type_t<LeftType, RightType>;

template <typename LeftType, typename RightType>
requires CommonOrdered<LeftType, RightType>
constexpr auto LibXR::min(LeftType a, RightType b) -> std::common_type_t<LeftType, RightType>;

Both arguments need a common type and must be comparable; the result has the common type, e.g. LibXR::max(3, 4.5) returns 4.5 (double).