Add C++ implementations for xLACGV - conjugate a vector. PiperOrigin-RevId: 380897960
diff --git a/lapack/experimental/xlacgv.cpp b/lapack/experimental/xlacgv.cpp new file mode 100644 index 0000000..d022a3b --- /dev/null +++ b/lapack/experimental/xlacgv.cpp
@@ -0,0 +1,27 @@ +#include "../../Eigen/Core" + +extern "C" { +void clacgv_(int *n, std::complex<float> *x, int *incx); +void zlacgv_(int *n, std::complex<double> *x, int *incx); +} + +using Eigen::Map; +using Eigen::Matrix; +using Eigen::Dynamic; +using Eigen::InnerStride; + +// Conjugate the entries of the vector x. +template <typename T> +void xlacgv(const int n, T *x, const int incx) { + using StridedVector = Map<Matrix<T, Dynamic, 1>, 0, InnerStride<Dynamic>>; + StridedVector xvec(x, n, InnerStride<Dynamic>(std::abs(incx))); + xvec = xvec.conjugate(); +} + +void clacgv_(int *n, std::complex<float> *x, int *incx) { + xlacgv(*n, x, *incx); +} + +void zlacgv_(int *n, std::complex<double> *x, int *incx) { + xlacgv(*n, x, *incx); +}