/* Example programs from the book Scientific and Engineering Programming in C++: An Introduction with Advanced Techniques and Examples, Addison-Wesley, 1994. (c) COPYRIGHT INTERNATIONAL BUSINESS MACHINES CORPORATION 1994. ALL RIGHTS RESERVED. See README file for further details. */ #ifndef ColumnNormsH #define ColumnNormsH #include "Vector/FormedArithmetic.h" template class ColumnNorms : public FormedArithmetic1d { public: typedef StridedArray2d::EltT T; ColumnNorms(const StridedArray2d& m); // Compute norms of these columns. ColumnNorms(const Array1d& m); // Copy these as norms. ColumnNorms() : FormedArithmetic1d(1) {} ColumnNorms(const ColumnNorms& c) : FormedArithmetic1d(c) {} ColumnNorms& operator=(const ColumnNorms& c) { FormedArithmetic1d::operator=(c); return *this; } StridedArray2d& normalize(StridedArray2d& m); }; template void normalize( ConcreteArray1dRef a, const ColumnNorms& norms ); #include "LapackWrap/ConcreteBlas1d.h" template inline void normalize(ConcreteFortranArray1d& a, const ColumnNorms& norms) { ConcreteArray1dRef::SubscriptorT,T> ar = a; normalize(ar, norms); } #include "LapackWrap/ConcreteBlas2d.h" template inline void normalize(const ConcreteFortranArray2d::ProjectionT& a, const ColumnNorms& norms) { ConcreteArray1dRef::ProjectionT::SubscriptorT,T> ar = a; normalize(ar, norms); } #ifdef XLC_QNOTEMPINC #include "LapackWrap/ColumnNorms.c" #endif #endif