#include #include #include #include #include "Complex.hpp" void ComplexDebug(char *fmtstr, ...) { char buf[1024]; va_list args; va_start(args, fmtstr); vsprintf(buf, fmtstr, args); va_end(args); OutputDebugString(buf); } // = src ComplexVector& ComplexVector::operator=(const ComplexVector &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(m_size, src.m_size); j = 0; dj = src.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = src.m_pPtrReal[j]; m_pPtrImag[i] = src.m_pPtrImag[j]; j += dj; } return *this; } // = src ComplexVector& ComplexVector::operator=(const radio_float_t &b) { *this = ComplexVector (b, 0); return *this; } // *= src ComplexVector& ComplexVector::operator*=(const radio_float_t &b) { *this = *this * ComplexVector (b, 0); return *this; } // += src ComplexVector& ComplexVector::operator+=(const radio_float_t &b) { *this = *this + ComplexVector (b, 0); return *this; } ComplexVector& ComplexVector::operator-=(const radio_float_t &b) { *this = *this - ComplexVector (b, 0); return *this; } // *= src ComplexVector& ComplexVector::operator*=(const ComplexVector &src) { *this = *this * src; return *this; } // += src ComplexVector& ComplexVector::operator+=(const ComplexVector &src) { *this = *this + src; return *this; } // -= src ComplexVector& ComplexVector::operator-=(const ComplexVector &src) { *this = *this - src; return *this; } // = -src ComplexVector& ComplexVector::operator=(const Negate &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(m_size, src.src.m_size); j = 0; dj = src.src.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = -src.src.m_pPtrReal[j]; m_pPtrImag[i] = -src.src.m_pPtrImag[j]; j += dj; } return *this; } // *= -src ComplexVector& ComplexVector::operator*=(const Negate &src) { *this = *this * src; return *this; } // += -src ComplexVector& ComplexVector::operator+=(const Negate &src) { *this = *this + src; return *this; } // -= -src ComplexVector& ComplexVector::operator-=(const Negate &src) { *this = *this + src; return *this; } // = src* ComplexVector& ComplexVector::operator=(const Conjugate &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(m_size, src.src.m_size); j = 0; dj = src.src.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.src.m_pPtrReal[j]; m_pPtrImag[i] = - src.src.m_pPtrImag[j]; j += dj; } return *this; } // *= src* ComplexVector& ComplexVector::operator*=(const Conjugate &src) { *this = *this * src; return *this; } // += src* ComplexVector& ComplexVector::operator+=(const Conjugate &src) { *this = *this + src; return *this; } // += src* ComplexVector& ComplexVector::operator-=(const Conjugate &src) { *this = *this - src; return *this; } // *= -src* ComplexVector& ComplexVector::operator=(const ConjugateNegate &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(m_size, src.src.m_size); j = 0; dj = src.src.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = - src.src.m_pPtrReal[j]; m_pPtrImag[i] = + src.src.m_pPtrImag[j]; j += dj; } return *this; } // *= -src* ComplexVector& ComplexVector::operator*=(const ConjugateNegate &src) { *this = *this * src; return *this; } // += -src* ComplexVector& ComplexVector::operator+=(const ConjugateNegate &src) { *this = *this + src; return *this; } // -= -src* ComplexVector& ComplexVector::operator-=(const ConjugateNegate &src) { *this = *this - src; return *this; } // 1. // = a * b ComplexVector& ComplexVector::operator=(const Mul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 1. // += a * b ComplexVector& ComplexVector::operator+=(const Mul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 1. // -= a * b ComplexVector& ComplexVector::operator-=(const Mul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 2. // = (-a) * b // = a * (-b) // = -(a * b) ComplexVector& ComplexVector::operator=(const NegMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 2. // += (-a) * b // += a * (-b) // += -(a * b) ComplexVector& ComplexVector::operator+=(const NegMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 2. // -= (-a) * b // -= a * (-b) // -= -(a * b) ComplexVector& ComplexVector::operator-=(const NegMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 3. // = a* * b // = a * b* ComplexVector& ComplexVector::operator=(const Mul_A_ConjB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 3. // += a* * b // += a * b* ComplexVector& ComplexVector::operator+=(const Mul_A_ConjB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 3. // -= a* * b // -= a * b* ComplexVector& ComplexVector::operator-=(const Mul_A_ConjB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 4. // = (a * b)* // = a* * b* ComplexVector& ComplexVector::operator=(const ConjMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 4. // += (a * b)* // += a* * b* ComplexVector& ComplexVector::operator+=(const ConjMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 4. // -= (a * b)* // -= a* * b* ComplexVector& ComplexVector::operator-=(const ConjMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 5. // = -(a * b)* // = (-a)* * (-b)* ComplexVector& ComplexVector::operator=(const ConjNegMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 5. // += -(a * b)* // += (-a)* * (-b)* ComplexVector& ComplexVector::operator+=(const ConjNegMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 5. // -= -(a * b)* // -= (-a)* * (-b)* ComplexVector& ComplexVector::operator-=(const ConjNegMul_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] + src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 6. // = (-a) * b* // = a * (-b)* // = (-a)* * b // = a* * (-b) ComplexVector& ComplexVector::operator=(const NegMul_A_ConjB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] = + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 6. // += (-a) * b* // += a * (-b)* // += (-a)* * b // += a* * (-b) ComplexVector& ComplexVector::operator+=(const NegMul_A_ConjB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] += - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] += + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 6. // -= (-a) * b* // -= a * (-b)* // -= (-a)* * b // -= a* * (-b) ComplexVector& ComplexVector::operator-=(const NegMul_A_ConjB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] -= - src.a.m_pPtrReal[i] * src.b.m_pPtrReal[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrImag[j]; m_pPtrImag[i] -= + src.a.m_pPtrReal[i] * src.b.m_pPtrImag[j] - src.a.m_pPtrImag[i] * src.b.m_pPtrReal[j]; j += dj; } return *this; } // 1. // a + b ComplexVector& ComplexVector::operator=(const Add_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] + src.b.m_pPtrReal[j]; m_pPtrImag[i] = + src.a.m_pPtrImag[i] + src.b.m_pPtrImag[j]; j += dj; } return *this; } // 2. // - (a + b) // -a - b ComplexVector& ComplexVector::operator=(const NegAdd_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = - src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j]; m_pPtrImag[i] = - src.a.m_pPtrImag[i] - src.b.m_pPtrImag[j]; j += dj; } return *this; } // 3. // (a + b)* ComplexVector& ComplexVector::operator=(const ConjAdd_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] + src.b.m_pPtrReal[j]; m_pPtrImag[i] = + src.a.m_pPtrImag[i] - src.b.m_pPtrImag[j]; j += dj; } return *this; } // 4. // -(a + b)* // (-a)* + (-b)* ComplexVector& ComplexVector::operator=(const ConjNegAdd_A_B &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j]; m_pPtrImag[i] = + src.a.m_pPtrImag[i] + src.b.m_pPtrImag[j]; j += dj; } return *this; } // 5. // a - b // a + (b-) // (-a) + b ComplexVector& ComplexVector::operator=(const Add_A_NegB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j]; m_pPtrImag[i] = + src.a.m_pPtrImag[i] - src.b.m_pPtrImag[j]; j += dj; } return *this; } // 6. // a + b* // a* + b ComplexVector& ComplexVector::operator=(const Add_A_ConjB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] + src.b.m_pPtrReal[j]; m_pPtrImag[i] = + src.a.m_pPtrImag[i] - src.b.m_pPtrImag[j]; j += dj; } return *this; } // 7. // - (a + b*) // - (a* + b) // -a* - b ComplexVector& ComplexVector::operator=(const NegAdd_A_ConjB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = - src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j]; m_pPtrImag[i] = - src.a.m_pPtrImag[i] + src.b.m_pPtrImag[j]; j += dj; } return *this; } // 8. // a - b* // (-a)* + b ComplexVector& ComplexVector::operator=(const Add_A_ConjNegB &src) { uint32_t i; uint32_t j; uint32_t dj; checkSize(src.a.m_size, src.b.m_size); j = 0; dj = src.b.m_size > 1; for (i=0; i < m_size; i++) { m_pPtrReal[i] = + src.a.m_pPtrReal[i] - src.b.m_pPtrReal[j]; m_pPtrImag[i] = + src.a.m_pPtrImag[i] + src.b.m_pPtrImag[j]; j += dj; } return *this; } ComplexVector::Mul_A_B operator*(const ComplexVector &a, radio_float_t b) { const ComplexVector bb = ComplexVector(b, 0); const ComplexVector::Mul_A_B ab(a, bb); return ab; } ComplexVector::Mul_A_B operator*(const ComplexVector &a, const ComplexVector &b) { const ComplexVector::Mul_A_B ab(a, b); return ab; } ComplexVector::Mul_A_B operator*(const ComplexVector::Negate &a, const ComplexVector::Negate &b) { const ComplexVector::Mul_A_B ab(a.src, b.src); return ab; } ComplexVector::NegMul_A_B operator*(const ComplexVector::Negate &a, const ComplexVector &b) { const ComplexVector::NegMul_A_B ab(a.src, b); return ab; } ComplexVector::NegMul_A_B operator*(const ComplexVector &a, const ComplexVector::Negate &b) { const ComplexVector::NegMul_A_B ab(a, b.src); return ab; } ComplexVector::ConjMul_A_B operator*(const ComplexVector::Conjugate &a, const ComplexVector::Conjugate &b) { const ComplexVector::ConjMul_A_B ab(a.src, b.src); return ab; } ComplexVector::Mul_A_ConjB operator*(const ComplexVector::Conjugate &a, const ComplexVector &b) { const ComplexVector::Mul_A_ConjB ab(b, a); return ab; } ComplexVector::Mul_A_ConjB operator*(const ComplexVector &a, const ComplexVector::Conjugate &b) { const ComplexVector::Mul_A_ConjB ab(a, b); return ab; } ComplexVector::ConjMul_A_B operator*(const ComplexVector::ConjugateNegate &a, const ComplexVector::ConjugateNegate &b) { const ComplexVector::ConjMul_A_B ab(a.src, b.src); return ab; } ComplexVector::NegMul_A_ConjB operator*(const ComplexVector &a, const ComplexVector::ConjugateNegate &b) { const ComplexVector::NegMul_A_ConjB ab(a, b.src); return ab; } ComplexVector::NegMul_A_ConjB operator*(const ComplexVector::ConjugateNegate &a, const ComplexVector &b) { const ComplexVector::NegMul_A_ConjB ab(b, a.src); return ab; } ComplexVector::NegMul_A_ConjB operator*(const ComplexVector::Negate &a, const ComplexVector::Conjugate &b) { const ComplexVector::NegMul_A_ConjB ab(a.src, b.src); return ab; } ComplexVector::NegMul_A_ConjB operator*(const ComplexVector::Conjugate &a, const ComplexVector::Negate &b) { const ComplexVector::NegMul_A_ConjB ab(b.src, a.src); return ab; } ComplexVector::Mul_A_ConjB operator*(const ComplexVector::Negate &a, const ComplexVector::ConjugateNegate &b) { const ComplexVector::Mul_A_ConjB ab(a.src, b.src); return ab; } ComplexVector::Mul_A_ConjB operator*(const ComplexVector::ConjugateNegate &a, const ComplexVector::Negate &b) { const ComplexVector::Mul_A_ConjB ab(b.src, a.src); return ab; } ComplexVector::Add_A_B operator+(const ComplexVector &a, radio_float_t b) { const ComplexVector bb = ComplexVector(b, 0); const ComplexVector::Add_A_B ab(a, bb); return ab; } ComplexVector::Add_A_B operator+(const ComplexVector &a, const ComplexVector &b) { const ComplexVector::Add_A_B ab(a, b); return ab; } ComplexVector::Add_A_NegB operator+(const ComplexVector::Negate &a, const ComplexVector &b) { const ComplexVector::Add_A_NegB ab(b, a); return ab; } ComplexVector::Add_A_NegB operator+(const ComplexVector &a, const ComplexVector::Negate &b) { const ComplexVector::Add_A_NegB ab(a, b); return ab; } ComplexVector::Add_A_ConjB operator+(const ComplexVector::Conjugate &a, const ComplexVector &b) { const ComplexVector::Add_A_ConjB ab(b, a); return ab; } ComplexVector::Add_A_ConjB operator+(const ComplexVector &a, const ComplexVector::Conjugate &b) { const ComplexVector::Add_A_ConjB ab(a, b); return ab; } ComplexVector::ConjAdd_A_B operator+(const ComplexVector::Conjugate &a, const ComplexVector::Conjugate &b) { const ComplexVector::ConjAdd_A_B ab(a.src, b.src); return ab; } ComplexVector::Add_A_ConjNegB operator+(const ComplexVector::ConjugateNegate &a, const ComplexVector &b) { const ComplexVector::Add_A_ConjNegB ab(b, a); return ab; } ComplexVector::Add_A_ConjNegB operator+(const ComplexVector &a, const ComplexVector::ConjugateNegate &b) { const ComplexVector::Add_A_ConjNegB ab(a, b); return ab; } ComplexVector::Add_A_B operator-(const ComplexVector &a, radio_float_t b) { const ComplexVector bb = ComplexVector(-b, 0); const ComplexVector::Add_A_B ab(a, bb); return ab; } ComplexVector::Add_A_NegB operator-(const ComplexVector &a, const ComplexVector &b) { const ComplexVector::Add_A_NegB ab(a, b); return ab; } ComplexVector::NegAdd_A_B operator-(const ComplexVector::Negate &a, const ComplexVector &b) { const ComplexVector::NegAdd_A_B ab(a.src, b); return ab; } ComplexVector::Add_A_B operator-(const ComplexVector &a, const ComplexVector::Negate &b) { const ComplexVector::Add_A_B ab(a, b.src); return ab; } ComplexVector::Add_A_NegB operator-(const ComplexVector::Negate &a, const ComplexVector::Negate &b) { const ComplexVector::Add_A_NegB ab(b.src, a); return ab; } ComplexVector::Add_A_ConjNegB operator-(const ComplexVector::Conjugate &a, const ComplexVector &b) { const ComplexVector::Add_A_ConjNegB ab(b, a); return ab; } ComplexVector::Add_A_ConjNegB operator-(const ComplexVector &a, const ComplexVector::Conjugate &b) { const ComplexVector::Add_A_ConjNegB ab(a, b); return ab; } ComplexVector::ConjAdd_A_B operator-(const ComplexVector::Conjugate &a, const ComplexVector::Conjugate &b) { const ComplexVector::ConjAdd_A_B ab(a.src, b.src); return ab; } ComplexVector::NegAdd_A_ConjB operator-(const ComplexVector::ConjugateNegate &a, const ComplexVector &b) { const ComplexVector::NegAdd_A_ConjB ab(b, a.src); return ab; } ComplexVector::Add_A_ConjB operator-(const ComplexVector &a, const ComplexVector::ConjugateNegate &b) { const ComplexVector::Add_A_ConjB ab(a, b.src); return ab; }