1685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com
2685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com/*
3685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Copyright 2006 The Android Open Source Project
4685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com *
5685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * found in the LICENSE file.
7685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com */
8685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com
9bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
10bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifndef SkFP_DEFINED
11bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#define SkFP_DEFINED
12bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
13bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkMath.h"
14bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
15bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_SCALAR_IS_FLOAT
16bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
17bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    typedef float SkFP;
18bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
19bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkScalarToFP(n)         (n)
20bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPToScalar(n)         (n)
21bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkIntToFP(n)            SkIntToScalar(n)
22bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPRound(x)            SkScalarRound(n)
23bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPCeil(x)             SkScalarCeil(n)
24bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPFloor(x)            SkScalarFloor(n)
25bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
26bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPNeg(x)              (-(x))
27bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPAbs(x)              SkScalarAbs(x)
28bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPAdd(a, b)           ((a) + (b))
29bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPSub(a, b)           ((a) - (b))
30bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPMul(a, b)           ((a) * (b))
31bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPMulInt(a, n)        ((a) * (n))
32bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPDiv(a, b)           ((a) / (b))
33bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPDivInt(a, n)        ((a) / (n))
34bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPInvert(x)           SkScalarInvert(x)
35bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPSqrt(x)             SkScalarSqrt(x)
3632296c486afda9a9726e3c8b1cc5d4b9adf0570areed@android.com    #define SkFPCubeRoot(x)         sk_float_pow(x, 0.3333333f)
37bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
38bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPLT(a, b)            ((a) < (b))
39bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPLE(a, b)            ((a) <= (b))
40bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPGT(a, b)            ((a) > (b))
41bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPGE(a, b)            ((a) >= (b))
42bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
43bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#else   // scalar is fixed
44bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
45bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #include "SkFloat.h"
46bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
47bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    typedef int32_t SkFP;
48bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
49bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkScalarToFP(n)         SkFloat::SetShift(n, -16)
50bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPToScalar(n)         SkFloat::GetShift(n, -16)
51bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkIntToFP(n)            SkFloat::SetShift(n, 0)
52bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPRound(x)            SkFloat::Round(x);
53bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPCeil(x)             SkFloat::Ceil();
54bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPFloor(x)            SkFloat::Floor();
55bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
56bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPNeg(x)              SkFloat::Neg(x)
57bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPAbs(x)              SkFloat::Abs(x)
58bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPAdd(a, b)           SkFloat::Add(a, b)
59bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPSub(a, b)           SkFloat::Add(a, SkFloat::Neg(b))
60bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPMul(a, b)           SkFloat::Mul(a, b)
61bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPMulInt(a, n)        SkFloat::MulInt(a, n)
62bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPDiv(a, b)           SkFloat::Div(a, b)
63bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPDivInt(a, n)        SkFloat::DivInt(a, n)
64bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPInvert(x)           SkFloat::Invert(x)
65bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPSqrt(x)             SkFloat::Sqrt(x)
66bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPCubeRoot(x)         SkFloat::CubeRoot(x)
67bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
68bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPLT(a, b)            (SkFloat::Cmp(a, b) < 0)
69bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPLE(a, b)            (SkFloat::Cmp(a, b) <= 0)
70bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPGT(a, b)            (SkFloat::Cmp(a, b) > 0)
71bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    #define SkFPGE(a, b)            (SkFloat::Cmp(a, b) >= 0)
72bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
73bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif
74bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
75bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_DEBUG
76bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    void SkFP_UnitTest();
77bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif
78bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
79bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif
80