| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkNx_DEFINED | 8 #ifndef SkNx_DEFINED |
| 9 #define SkNx_DEFINED | 9 #define SkNx_DEFINED |
| 10 | 10 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 private: | 70 private: |
| 71 REQUIRE(0 == (N & (N-1))); | 71 REQUIRE(0 == (N & (N-1))); |
| 72 SkNi(const SkNi<N/2, T>& lo, const SkNi<N/2, T>& hi) : fLo(lo), fHi(hi) {} | 72 SkNi(const SkNi<N/2, T>& lo, const SkNi<N/2, T>& hi) : fLo(lo), fHi(hi) {} |
| 73 | 73 |
| 74 SkNi<N/2, T> fLo, fHi; | 74 SkNi<N/2, T> fLo, fHi; |
| 75 }; | 75 }; |
| 76 | 76 |
| 77 template <int N, typename T> | 77 template <int N, typename T> |
| 78 class SkNf { | 78 class SkNf { |
| 79 typedef SkNb<N, sizeof(T)> Nb; | 79 typedef SkNb<N, sizeof(T)> Nb; |
| 80 | |
| 81 static int32_t MyNi(float); | |
| 82 static int64_t MyNi(double); | |
| 83 typedef SkNi<N, decltype(MyNi(T()))> Ni; | |
| 84 public: | 80 public: |
| 85 SkNf() {} | 81 SkNf() {} |
| 86 explicit SkNf(T val) : fLo(val), fHi(val) {} | 82 explicit SkNf(T val) : fLo(val), fHi(val) {} |
| 87 static SkNf Load(const T vals[N]) { | 83 static SkNf Load(const T vals[N]) { |
| 88 return SkNf(SkNf<N/2,T>::Load(vals), SkNf<N/2,T>::Load(vals+N/2)); | 84 return SkNf(SkNf<N/2,T>::Load(vals), SkNf<N/2,T>::Load(vals+N/2)); |
| 89 } | 85 } |
| 90 | 86 |
| 91 SkNf(T a, T b) : fLo(a), fHi(b) {
REQUIRE(N==2); } | 87 SkNf(T a, T b) : fLo(a), fHi(b) {
REQUIRE(N==2); } |
| 92 SkNf(T a, T b, T c, T d) : fLo(a,b), fHi(c,d) {
REQUIRE(N==4); } | 88 SkNf(T a, T b, T c, T d) : fLo(a,b), fHi(c,d) {
REQUIRE(N==4); } |
| 93 SkNf(T a, T b, T c, T d, T e, T f, T g, T h) : fLo(a,b,c,d), fHi(e,f,g,h) {
REQUIRE(N==8); } | 89 SkNf(T a, T b, T c, T d, T e, T f, T g, T h) : fLo(a,b,c,d), fHi(e,f,g,h) {
REQUIRE(N==8); } |
| 94 | 90 |
| 95 void store(T vals[N]) const { | 91 void store(T vals[N]) const { |
| 96 fLo.store(vals); | 92 fLo.store(vals); |
| 97 fHi.store(vals+N/2); | 93 fHi.store(vals+N/2); |
| 98 } | 94 } |
| 99 | 95 |
| 100 Ni castTrunc() const { return Ni(fLo.castTrunc(), fHi.castTrunc()); } | |
| 101 | |
| 102 SkNf operator + (const SkNf& o) const { return SkNf(fLo + o.fLo, fHi + o.fHi
); } | 96 SkNf operator + (const SkNf& o) const { return SkNf(fLo + o.fLo, fHi + o.fHi
); } |
| 103 SkNf operator - (const SkNf& o) const { return SkNf(fLo - o.fLo, fHi - o.fHi
); } | 97 SkNf operator - (const SkNf& o) const { return SkNf(fLo - o.fLo, fHi - o.fHi
); } |
| 104 SkNf operator * (const SkNf& o) const { return SkNf(fLo * o.fLo, fHi * o.fHi
); } | 98 SkNf operator * (const SkNf& o) const { return SkNf(fLo * o.fLo, fHi * o.fHi
); } |
| 105 SkNf operator / (const SkNf& o) const { return SkNf(fLo / o.fLo, fHi / o.fHi
); } | 99 SkNf operator / (const SkNf& o) const { return SkNf(fLo / o.fLo, fHi / o.fHi
); } |
| 106 | 100 |
| 107 Nb operator == (const SkNf& o) const { return Nb(fLo == o.fLo, fHi == o.fHi)
; } | 101 Nb operator == (const SkNf& o) const { return Nb(fLo == o.fLo, fHi == o.fHi)
; } |
| 108 Nb operator != (const SkNf& o) const { return Nb(fLo != o.fLo, fHi != o.fHi)
; } | 102 Nb operator != (const SkNf& o) const { return Nb(fLo != o.fLo, fHi != o.fHi)
; } |
| 109 Nb operator < (const SkNf& o) const { return Nb(fLo < o.fLo, fHi < o.fHi)
; } | 103 Nb operator < (const SkNf& o) const { return Nb(fLo < o.fLo, fHi < o.fHi)
; } |
| 110 Nb operator > (const SkNf& o) const { return Nb(fLo > o.fLo, fHi > o.fHi)
; } | 104 Nb operator > (const SkNf& o) const { return Nb(fLo > o.fLo, fHi > o.fHi)
; } |
| 111 Nb operator <= (const SkNf& o) const { return Nb(fLo <= o.fLo, fHi <= o.fHi)
; } | 105 Nb operator <= (const SkNf& o) const { return Nb(fLo <= o.fLo, fHi <= o.fHi)
; } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 return fVal; | 165 return fVal; |
| 172 } | 166 } |
| 173 | 167 |
| 174 private: | 168 private: |
| 175 T fVal; | 169 T fVal; |
| 176 }; | 170 }; |
| 177 | 171 |
| 178 template <typename T> | 172 template <typename T> |
| 179 class SkNf<1,T> { | 173 class SkNf<1,T> { |
| 180 typedef SkNb<1, sizeof(T)> Nb; | 174 typedef SkNb<1, sizeof(T)> Nb; |
| 181 | |
| 182 static int32_t MyNi(float); | |
| 183 static int64_t MyNi(double); | |
| 184 typedef SkNi<1, decltype(MyNi(T()))> Ni; | |
| 185 public: | 175 public: |
| 186 SkNf() {} | 176 SkNf() {} |
| 187 explicit SkNf(T val) : fVal(val) {} | 177 explicit SkNf(T val) : fVal(val) {} |
| 188 static SkNf Load(const T vals[1]) { return SkNf(vals[0]); } | 178 static SkNf Load(const T vals[1]) { return SkNf(vals[0]); } |
| 189 | 179 |
| 190 void store(T vals[1]) const { vals[0] = fVal; } | 180 void store(T vals[1]) const { vals[0] = fVal; } |
| 191 | 181 |
| 192 Ni castTrunc() const { return Ni(fVal); } | |
| 193 | |
| 194 SkNf operator + (const SkNf& o) const { return SkNf(fVal + o.fVal); } | 182 SkNf operator + (const SkNf& o) const { return SkNf(fVal + o.fVal); } |
| 195 SkNf operator - (const SkNf& o) const { return SkNf(fVal - o.fVal); } | 183 SkNf operator - (const SkNf& o) const { return SkNf(fVal - o.fVal); } |
| 196 SkNf operator * (const SkNf& o) const { return SkNf(fVal * o.fVal); } | 184 SkNf operator * (const SkNf& o) const { return SkNf(fVal * o.fVal); } |
| 197 SkNf operator / (const SkNf& o) const { return SkNf(fVal / o.fVal); } | 185 SkNf operator / (const SkNf& o) const { return SkNf(fVal / o.fVal); } |
| 198 | 186 |
| 199 Nb operator == (const SkNf& o) const { return Nb(fVal == o.fVal); } | 187 Nb operator == (const SkNf& o) const { return Nb(fVal == o.fVal); } |
| 200 Nb operator != (const SkNf& o) const { return Nb(fVal != o.fVal); } | 188 Nb operator != (const SkNf& o) const { return Nb(fVal != o.fVal); } |
| 201 Nb operator < (const SkNf& o) const { return Nb(fVal < o.fVal); } | 189 Nb operator < (const SkNf& o) const { return Nb(fVal < o.fVal); } |
| 202 Nb operator > (const SkNf& o) const { return Nb(fVal > o.fVal); } | 190 Nb operator > (const SkNf& o) const { return Nb(fVal > o.fVal); } |
| 203 Nb operator <= (const SkNf& o) const { return Nb(fVal <= o.fVal); } | 191 Nb operator <= (const SkNf& o) const { return Nb(fVal <= o.fVal); } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 typedef SkNf<2, double> Sk2d; | 241 typedef SkNf<2, double> Sk2d; |
| 254 typedef SkNf<2, SkScalar> Sk2s; | 242 typedef SkNf<2, SkScalar> Sk2s; |
| 255 | 243 |
| 256 typedef SkNf<4, float> Sk4f; | 244 typedef SkNf<4, float> Sk4f; |
| 257 typedef SkNf<4, double> Sk4d; | 245 typedef SkNf<4, double> Sk4d; |
| 258 typedef SkNf<4, SkScalar> Sk4s; | 246 typedef SkNf<4, SkScalar> Sk4s; |
| 259 | 247 |
| 260 typedef SkNi<4, uint16_t> Sk4h; | 248 typedef SkNi<4, uint16_t> Sk4h; |
| 261 typedef SkNi<8, uint16_t> Sk8h; | 249 typedef SkNi<8, uint16_t> Sk8h; |
| 262 | 250 |
| 263 typedef SkNi<4, int> Sk4i; | |
| 264 | |
| 265 #endif//SkNx_DEFINED | 251 #endif//SkNx_DEFINED |
| OLD | NEW |