Table of Contents

include/AK/SoundEngine/Common/AkFPUtilities.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002 The content of this file includes portions of the AUDIOKINETIC Wwise Technology
00003 released in source code form as part of the SDK installer package.
00004 
00005 Commercial License Usage
00006 
00007 Licensees holding valid commercial licenses to the AUDIOKINETIC Wwise Technology
00008 may use this file in accordance with the end user license agreement provided 
00009 with the software or, alternatively, in accordance with the terms contained in a
00010 written agreement between you and Audiokinetic Inc.
00011 
00012 Apache License Usage
00013 
00014 Alternatively, this file may be used under the Apache License, Version 2.0 (the 
00015 "Apache License"); you may not use this file except in compliance with the 
00016 Apache License. You may obtain a copy of the Apache License at 
00017 http://www.apache.org/licenses/LICENSE-2.0.
00018 
00019 Unless required by applicable law or agreed to in writing, software distributed
00020 under the Apache License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
00021 OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for
00022 the specific language governing permissions and limitations under the License.
00023 
00024   Version: <VERSION>  Build: <BUILDNUMBER>
00025   Copyright (c) <COPYRIGHTYEAR> Audiokinetic Inc.
00026 *******************************************************************************/
00027 
00028 /// \file 
00029 /// Floating point performance utilities.
00030 
00031 #ifndef _AK_FP_UTILS_H_
00032 #define _AK_FP_UTILS_H_
00033 
00034 #include <AK/SoundEngine/Common/AkTypes.h>
00035 
00036 #define AK_FSEL( __a__, __b__, __c__) (((__a__) >= 0) ? (__b__) : (__c__))
00037 
00038 /// Branchless (where available) version returning minimum value between two AkReal32 values
00039 static AkForceInline AkReal32 AK_FPMin( AkReal32 fA, AkReal32 fB )
00040 {   
00041     return (fA < fB ? fA : fB);
00042 } 
00043 
00044 /// Branchless (where available) version returning maximum value between two AkReal32 values
00045 static AkForceInline AkReal32 AK_FPMax( AkReal32 fA, AkReal32 fB )
00046 {   
00047     return (fA > fB ? fA : fB);
00048 }
00049 
00050 /// Branchless comparison (where available) setting 3rd argument to 4th argument if 1st argument is greater than 2nd argument.
00051 static AkForceInline void AK_FPSetValGT( AkReal32 in_fComparandA, AkReal32 in_fComparandB, AkReal32 & io_fVariableToSet, AkReal32 in_fValueIfTrue )
00052 {   
00053     if ( in_fComparandA > in_fComparandB )
00054         io_fVariableToSet = in_fValueIfTrue;
00055 }
00056 
00057 /// Branchless comparison (where available) setting 3rd argument to 4th argument if 1st argument is greater than equal 2nd argument.
00058 static AkForceInline void AK_FPSetValGTE( AkReal32 in_fComparandA, AkReal32 in_fComparandB, AkReal32 & io_fVariableToSet, AkReal32 in_fValueIfTrue )
00059 {   
00060     if ( in_fComparandA >= in_fComparandB )
00061         io_fVariableToSet = in_fValueIfTrue;
00062 }
00063 
00064 /// Branchless comparison (where available) setting 3rd argument to 4th argument if 1st argument is less than 2nd argument.
00065 static AkForceInline void AK_FPSetValLT( AkReal32 in_fComparandA, AkReal32 in_fComparandB, AkReal32 & io_fVariableToSet, AkReal32 in_fValueIfTrue )
00066 {   
00067     if ( in_fComparandA < in_fComparandB )
00068         io_fVariableToSet = in_fValueIfTrue;
00069 }
00070 
00071 /// Branchless comparison (where available) setting 3rd argument to 4th argument if 1st argument is less than equal 2nd argument.
00072 static AkForceInline void AK_FPSetValLTE( AkReal32 in_fComparandA, AkReal32 in_fComparandB, AkReal32 & io_fVariableToSet, AkReal32 in_fValueIfTrue )
00073 {   
00074     if ( in_fComparandA <= in_fComparandB )
00075         io_fVariableToSet = in_fValueIfTrue;
00076 }
00077 
00078 #endif //_AK_FP_UTILS_H_
00079