@@ -238,28 +238,28 @@ struct divides< complex_t<Scalar> >
238238// Out of line generic initialization of static member data not yet supported so we X-Macro identities for Scalar types we want to support
239239// (left X-Macro here since it's pretty readable)
240240
241- #define COMPLEX_ARITHMETIC_IDENTITIES (SCALAR) \
241+ #define COMPLEX_ARITHMETIC_IDENTITIES (SCALAR, COMPONENT ) \
242242template<> \
243- const static complex_t< SCALAR > plus< complex_t< SCALAR > >::identity = { promote< SCALAR , uint32_t >(0 ), promote< SCALAR , uint32_t >(0 )}; \
243+ const static complex_t< SCALAR > plus< complex_t< SCALAR > >::identity = { promote< SCALAR, COMPONENT >(0 ), promote< SCALAR, COMPONENT >(0 )}; \
244244template<> \
245- const static complex_t< SCALAR > minus< complex_t< SCALAR > >::identity = { promote< SCALAR , uint32_t >(0 ), promote< SCALAR , uint32_t >(0 )}; \
245+ const static complex_t< SCALAR > minus< complex_t< SCALAR > >::identity = { promote< SCALAR, COMPONENT >(0 ), promote< SCALAR, COMPONENT >(0 )}; \
246246template<> \
247- const static complex_t< SCALAR > multiplies< complex_t< SCALAR > >::identity = { promote< SCALAR , uint32_t >(1 ), promote< SCALAR , uint32_t >(0 )}; \
247+ const static complex_t< SCALAR > multiplies< complex_t< SCALAR > >::identity = { promote< SCALAR, COMPONENT >(1 ), promote< SCALAR, COMPONENT >(0 )}; \
248248template<> \
249- const static complex_t< SCALAR > divides< complex_t< SCALAR > >::identity = { promote< SCALAR , uint32_t >(1 ), promote< SCALAR , uint32_t >(0 )};
250-
251- COMPLEX_ARITHMETIC_IDENTITIES (float16_t)
252- COMPLEX_ARITHMETIC_IDENTITIES (float16_t2)
253- COMPLEX_ARITHMETIC_IDENTITIES (float16_t3)
254- COMPLEX_ARITHMETIC_IDENTITIES (float16_t4)
255- COMPLEX_ARITHMETIC_IDENTITIES (float32_t)
256- COMPLEX_ARITHMETIC_IDENTITIES (float32_t2)
257- COMPLEX_ARITHMETIC_IDENTITIES (float32_t3)
258- COMPLEX_ARITHMETIC_IDENTITIES (float32_t4)
259- COMPLEX_ARITHMETIC_IDENTITIES (float64_t)
260- COMPLEX_ARITHMETIC_IDENTITIES (float64_t2)
261- COMPLEX_ARITHMETIC_IDENTITIES (float64_t3)
262- COMPLEX_ARITHMETIC_IDENTITIES (float64_t4)
249+ const static complex_t< SCALAR > divides< complex_t< SCALAR > >::identity = { promote< SCALAR, COMPONENT >(1 ), promote< SCALAR, COMPONENT >(0 )};
250+
251+ COMPLEX_ARITHMETIC_IDENTITIES (float16_t, float16_t )
252+ COMPLEX_ARITHMETIC_IDENTITIES (float16_t2, float16_t )
253+ COMPLEX_ARITHMETIC_IDENTITIES (float16_t3, float16_t )
254+ COMPLEX_ARITHMETIC_IDENTITIES (float16_t4, float16_t )
255+ COMPLEX_ARITHMETIC_IDENTITIES (float32_t, float32_t )
256+ COMPLEX_ARITHMETIC_IDENTITIES (float32_t2, float32_t )
257+ COMPLEX_ARITHMETIC_IDENTITIES (float32_t3, float32_t )
258+ COMPLEX_ARITHMETIC_IDENTITIES (float32_t4, float32_t )
259+ COMPLEX_ARITHMETIC_IDENTITIES (float64_t, float64_t )
260+ COMPLEX_ARITHMETIC_IDENTITIES (float64_t2, float64_t )
261+ COMPLEX_ARITHMETIC_IDENTITIES (float64_t3, float64_t )
262+ COMPLEX_ARITHMETIC_IDENTITIES (float64_t4, float64_t )
263263
264264#undef COMPLEX_ARITHMETIC_IDENTITIES
265265
@@ -436,22 +436,6 @@ complex_t<Scalar> rotateRight(NBL_CONST_REF_ARG(complex_t<Scalar>) value)
436436 return retVal;
437437}
438438
439- template<typename Scalar>
440- struct ternary_operator< complex_t<Scalar> >
441- {
442- using type_t = complex_t<Scalar>;
443-
444- complex_t<Scalar> operator ()(bool condition, NBL_CONST_REF_ARG (complex_t<Scalar>) lhs, NBL_CONST_REF_ARG (complex_t<Scalar>) rhs)
445- {
446- const vector <Scalar, 2 > lhsVector = vector <Scalar, 2 >(lhs.real (), lhs.imag ());
447- const vector <Scalar, 2 > rhsVector = vector <Scalar, 2 >(rhs.real (), rhs.imag ());
448- const vector <Scalar, 2 > resultVector = condition ? lhsVector : rhsVector;
449- const complex_t<Scalar> result = { resultVector.x, resultVector.y };
450- return result;
451- }
452- };
453-
454-
455439}
456440}
457441
0 commit comments