/* * Copyright (C) Mellanox Technologies Ltd. 2019. ALL RIGHTS RESERVED. * * See file LICENSE for terms. */ #ifndef UCS_LINEAR_FUNC_H_ #define UCS_LINEAR_FUNC_H_ #include /** * A 1d linear function, represented as f(x) = c + x * m. */ typedef struct { double c; /* constant factor */ double m; /* multiplicative factor */ } ucs_linear_func_t; /** * Calculate the linear function value for a specific point. * * @param [in] func Linear function to apply. * @param [in] x Point to apply the function at. * * @return f(x) */ static UCS_F_ALWAYS_INLINE double ucs_linear_func_apply(const ucs_linear_func_t *func, double x) { return func->c + (func->m * x); } /** * Sum two linear functions. * * @param [out] result Filled with the resulting linear function. * @param [in] func1 First function to add. * @param [in] func2 Second function to add. */ static UCS_F_ALWAYS_INLINE void ucs_linear_func_add(ucs_linear_func_t *result, const ucs_linear_func_t *func1, const ucs_linear_func_t *func2) { result->m = func1->m + func2->m; result->c = func1->c + func2->c; } #endif