1 /* libs/graphics/sgl/SkFP.h 2 ** 3 ** Copyright 2006, The Android Open Source Project 4 ** 5 ** Licensed under the Apache License, Version 2.0 (the "License"); 6 ** you may not use this file except in compliance with the License. 7 ** You may obtain a copy of the License at 8 ** 9 ** http://www.apache.org/licenses/LICENSE-2.0 10 ** 11 ** Unless required by applicable law or agreed to in writing, software 12 ** distributed under the License is distributed on an "AS IS" BASIS, 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 ** See the License for the specific language governing permissions and 15 ** limitations under the License. 16 */ 17 18 #ifndef SkFP_DEFINED 19 #define SkFP_DEFINED 20 21 #include "SkMath.h" 22 23 #ifdef SK_SCALAR_IS_FLOAT 24 25 typedef float SkFP; 26 27 #define SkScalarToFP(n) (n) 28 #define SkFPToScalar(n) (n) 29 #define SkIntToFP(n) SkIntToScalar(n) 30 #define SkFPRound(x) SkScalarRound(n) 31 #define SkFPCeil(x) SkScalarCeil(n) 32 #define SkFPFloor(x) SkScalarFloor(n) 33 34 #define SkFPNeg(x) (-(x)) 35 #define SkFPAbs(x) SkScalarAbs(x) 36 #define SkFPAdd(a, b) ((a) + (b)) 37 #define SkFPSub(a, b) ((a) - (b)) 38 #define SkFPMul(a, b) ((a) * (b)) 39 #define SkFPMulInt(a, n) ((a) * (n)) 40 #define SkFPDiv(a, b) ((a) / (b)) 41 #define SkFPDivInt(a, n) ((a) / (n)) 42 #define SkFPInvert(x) SkScalarInvert(x) 43 #define SkFPSqrt(x) SkScalarSqrt(x) 44 #define SkFPCubeRoot(x) sk_float_pow(x, 0.3333333f) 45 46 #define SkFPLT(a, b) ((a) < (b)) 47 #define SkFPLE(a, b) ((a) <= (b)) 48 #define SkFPGT(a, b) ((a) > (b)) 49 #define SkFPGE(a, b) ((a) >= (b)) 50 51 #else // scalar is fixed 52 53 #include "SkFloat.h" 54 55 typedef int32_t SkFP; 56 57 #define SkScalarToFP(n) SkFloat::SetShift(n, -16) 58 #define SkFPToScalar(n) SkFloat::GetShift(n, -16) 59 #define SkIntToFP(n) SkFloat::SetShift(n, 0) 60 #define SkFPRound(x) SkFloat::Round(x); 61 #define SkFPCeil(x) SkFloat::Ceil(); 62 #define SkFPFloor(x) SkFloat::Floor(); 63 64 #define SkFPNeg(x) SkFloat::Neg(x) 65 #define SkFPAbs(x) SkFloat::Abs(x) 66 #define SkFPAdd(a, b) SkFloat::Add(a, b) 67 #define SkFPSub(a, b) SkFloat::Add(a, SkFloat::Neg(b)) 68 #define SkFPMul(a, b) SkFloat::Mul(a, b) 69 #define SkFPMulInt(a, n) SkFloat::MulInt(a, n) 70 #define SkFPDiv(a, b) SkFloat::Div(a, b) 71 #define SkFPDivInt(a, n) SkFloat::DivInt(a, n) 72 #define SkFPInvert(x) SkFloat::Invert(x) 73 #define SkFPSqrt(x) SkFloat::Sqrt(x) 74 #define SkFPCubeRoot(x) SkFloat::CubeRoot(x) 75 76 #define SkFPLT(a, b) (SkFloat::Cmp(a, b) < 0) 77 #define SkFPLE(a, b) (SkFloat::Cmp(a, b) <= 0) 78 #define SkFPGT(a, b) (SkFloat::Cmp(a, b) > 0) 79 #define SkFPGE(a, b) (SkFloat::Cmp(a, b) >= 0) 80 81 #endif 82 83 #ifdef SK_DEBUG 84 void SkFP_UnitTest(); 85 #endif 86 87 #endif 88