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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 return SkNi(fLo.saturatedAdd(o.fLo), fHi.saturatedAdd(o.fHi)); | 61 return SkNi(fLo.saturatedAdd(o.fLo), fHi.saturatedAdd(o.fHi)); |
62 } | 62 } |
63 | 63 |
64 SkNi operator + (const SkNi& o) const { return SkNi(fLo + o.fLo, fHi + o.fHi
); } | 64 SkNi operator + (const SkNi& o) const { return SkNi(fLo + o.fLo, fHi + o.fHi
); } |
65 SkNi operator - (const SkNi& o) const { return SkNi(fLo - o.fLo, fHi - o.fHi
); } | 65 SkNi operator - (const SkNi& o) const { return SkNi(fLo - o.fLo, fHi - o.fHi
); } |
66 SkNi operator * (const SkNi& o) const { return SkNi(fLo * o.fLo, fHi * o.fHi
); } | 66 SkNi operator * (const SkNi& o) const { return SkNi(fLo * o.fLo, fHi * o.fHi
); } |
67 | 67 |
68 SkNi operator << (int bits) const { return SkNi(fLo << bits, fHi << bits); } | 68 SkNi operator << (int bits) const { return SkNi(fLo << bits, fHi << bits); } |
69 SkNi operator >> (int bits) const { return SkNi(fLo >> bits, fHi >> bits); } | 69 SkNi operator >> (int bits) const { return SkNi(fLo >> bits, fHi >> bits); } |
70 | 70 |
71 // TODO: comparisons, min, max? | 71 static SkNi Min(const SkNi& a, const SkNi& b) { |
| 72 return SkNi(SkNi<N/2, T>::Min(a.fLo, b.fLo), SkNi<N/2, T>::Min(a.fHi, b.
fHi)); |
| 73 } |
| 74 |
| 75 // TODO: comparisons, max? |
72 | 76 |
73 template <int k> T kth() const { | 77 template <int k> T kth() const { |
74 SkASSERT(0 <= k && k < N); | 78 SkASSERT(0 <= k && k < N); |
75 return k < N/2 ? fLo.template kth<k>() : fHi.template kth<k-N/2>(); | 79 return k < N/2 ? fLo.template kth<k>() : fHi.template kth<k-N/2>(); |
76 } | 80 } |
77 | 81 |
78 protected: | 82 protected: |
79 REQUIRE(0 == (N & (N-1))); | 83 REQUIRE(0 == (N & (N-1))); |
80 | 84 |
81 SkNi<N/2, T> fLo, fHi; | 85 SkNi<N/2, T> fLo, fHi; |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 return SkNi(sum > fVal ? sum : (T)(~0)); | 180 return SkNi(sum > fVal ? sum : (T)(~0)); |
177 } | 181 } |
178 | 182 |
179 SkNi operator + (const SkNi& o) const { return SkNi(fVal + o.fVal); } | 183 SkNi operator + (const SkNi& o) const { return SkNi(fVal + o.fVal); } |
180 SkNi operator - (const SkNi& o) const { return SkNi(fVal - o.fVal); } | 184 SkNi operator - (const SkNi& o) const { return SkNi(fVal - o.fVal); } |
181 SkNi operator * (const SkNi& o) const { return SkNi(fVal * o.fVal); } | 185 SkNi operator * (const SkNi& o) const { return SkNi(fVal * o.fVal); } |
182 | 186 |
183 SkNi operator << (int bits) const { return SkNi(fVal << bits); } | 187 SkNi operator << (int bits) const { return SkNi(fVal << bits); } |
184 SkNi operator >> (int bits) const { return SkNi(fVal >> bits); } | 188 SkNi operator >> (int bits) const { return SkNi(fVal >> bits); } |
185 | 189 |
| 190 static SkNi Min(const SkNi& a, const SkNi& b) { return SkNi(SkTMin(a.fVal, b
.fVal)); } |
| 191 |
186 template <int k> T kth() const { | 192 template <int k> T kth() const { |
187 SkASSERT(0 == k); | 193 SkASSERT(0 == k); |
188 return fVal; | 194 return fVal; |
189 } | 195 } |
190 | 196 |
191 protected: | 197 protected: |
192 T fVal; | 198 T fVal; |
193 }; | 199 }; |
194 | 200 |
195 template <typename T> | 201 template <typename T> |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 typedef SkNi<4, uint16_t> Sk4h; | 285 typedef SkNi<4, uint16_t> Sk4h; |
280 typedef SkNi<8, uint16_t> Sk8h; | 286 typedef SkNi<8, uint16_t> Sk8h; |
281 typedef SkNi<16, uint16_t> Sk16h; | 287 typedef SkNi<16, uint16_t> Sk16h; |
282 | 288 |
283 typedef SkNi<16, uint8_t> Sk16b; | 289 typedef SkNi<16, uint8_t> Sk16b; |
284 | 290 |
285 typedef SkNi<4, int32_t> Sk4i; | 291 typedef SkNi<4, int32_t> Sk4i; |
286 typedef SkNi<4, uint32_t> Sk4u; | 292 typedef SkNi<4, uint32_t> Sk4u; |
287 | 293 |
288 #endif//SkNx_DEFINED | 294 #endif//SkNx_DEFINED |
OLD | NEW |