| Index: src/core/SkNx.h
|
| diff --git a/src/core/SkNx.h b/src/core/SkNx.h
|
| index 8244e9026cc69436ca754761dea60797250d538a..65b5b97a83e536cc928b897f17653b8c5622143f 100644
|
| --- a/src/core/SkNx.h
|
| +++ b/src/core/SkNx.h
|
| @@ -39,6 +39,7 @@ template <int N, typename T>
|
| class SkNi {
|
| public:
|
| SkNi() {}
|
| + SkNi(const SkNi<N/2, T>& lo, const SkNi<N/2, T>& hi) : fLo(lo), fHi(hi) {}
|
| explicit SkNi(T val) : fLo(val), fHi(val) {}
|
| static SkNi Load(const T vals[N]) {
|
| return SkNi(SkNi<N/2,T>::Load(vals), SkNi<N/2,T>::Load(vals+N/2));
|
| @@ -69,7 +70,6 @@ public:
|
|
|
| private:
|
| REQUIRE(0 == (N & (N-1)));
|
| - SkNi(const SkNi<N/2, T>& lo, const SkNi<N/2, T>& hi) : fLo(lo), fHi(hi) {}
|
|
|
| SkNi<N/2, T> fLo, fHi;
|
| };
|
| @@ -77,6 +77,10 @@ private:
|
| template <int N, typename T>
|
| class SkNf {
|
| typedef SkNb<N, sizeof(T)> Nb;
|
| +
|
| + static int32_t MyNi(float);
|
| + static int64_t MyNi(double);
|
| + typedef SkNi<N, decltype(MyNi(T()))> Ni;
|
| public:
|
| SkNf() {}
|
| explicit SkNf(T val) : fLo(val), fHi(val) {}
|
| @@ -93,6 +97,8 @@ public:
|
| fHi.store(vals+N/2);
|
| }
|
|
|
| + Ni castTrunc() const { return Ni(fLo.castTrunc(), fHi.castTrunc()); }
|
| +
|
| SkNf operator + (const SkNf& o) const { return SkNf(fLo + o.fLo, fHi + o.fHi); }
|
| SkNf operator - (const SkNf& o) const { return SkNf(fLo - o.fLo, fHi - o.fHi); }
|
| SkNf operator * (const SkNf& o) const { return SkNf(fLo * o.fLo, fHi * o.fHi); }
|
| @@ -172,6 +178,10 @@ private:
|
| template <typename T>
|
| class SkNf<1,T> {
|
| typedef SkNb<1, sizeof(T)> Nb;
|
| +
|
| + static int32_t MyNi(float);
|
| + static int64_t MyNi(double);
|
| + typedef SkNi<1, decltype(MyNi(T()))> Ni;
|
| public:
|
| SkNf() {}
|
| explicit SkNf(T val) : fVal(val) {}
|
| @@ -179,6 +189,8 @@ public:
|
|
|
| void store(T vals[1]) const { vals[0] = fVal; }
|
|
|
| + Ni castTrunc() const { return Ni(fVal); }
|
| +
|
| SkNf operator + (const SkNf& o) const { return SkNf(fVal + o.fVal); }
|
| SkNf operator - (const SkNf& o) const { return SkNf(fVal - o.fVal); }
|
| SkNf operator * (const SkNf& o) const { return SkNf(fVal * o.fVal); }
|
| @@ -248,4 +260,6 @@ typedef SkNf<4, SkScalar> Sk4s;
|
| typedef SkNi<4, uint16_t> Sk4h;
|
| typedef SkNi<8, uint16_t> Sk8h;
|
|
|
| +typedef SkNi<4, int> Sk4i;
|
| +
|
| #endif//SkNx_DEFINED
|
|
|