Bullet Collision Detection & Physics Library
Classes | Macros | Typedefs | Functions | Variables
btScalar.h File Reference
#include <math.h>
#include <stdlib.h>
#include <float.h>
Include dependency graph for btScalar.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  btInfMaskConverter
 
struct  btTypedObject
 rudimentary class to provide type info More...
 

Macros

#define BT_BULLET_VERSION   284
 
#define SIMD_FORCE_INLINE   __forceinline
 
#define ATTRIBUTE_ALIGNED16(a)   __declspec(align(16)) a
 
#define ATTRIBUTE_ALIGNED64(a)   __declspec(align(64)) a
 
#define ATTRIBUTE_ALIGNED128(a)   __declspec (align(128)) a
 
#define btAssert(x)
 
#define btFullAssert(x)
 
#define btLikely(_c)   _c
 
#define btUnlikely(_c)   _c
 
#define BT_LARGE_FLOAT   1e18f
 
#define BT_INFINITY   (btInfinityMask.mask)
 
#define BT_DECLARE_ALIGNED_ALLOCATOR()
 
#define SIMD_PI   btScalar(3.1415926535897932384626433832795029)
 
#define SIMD_2_PI   (btScalar(2.0) * SIMD_PI)
 
#define SIMD_HALF_PI   (SIMD_PI * btScalar(0.5))
 
#define SIMD_RADS_PER_DEG   (SIMD_2_PI / btScalar(360.0))
 
#define SIMD_DEGS_PER_RAD   (btScalar(360.0) / SIMD_2_PI)
 
#define SIMDSQRT12   btScalar(0.7071067811865475244008443621048490)
 
#define btRecipSqrt(x)   ((btScalar)(btScalar(1.0)/btSqrt(btScalar(x)))) /* reciprocal square root */
 
#define btRecip(x)   (btScalar(1.0)/btScalar(x))
 
#define SIMD_EPSILON   FLT_EPSILON
 
#define SIMD_INFINITY   FLT_MAX
 
#define BT_ONE   1.0f
 
#define BT_ZERO   0.0f
 
#define BT_TWO   2.0f
 
#define BT_HALF   0.5f
 
#define BT_DECLARE_HANDLE(name)   typedef struct name##__ { int unused; } *name
 
#define btFsels(a, b, c)   (btScalar)btFsel(a,b,c)
 

Typedefs

typedef float btScalar
 The btScalar type abstracts floating point numbers, to easily switch between double and single floating point precision. More...
 

Functions

int btGetVersion ()
 
int btGetInfinityMask ()
 
btScalar btSqrt (btScalar y)
 
btScalar btFabs (btScalar x)
 
btScalar btCos (btScalar x)
 
btScalar btSin (btScalar x)
 
btScalar btTan (btScalar x)
 
btScalar btAcos (btScalar x)
 
btScalar btAsin (btScalar x)
 
btScalar btAtan (btScalar x)
 
btScalar btAtan2 (btScalar x, btScalar y)
 
btScalar btExp (btScalar x)
 
btScalar btLog (btScalar x)
 
btScalar btPow (btScalar x, btScalar y)
 
btScalar btFmod (btScalar x, btScalar y)
 
btScalar btAtan2Fast (btScalar y, btScalar x)
 
bool btFuzzyZero (btScalar x)
 
bool btEqual (btScalar a, btScalar eps)
 
bool btGreaterEqual (btScalar a, btScalar eps)
 
int btIsNegative (btScalar x)
 
btScalar btRadians (btScalar x)
 
btScalar btDegrees (btScalar x)
 
btScalar btFsel (btScalar a, btScalar b, btScalar c)
 
bool btMachineIsLittleEndian ()
 
unsigned btSelect (unsigned condition, unsigned valueIfConditionNonZero, unsigned valueIfConditionZero)
 btSelect avoids branches, which makes performance much better for consoles like Playstation 3 and XBox 360 Thanks Phil Knight. More...
 
int btSelect (unsigned condition, int valueIfConditionNonZero, int valueIfConditionZero)
 
float btSelect (unsigned condition, float valueIfConditionNonZero, float valueIfConditionZero)
 
template<typename T >
void btSwap (T &a, T &b)
 
unsigned btSwapEndian (unsigned val)
 
unsigned short btSwapEndian (unsigned short val)
 
unsigned btSwapEndian (int val)
 
unsigned short btSwapEndian (short val)
 
unsigned int btSwapEndianFloat (float d)
 btSwapFloat uses using char pointers to swap the endianness More...
 
float btUnswapEndianFloat (unsigned int a)
 
void btSwapEndianDouble (double d, unsigned char *dst)
 
double btUnswapEndianDouble (const unsigned char *src)
 
template<typename T >
void btSetZero (T *a, int n)
 
btScalar btLargeDot (const btScalar *a, const btScalar *b, int n)
 
btScalar btNormalizeAngle (btScalar angleInRadians)
 
template<typename T >
T * btAlignPointer (T *unalignedPtr, size_t alignment)
 align a pointer to the provided alignment, upwards More...
 

Variables

static btInfMaskConverter btInfinityMask = 0x7F800000
 

Macro Definition Documentation

#define ATTRIBUTE_ALIGNED128 (   a)    __declspec (align(128)) a

Definition at line 66 of file btScalar.h.

#define ATTRIBUTE_ALIGNED16 (   a)    __declspec(align(16)) a

Definition at line 64 of file btScalar.h.

#define ATTRIBUTE_ALIGNED64 (   a)    __declspec(align(64)) a

Definition at line 65 of file btScalar.h.

#define BT_BULLET_VERSION   284

Definition at line 31 of file btScalar.h.

#define BT_DECLARE_ALIGNED_ALLOCATOR ( )
Value:
SIMD_FORCE_INLINE void* operator new(size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes,16); } \
SIMD_FORCE_INLINE void operator delete(void* ptr) { btAlignedFree(ptr); } \
SIMD_FORCE_INLINE void* operator new(size_t, void* ptr) { return ptr; } \
SIMD_FORCE_INLINE void operator delete(void*, void*) { } \
SIMD_FORCE_INLINE void* operator new[](size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes,16); } \
SIMD_FORCE_INLINE void operator delete[](void* ptr) { btAlignedFree(ptr); } \
SIMD_FORCE_INLINE void* operator new[](size_t, void* ptr) { return ptr; } \
SIMD_FORCE_INLINE void operator delete[](void*, void*) { } \
#define SIMD_FORCE_INLINE
Definition: btScalar.h:63
#define btAlignedFree(ptr)
#define btAlignedAlloc(size, alignment)

Definition at line 388 of file btScalar.h.

#define BT_DECLARE_HANDLE (   name)    typedef struct name##__ { int unused; } *name

Definition at line 535 of file btScalar.h.

#define BT_HALF   0.5f

Definition at line 499 of file btScalar.h.

#define BT_INFINITY   (btInfinityMask.mask)

Definition at line 365 of file btScalar.h.

#define BT_LARGE_FLOAT   1e18f

Definition at line 280 of file btScalar.h.

#define BT_ONE   1.0f

Definition at line 496 of file btScalar.h.

#define BT_TWO   2.0f

Definition at line 498 of file btScalar.h.

#define BT_ZERO   0.0f

Definition at line 497 of file btScalar.h.

#define btAssert (   x)

Definition at line 113 of file btScalar.h.

#define btFsels (   a,
  b,
 
)    (btScalar)btFsel(a,b,c)

Definition at line 543 of file btScalar.h.

#define btFullAssert (   x)

Definition at line 116 of file btScalar.h.

#define btLikely (   _c)    _c

Definition at line 118 of file btScalar.h.

#define btRecip (   x)    (btScalar(1.0)/btScalar(x))

Definition at line 484 of file btScalar.h.

#define btRecipSqrt (   x)    ((btScalar)(btScalar(1.0)/btSqrt(btScalar(x)))) /* reciprocal square root */

Definition at line 483 of file btScalar.h.

#define btUnlikely (   _c)    _c

Definition at line 119 of file btScalar.h.

#define SIMD_2_PI   (btScalar(2.0) * SIMD_PI)

Definition at line 477 of file btScalar.h.

#define SIMD_DEGS_PER_RAD   (btScalar(360.0) / SIMD_2_PI)

Definition at line 480 of file btScalar.h.

#define SIMD_EPSILON   FLT_EPSILON

Definition at line 494 of file btScalar.h.

#define SIMD_FORCE_INLINE   __forceinline

Definition at line 63 of file btScalar.h.

#define SIMD_HALF_PI   (SIMD_PI * btScalar(0.5))

Definition at line 478 of file btScalar.h.

#define SIMD_INFINITY   FLT_MAX

Definition at line 495 of file btScalar.h.

#define SIMD_PI   btScalar(3.1415926535897932384626433832795029)

Definition at line 476 of file btScalar.h.

#define SIMD_RADS_PER_DEG   (SIMD_2_PI / btScalar(360.0))

Definition at line 479 of file btScalar.h.

#define SIMDSQRT12   btScalar(0.7071067811865475244008443621048490)

Definition at line 481 of file btScalar.h.

Typedef Documentation

typedef float btScalar

The btScalar type abstracts floating point numbers, to easily switch between double and single floating point precision.

Definition at line 278 of file btScalar.h.

Function Documentation

btScalar btAcos ( btScalar  x)
inline

Definition at line 453 of file btScalar.h.

template<typename T >
T* btAlignPointer ( T *  unalignedPtr,
size_t  alignment 
)

align a pointer to the provided alignment, upwards

Definition at line 760 of file btScalar.h.

btScalar btAsin ( btScalar  x)
inline

Definition at line 460 of file btScalar.h.

btScalar btAtan ( btScalar  x)
inline

Definition at line 467 of file btScalar.h.

btScalar btAtan2 ( btScalar  x,
btScalar  y 
)
inline

Definition at line 468 of file btScalar.h.

btScalar btAtan2Fast ( btScalar  y,
btScalar  x 
)
inline

Definition at line 502 of file btScalar.h.

btScalar btCos ( btScalar  x)
inline

Definition at line 450 of file btScalar.h.

btScalar btDegrees ( btScalar  x)
inline

Definition at line 533 of file btScalar.h.

bool btEqual ( btScalar  a,
btScalar  eps 
)
inline

Definition at line 520 of file btScalar.h.

btScalar btExp ( btScalar  x)
inline

Definition at line 469 of file btScalar.h.

btScalar btFabs ( btScalar  x)
inline

Definition at line 449 of file btScalar.h.

btScalar btFmod ( btScalar  x,
btScalar  y 
)
inline

Definition at line 472 of file btScalar.h.

btScalar btFsel ( btScalar  a,
btScalar  b,
btScalar  c 
)
inline

Definition at line 538 of file btScalar.h.

bool btFuzzyZero ( btScalar  x)
inline

Definition at line 518 of file btScalar.h.

int btGetInfinityMask ( )
inline

Definition at line 366 of file btScalar.h.

int btGetVersion ( )
inline

Definition at line 33 of file btScalar.h.

bool btGreaterEqual ( btScalar  a,
btScalar  eps 
)
inline

Definition at line 523 of file btScalar.h.

int btIsNegative ( btScalar  x)
inline

Definition at line 528 of file btScalar.h.

btScalar btLargeDot ( const btScalar a,
const btScalar b,
int  n 
)
inline

Definition at line 696 of file btScalar.h.

btScalar btLog ( btScalar  x)
inline

Definition at line 470 of file btScalar.h.

bool btMachineIsLittleEndian ( )
inline

Definition at line 546 of file btScalar.h.

btScalar btNormalizeAngle ( btScalar  angleInRadians)
inline

Definition at line 724 of file btScalar.h.

btScalar btPow ( btScalar  x,
btScalar  y 
)
inline

Definition at line 471 of file btScalar.h.

btScalar btRadians ( btScalar  x)
inline

Definition at line 532 of file btScalar.h.

unsigned btSelect ( unsigned  condition,
unsigned  valueIfConditionNonZero,
unsigned  valueIfConditionZero 
)
inline

btSelect avoids branches, which makes performance much better for consoles like Playstation 3 and XBox 360 Thanks Phil Knight.

See also http://www.cellperformance.com/articles/2006/04/more_techniques_for_eliminatin_1.html

Definition at line 560 of file btScalar.h.

int btSelect ( unsigned  condition,
int  valueIfConditionNonZero,
int  valueIfConditionZero 
)
inline

Definition at line 570 of file btScalar.h.

float btSelect ( unsigned  condition,
float  valueIfConditionNonZero,
float  valueIfConditionZero 
)
inline

Definition at line 576 of file btScalar.h.

template<typename T >
void btSetZero ( T *  a,
int  n 
)
inline

Definition at line 684 of file btScalar.h.

btScalar btSin ( btScalar  x)
inline

Definition at line 451 of file btScalar.h.

btScalar btSqrt ( btScalar  y)
inline

Definition at line 418 of file btScalar.h.

template<typename T >
void btSwap ( T &  a,
T &  b 
)
inline

Definition at line 585 of file btScalar.h.

unsigned btSwapEndian ( unsigned  val)
inline

Definition at line 594 of file btScalar.h.

unsigned short btSwapEndian ( unsigned short  val)
inline

Definition at line 599 of file btScalar.h.

unsigned btSwapEndian ( int  val)
inline

Definition at line 604 of file btScalar.h.

unsigned short btSwapEndian ( short  val)
inline

Definition at line 609 of file btScalar.h.

void btSwapEndianDouble ( double  d,
unsigned char *  dst 
)
inline

Definition at line 650 of file btScalar.h.

unsigned int btSwapEndianFloat ( float  d)
inline

btSwapFloat uses using char pointers to swap the endianness

btSwapFloat/btSwapDouble will NOT return a float, because the machine might 'correct' invalid floating point values Not all values of sign/exponent/mantissa are valid floating point numbers according to IEEE 754. When a floating point unit is faced with an invalid value, it may actually change the value, or worse, throw an exception. In most systems, running user mode code, you wouldn't get an exception, but instead the hardware/os/runtime will 'fix' the number for you. so instead of returning a float/double, we return integer/long long integer

Definition at line 620 of file btScalar.h.

btScalar btTan ( btScalar  x)
inline

Definition at line 452 of file btScalar.h.

double btUnswapEndianDouble ( const unsigned char *  src)
inline

Definition at line 666 of file btScalar.h.

float btUnswapEndianFloat ( unsigned int  a)
inline

Definition at line 634 of file btScalar.h.

Variable Documentation

btInfMaskConverter btInfinityMask = 0x7F800000
static

Definition at line 364 of file btScalar.h.