Brickworks > API documentation > bw_common

bw_common

Description

A common header to make sure that a bunch of basic definitions are available and consistent for all Brickworks modules.

Info

Module type: foundation

Version: 1.1.0

API

Basic definitions

Brickworks requires definitions of:

You can control whether those definitions are taken from said headers or you can supply them yourselves. In particular:

A BW_NULL macro is defined whose value is either NULL (C) or nullptr (C++).

BW_CXX_NO_ARRAY

C++ APIs of Brickworks modules typically include overloaded methods that use std::array arguments, and thus require the <array> header file.

If this is not wanted, defining BW_CXX_NO_ARRAY suppresses such methods and the inclusion of said header file.

BW_RESTRICT

BW_RESTRICT is a preprocessor definition that wraps the restrict keyword.

If it is not defined already, then it gets defined as restrict if C99 is supported, otherwise it has no effect (typically when compiling C++ code).

BW_ASSERT and BW_ASSERT_DEEP

Both macros are assert()-like. BW_ASSERT is meant to perform rapid/basic validity checks (e.g., input pointer is not NULL, input float number is finite), while BW_ASSERT_DEEP should be used for deeper checks (e.g., validate data structures and internal states).

If BW_NO_DEBUG is defined then "calls" to both BW_ASSERT and BW_ASSERT_DEEP will be stripped away by the preprocessor.

Whether BW_NO_DEBUG is defined or not, "calls" to BW_ASSERT_DEEP will still be stripped anyway if BW_DEBUG_DEEP is not defined.

Otherwise, BW_ASSERT and BW_ASSERT_DEEP can either be provided by you, otherwise BW_ASSERT is defined as assert (assert.h is #included and BW_NO_STDLIB must not be defined — please mind that assert.h is still influenced by NDEBUG), and BW_ASSERT_DEEP is defined as BW_ASSERT.

bw_is_inf()

static inline char bw_is_inf(
	float x);

Returns non-0 if x is positive or negative infinity, 0 otherwise.

bw_is_nan()

static inline char bw_is_nan(
	float x);

Returns non-0 if x is NaN, 0 otherwise.

bw_is_finite()

static inline char bw_is_finite(
	float x);

Returns non-0 if x is finite (neither NaN nor positive or negative infinity), 0 otherwise.

bw_has_inf()

static inline char bw_has_inf(
	const float * BW_RESTRICT x,
	size_t                    n_elems);

Scans the fist n_elems in buffer x and returns non-0 if it contains at least one positive or negative inifinity value, 0 otherwise.

bw_has_nan()

static inline char bw_has_nan(
	const float * BW_RESTRICT x,
	size_t                    n_elems);

Scans the fist n_elems in buffer x and returns non-0 if it contains at least one NaN value, 0 otherwise.

bw_has_only_finite()

static inline char bw_has_only_finite(
	const float * BW_RESTRICT x,
	size_t                    n_elems);

Scans the fist n_elems in buffer x and returns non-0 if it only finds finite values (neither NaN nor positive or negative infinity), 0 otherwise.

bw_hash_sdbm()

static inline uint32_t bw_hash_sdbm(
	const char * BW_RESTRICT string);

Returns the sdbm hash of the given string.

ChangeLog