28#include <boost/current_function.hpp>
31 #ifdef fmatvec_EXPORTS
32 #define FMATVEC_EXPORT __declspec(dllexport)
34 #define FMATVEC_EXPORT __declspec(dllimport)
36 #define FMATVEC_MSVC_DISABLEW4251_BEGIN __pragma(warning(push)) __pragma(warning(disable:4251))
37 #define FMATVEC_MSVC_DISABLEW4251_END __pragma(warning(pop))
39 #ifdef fmatvec_EXPORTS
40 #define FMATVEC_EXPORT __attribute((visibility ("default")))
42 #define FMATVEC_EXPORT
44 #define FMATVEC_MSVC_DISABLEW4251_BEGIN
45 #define FMATVEC_MSVC_DISABLEW4251_END
49#ifndef HAVE_LIBMKL_INTEL_LP64
50#ifndef CBLAS_ENUM_DEFINED_H
51 #define CBLAS_ENUM_DEFINED_H
52 enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102 };
53 enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113,
55 enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
56 enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
57 enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
59#define CBLAS_INDEX int
63 #define ATLAS_ORDER CBLAS_ORDER
64 #define AtlasRowMajor CblasRowMajor
65 #define AtlasColMajor CblasColMajor
66 #define ATLAS_TRANS CBLAS_TRANSPOSE
67 #define AtlasNoTrans CblasNoTrans
68 #define AtlasTrans CblasTrans
69 #define AtlasConjTrans CblasConjTrans
70 #define ATLAS_UPLO CBLAS_UPLO
71 #define AtlasUpper CblasUpper
72 #define AtlasLower CblasLower
73 #define ATLAS_DIAG CBLAS_DIAG
74 #define AtlasNonUnit CblasNonUnit
75 #define AtlasUnit CblasUnit
76 #define ATLAS_SIDE CBLAS_SIDE
77 #define AtlasLeft CblasLeft
78 #define AtlasRight CblasRight
200 #define FMATVEC_OPERATORRESULT1(AT, ATRes) \
201 template<> struct OperatorResult<AT, AT> { typedef ATRes Type; };
203 #define FMATVEC_OPERATORRESULT2(AT1, AT2, ATRes) \
204 template<> struct OperatorResult<AT1, AT2> { typedef ATRes Type; }; \
205 template<> struct OperatorResult<AT2, AT1> { typedef ATRes Type; };
207 FMATVEC_OPERATORRESULT1(
double,
double)
208 FMATVEC_OPERATORRESULT1(
float,
float)
209 FMATVEC_OPERATORRESULT1(
int,
int)
210 FMATVEC_OPERATORRESULT1(std::complex<double>, std::complex<double>)
211 FMATVEC_OPERATORRESULT1(std::complex<float>, std::complex<float>)
213 FMATVEC_OPERATORRESULT2(
double, std::complex<double>, std::complex<double>)
214 FMATVEC_OPERATORRESULT2(
float, std::complex<float>, std::complex<float>)
215 FMATVEC_OPERATORRESULT2(
double, std::complex<float>, std::complex<double>)
216 FMATVEC_OPERATORRESULT2(
float, std::complex<double>, std::complex<double>)
217 FMATVEC_OPERATORRESULT2(
int, std::complex<double>, std::complex<double>)
218 FMATVEC_OPERATORRESULT2(
int, std::complex<float>, std::complex<float>)
219 FMATVEC_OPERATORRESULT2(
int,
double,
double)
220 FMATVEC_OPERATORRESULT2(
int,
float,
float)
221 FMATVEC_OPERATORRESULT2(
float,
double,
double)
226 #define FMATVEC_ASSERT(expr, AT) fmatvec_assert<AssertUseException<AT>::value>(expr, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION, #expr);
234 inline void fmatvec_assert(
bool expr, std::string_view file,
int line, std::string_view func, std::string_view exprStr);
237 inline void fmatvec_assert<false>(
bool expr, std::string_view file,
int line, std::string_view func, std::string_view exprStr) {
241 fprintf(stderr,
"%s", (std::string(file)+
":"+std::to_string(line)+
": "+
242 std::string(func)+
": Assertion `"+std::string(exprStr)+
"' failed.").c_str());
249 inline void fmatvec_assert<true>(
bool expr, std::string_view file,
int line, std::string_view func, std::string_view exprStr) {
251 throw std::runtime_error(std::string(file)+
":"+std::to_string(line)+
": "+
252 std::string(func)+
": Assertion `"+std::string(exprStr)+
"' failed.");
260 template<
class,
class>
class Vector;
262 template<
class,
class,
class,
class>
class Matrix;
266 template<
class MatVec,
class NewAT>
269 template<
class NewAT>
274 template<
class NewAT>
279 template<
class NewAT>
284 template<
class Shape,
class OldAT,
class NewAT>
289 template<
class Shape,
class OldAT,
class NewAT>
294 template<
class MatType,
class RowShape,
class ColShape,
class OldAT,
class NewAT>
299 template<
class Shape,
class OldAT,
class NewAT>
305 template<
class MatVec,
class NewAT>
Shape class for diagonal matrices.
Definition: types.h:148
Definition: function.h:14
Shape class for general band matrices.
Definition: types.h:124
Shape class for general matrices.
Definition: types.h:116
This is the basic matrix class for arbitrary matrices.
Definition: matrix.h:52
Shape class for rotation matrices.
Definition: types.h:140
Shape class for sparse matrices.
Definition: types.h:156
Dummy shape class for square matrices.
Definition: types.h:173
Shape class for sparse matrices.
Definition: types.h:164
Shape class for symmetric matrices.
Definition: types.h:132
Namespace fmatvec.
Definition: _memory.cc:28