/*---------------------------------------------------------------------------* Project: TwlBrom - MATH - include File: math/math.h Copyright 2008 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Date:: $ $Rev$ $Author$ *---------------------------------------------------------------------------*/ #ifndef BROM_MATH_MATH_H_ #define BROM_MATH_MATH_H_ #include #include #ifdef __cplusplus extern "C" { #endif //---------------------------------------------------------------------------- // Type definition //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // Declaration of function //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // Implementation of inline function //---------------------------------------------------------------------------- /*---------------------------------------------------------------------------* Name: MATH_ABS Description: 絶対値を返すマクロ。 各引数は複数回評価されるため、副作用に注意。 Arguments: a Returns: a < 0 なら -a, さもなくば a *---------------------------------------------------------------------------*/ #define MATH_ABS(a) ( ( (a) < 0 ) ? (-(a)) : (a) ) /*---------------------------------------------------------------------------* Name: MATH_IAbs Description: 絶対値を返すインライン関数。 インライン関数として実装されているので、副作用はない。 Arguments: a Returns: a < 0 なら -a, さもなくば a *---------------------------------------------------------------------------*/ SDK_INLINE int MATH_IAbs(int a) { return (a < 0) ? -a : a; } /*---------------------------------------------------------------------------* Name: MATH_CLAMP Description: lowからhighの範囲の値を取得するマクロ。 各引数は複数回評価されるため、副作用に注意。 Arguments: x low 最大値 hight 最小値 Returns: x < low ならば low, x > high ならば high さもなくば x *---------------------------------------------------------------------------*/ #define MATH_CLAMP(x, low, high) ( ( (x) > (high) ) ? (high) : ( ( (x) < (low) ) ? (low) : (x) ) ) /*---------------------------------------------------------------------------* Name: MATH_MIN Description: 2つの引数のどちらか小さいほうを返す。 マクロとして実装されているので、不等号演算子が定義されている 型で使用可能。各引数は複数回評価されるため、副作用に注意。 Arguments: a, b Returns: a < b なら a, さもなくば b *---------------------------------------------------------------------------*/ #define MATH_MIN(a,b) (((a) <= (b)) ? (a) : (b)) /*---------------------------------------------------------------------------* Name: MATH_IMin Description: 2つの int 型整数引数のどちらか小さいほうを返す。 インライン関数として実装されているので、副作用はない。 Arguments: a, b - int 型整数 Returns: a <= b なら a, さもなくば b *---------------------------------------------------------------------------*/ SDK_INLINE int MATH_IMin(int a, int b) { return (a <= b) ? a : b; } /*---------------------------------------------------------------------------* Name: MATH_MAX Description: 2つの引数のどちらか大きいほうを返す。 マクロとして実装されているので、不等号演算子が定義されている 型で使用可能。各引数は複数回評価されるため、副作用に注意。 Arguments: a, b Returns: a >= b なら a, さもなくば b *---------------------------------------------------------------------------*/ #define MATH_MAX(a,b) (((a) >= (b)) ? (a) : (b)) /*---------------------------------------------------------------------------* Name: MATH_IMax Description: 2つの int 型整数引数のどちらか大きいほうを返す。 インライン関数として実装されているので、副作用はない。 Arguments: a, b - int 型整数 Returns: a >= b なら a, さもなくば b *---------------------------------------------------------------------------*/ SDK_INLINE int MATH_IMax(int a, int b) { return (a >= b) ? a : b; } /*---------------------------------------------------------------------------* Name: MATH_DIVUP Description: base で割り端数を切り上げるマクロ。 Arguments: x: 数値 base: 2 のべき乗の基数 Returns: x を base で割り端数を切り上げた数 *---------------------------------------------------------------------------*/ #define MATH_DIVUP(x, base) (((x) + ((base)-1)) / (base)) /*---------------------------------------------------------------------------* Name: MATH_ROUNDUP Description: 切り上げた数値を返すマクロ。 Arguments: x base - 2 のべき乗の基数 Returns: x 以上の最小の base の倍数 *---------------------------------------------------------------------------*/ #define MATH_ROUNDUP(x, base) (((x) + ((base)-1)) & ~((base)-1)) /*---------------------------------------------------------------------------* Name: MATH_ROUNDDOWN Description: 切り下げた数値を返すマクロ。 Arguments: x base - 2 のべき乗の基数 Returns: x 以下の最大の base の倍数 *---------------------------------------------------------------------------*/ #define MATH_ROUNDDOWN(x, base) ((x) & ~((base)-1)) /*---------------------------------------------------------------------------* Name: MATH_ROUNDUP32 Description: 32の倍数に切り上げた数値を返すマクロ。 Arguments: x Returns: x 以上の最小の32の倍数 *---------------------------------------------------------------------------*/ #define MATH_ROUNDUP32(x) MATH_ROUNDUP(x, 32) /*---------------------------------------------------------------------------* Name: MATH_ROUNDDOWN32 Description: 32の倍数に切り下げた数値を返すマクロ。 Arguments: x Returns: x 以下の最大の32の倍数 *---------------------------------------------------------------------------*/ #define MATH_ROUNDDOWN32(x) MATH_ROUNDDOWN(x, 32) #ifdef __cplusplus }/* extern "C" */ #endif /* BROM_MATH_MATH_H_ */ #endif