Home | History | Annotate | Download | only in core
      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