/* libs/graphics/sgl/SkFP.h ** ** Copyright 2006, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef SkFP_DEFINED #define SkFP_DEFINED #include "SkMath.h" #ifdef SK_SCALAR_IS_FLOAT typedef float SkFP; #define SkScalarToFP(n) (n) #define SkFPToScalar(n) (n) #define SkIntToFP(n) SkIntToScalar(n) #define SkFPRound(x) SkScalarRound(n) #define SkFPCeil(x) SkScalarCeil(n) #define SkFPFloor(x) SkScalarFloor(n) #define SkFPNeg(x) (-(x)) #define SkFPAbs(x) SkScalarAbs(x) #define SkFPAdd(a, b) ((a) + (b)) #define SkFPSub(a, b) ((a) - (b)) #define SkFPMul(a, b) ((a) * (b)) #define SkFPMulInt(a, n) ((a) * (n)) #define SkFPDiv(a, b) ((a) / (b)) #define SkFPDivInt(a, n) ((a) / (n)) #define SkFPInvert(x) SkScalarInvert(x) #define SkFPSqrt(x) SkScalarSqrt(x) #define SkFPCubeRoot(x) static_cast<float>(pow(x, 0.33333333333)) #define SkFPLT(a, b) ((a) < (b)) #define SkFPLE(a, b) ((a) <= (b)) #define SkFPGT(a, b) ((a) > (b)) #define SkFPGE(a, b) ((a) >= (b)) #else // scalar is fixed #include "SkFloat.h" typedef int32_t SkFP; #define SkScalarToFP(n) SkFloat::SetShift(n, -16) #define SkFPToScalar(n) SkFloat::GetShift(n, -16) #define SkIntToFP(n) SkFloat::SetShift(n, 0) #define SkFPRound(x) SkFloat::Round(x); #define SkFPCeil(x) SkFloat::Ceil(); #define SkFPFloor(x) SkFloat::Floor(); #define SkFPNeg(x) SkFloat::Neg(x) #define SkFPAbs(x) SkFloat::Abs(x) #define SkFPAdd(a, b) SkFloat::Add(a, b) #define SkFPSub(a, b) SkFloat::Add(a, SkFloat::Neg(b)) #define SkFPMul(a, b) SkFloat::Mul(a, b) #define SkFPMulInt(a, n) SkFloat::MulInt(a, n) #define SkFPDiv(a, b) SkFloat::Div(a, b) #define SkFPDivInt(a, n) SkFloat::DivInt(a, n) #define SkFPInvert(x) SkFloat::Invert(x) #define SkFPSqrt(x) SkFloat::Sqrt(x) #define SkFPCubeRoot(x) SkFloat::CubeRoot(x) #define SkFPLT(a, b) (SkFloat::Cmp(a, b) < 0) #define SkFPLE(a, b) (SkFloat::Cmp(a, b) <= 0) #define SkFPGT(a, b) (SkFloat::Cmp(a, b) > 0) #define SkFPGE(a, b) (SkFloat::Cmp(a, b) >= 0) #endif #ifdef SK_DEBUG void SkFP_UnitTest(); #endif #endif