OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2015 Google Inc. |
| 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. |
| 6 */ |
| 7 |
| 8 // It is important _not_ to put header guards here. |
| 9 // This file will be intentionally included three times. |
| 10 |
| 11 #include "SkTypes.h" // Keep this before any #ifdef for skbug.com/3362 |
| 12 |
| 13 #if defined(SK2X_PREAMBLE) |
| 14 #include "SkFloatingPoint.h" |
| 15 #include <math.h> |
| 16 |
| 17 #elif defined(SK2X_PRIVATE) |
| 18 T fVec[2]; |
| 19 |
| 20 #else |
| 21 |
| 22 #define M(...) template <typename T> __VA_ARGS__ Sk2x<T>:: |
| 23 |
| 24 M() Sk2x() {} |
| 25 M() Sk2x(T val) { fVec[0] = fVec[1] = val; } |
| 26 M() Sk2x(T a, T b) { fVec[0] = a; fVec[1] = b; } |
| 27 |
| 28 M(Sk2x<T>&) operator=(const Sk2x<T>& o) { |
| 29 fVec[0] = o.fVec[0]; |
| 30 fVec[1] = o.fVec[1]; |
| 31 return *this; |
| 32 } |
| 33 |
| 34 M(Sk2x<T>) Load(const T vals[2]) { return Sk2x<T>(vals[0], vals[1]); } |
| 35 M(void) store(T vals[2]) const { vals[0] = fVec[0]; vals[1] = fVec[1]; } |
| 36 |
| 37 M(Sk2x<T>) add(const Sk2x<T>& o) const { |
| 38 return Sk2x<T>(fVec[0] + o.fVec[0], fVec[1] + o.fVec[1]); |
| 39 } |
| 40 M(Sk2x<T>) subtract(const Sk2x<T>& o) const { |
| 41 return Sk2x<T>(fVec[0] - o.fVec[0], fVec[1] - o.fVec[1]); |
| 42 } |
| 43 M(Sk2x<T>) multiply(const Sk2x<T>& o) const { |
| 44 return Sk2x<T>(fVec[0] * o.fVec[0], fVec[1] * o.fVec[1]); |
| 45 } |
| 46 |
| 47 M(Sk2x<T>) Min(const Sk2x<T>& a, const Sk2x<T>& b) { |
| 48 return Sk2x<T>(SkTMin(a.fVec[0], b.fVec[0]), SkTMin(a.fVec[1], b.fVec[1])); |
| 49 } |
| 50 M(Sk2x<T>) Max(const Sk2x<T>& a, const Sk2x<T>& b) { |
| 51 return Sk2x<T>(SkTMax(a.fVec[0], b.fVec[0]), SkTMax(a.fVec[1], b.fVec[1])); |
| 52 } |
| 53 |
| 54 #undef M |
| 55 |
| 56 #define M template <> inline |
| 57 |
| 58 M Sk2f Sk2f::rsqrt() const { return Sk2f(sk_float_rsqrt(fVec[0]), sk_float_rsqrt
(fVec[1])); } |
| 59 M Sk2f Sk2f:: sqrt() const { return Sk2f( sqrtf(fVec[0]), sqrtf
(fVec[1])); } |
| 60 |
| 61 M Sk2d Sk2d::rsqrt() const { return Sk2d(1.0/::sqrt(fVec[0]), 1.0/::sqrt(fVec[1]
)); } |
| 62 M Sk2d Sk2d:: sqrt() const { return Sk2d( ::sqrt(fVec[0]), ::sqrt(fVec[1]
)); } |
| 63 |
| 64 #undef M |
| 65 |
| 66 #endif |
OLD | NEW |