From 7eeb620880e78b7a389304d9ec594986906db5ad Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Sat, 1 Sep 2007 10:47:07 +0000 Subject: [PATCH] restart Eigen2 development from scratch. --- CMakeLists.txt | 3 - TODO | 47 - cmake/modules/CheckAlwaysInline.cmake | 44 - cmake/modules/CheckRestrictKeyword.cmake | 87 - tvmet-1.7.1/AUTHORS | 1 - tvmet-1.7.1/CMakeLists.txt | 2 - tvmet-1.7.1/COPYING | 504 --- tvmet-1.7.1/INSTALL | 229 - tvmet-1.7.1/LICENSE | 53 - tvmet-1.7.1/NEWS | 190 - tvmet-1.7.1/README | 9 - tvmet-1.7.1/THANKS | 49 - tvmet-1.7.1/benchmark/BTL-20030124.patch | 3887 ----------------- tvmet-1.7.1/benchmark/Makefile.am | 3 - tvmet-1.7.1/benchmark/Makefile.in | 338 -- tvmet-1.7.1/doc/Doxyfile.in | 1120 ----- tvmet-1.7.1/doc/Makefile.am | 218 - tvmet-1.7.1/doc/Makefile.in | 687 --- tvmet-1.7.1/doc/Util.h | 202 - tvmet-1.7.1/doc/aat.png | Bin 19009 -> 0 bytes tvmet-1.7.1/doc/ata.png | Bin 18952 -> 0 bytes tvmet-1.7.1/doc/axpy.png | Bin 23093 -> 0 bytes tvmet-1.7.1/doc/benchmark.dox | 52 - tvmet-1.7.1/doc/build.dox | 199 - tvmet-1.7.1/doc/compiler.dox | 375 -- tvmet-1.7.1/doc/dox_functions.cc | 448 -- tvmet-1.7.1/doc/dox_operators.cc | 425 -- tvmet-1.7.1/doc/faq.dox | 295 -- tvmet-1.7.1/doc/footer.html.in | 17 - tvmet-1.7.1/doc/header.html | 37 - tvmet-1.7.1/doc/intro.dox | 140 - tvmet-1.7.1/doc/license.dox | 677 --- tvmet-1.7.1/doc/links.dox | 41 - tvmet-1.7.1/doc/matrix_matrix.png | Bin 22105 -> 0 bytes tvmet-1.7.1/doc/matrix_vector.png | Bin 24808 -> 0 bytes tvmet-1.7.1/doc/misc.dox | 8 - tvmet-1.7.1/doc/notes.dox | 325 -- tvmet-1.7.1/doc/projects.dox | 21 - tvmet-1.7.1/doc/tvmet.css | 225 - tvmet-1.7.1/doc/tvmet.sty.in | 111 - tvmet-1.7.1/doc/usage.dox | 407 -- tvmet-1.7.1/doc/works.dox | 40 - tvmet-1.7.1/examples/Makefile.am | 59 - tvmet-1.7.1/examples/Makefile.in | 651 --- tvmet-1.7.1/examples/alias.cc | 33 - tvmet-1.7.1/examples/aliasing.cc | 44 - tvmet-1.7.1/examples/cmm.cc | 29 - tvmet-1.7.1/examples/cmv.cc | 36 - tvmet-1.7.1/examples/diag.cc | 32 - tvmet-1.7.1/examples/frob_matrix_norm.cc | 191 - tvmet-1.7.1/examples/hspiess.cc | 37 - tvmet-1.7.1/examples/matrix_col.cc | 44 - tvmet-1.7.1/examples/mm.cc | 30 - tvmet-1.7.1/examples/mv.cc | 36 - tvmet-1.7.1/examples/ray.cc | 103 - tvmet-1.7.1/examples/redwards.cc | 25 - tvmet-1.7.1/examples/xpr_print_m1.cc | 21 - tvmet-1.7.1/examples/xpr_print_m2.cc | 21 - tvmet-1.7.1/examples/xpr_print_m3.cc | 21 - tvmet-1.7.1/examples/xpr_print_m4.cc | 21 - tvmet-1.7.1/examples/xpr_print_mv1.cc | 26 - tvmet-1.7.1/examples/xpr_print_mv2.cc | 26 - tvmet-1.7.1/examples/xpr_print_v1.cc | 19 - tvmet-1.7.1/examples/xpr_print_v2.cc | 19 - tvmet-1.7.1/examples/xpr_print_v3.cc | 19 - tvmet-1.7.1/examples/xpr_print_v4.cc | 19 - tvmet-1.7.1/include/CMakeLists.txt | 1 - tvmet-1.7.1/include/tvmet/AliasProxy.h | 127 - tvmet-1.7.1/include/tvmet/BinaryFunctionals.h | 178 - tvmet-1.7.1/include/tvmet/CMakeLists.txt | 30 - tvmet-1.7.1/include/tvmet/CommaInitializer.h | 130 - tvmet-1.7.1/include/tvmet/CompileTimeError.h | 59 - tvmet-1.7.1/include/tvmet/Extremum.h | 107 - tvmet-1.7.1/include/tvmet/Functional.h | 87 - tvmet-1.7.1/include/tvmet/Matrix.h | 306 -- tvmet-1.7.1/include/tvmet/MatrixEval.h | 322 -- tvmet-1.7.1/include/tvmet/MatrixFunctions.h | 1169 ----- tvmet-1.7.1/include/tvmet/MatrixImpl.h | 173 - tvmet-1.7.1/include/tvmet/MatrixOperators.h | 718 --- .../include/tvmet/MatrixUnaryFunctions.h | 90 - tvmet-1.7.1/include/tvmet/Traits.h | 122 - tvmet-1.7.1/include/tvmet/TraitsBase.h | 347 -- tvmet-1.7.1/include/tvmet/TvmetBase.h | 101 - tvmet-1.7.1/include/tvmet/TypePromotion.h | 176 - tvmet-1.7.1/include/tvmet/UnaryFunctionals.h | 119 - tvmet-1.7.1/include/tvmet/Vector.h | 317 -- tvmet-1.7.1/include/tvmet/VectorEval.h | 373 -- tvmet-1.7.1/include/tvmet/VectorFunctions.h | 854 ---- tvmet-1.7.1/include/tvmet/VectorImpl.h | 169 - tvmet-1.7.1/include/tvmet/VectorOperators.h | 496 --- .../include/tvmet/VectorUnaryFunctions.h | 100 - tvmet-1.7.1/include/tvmet/config.h.cmake | 15 - tvmet-1.7.1/include/tvmet/loop/CMakeLists.txt | 6 - tvmet-1.7.1/include/tvmet/loop/Gemm.h | 114 - tvmet-1.7.1/include/tvmet/loop/Gemmt.h | 114 - tvmet-1.7.1/include/tvmet/loop/Gemtm.h | 115 - tvmet-1.7.1/include/tvmet/loop/Gemtv.h | 109 - tvmet-1.7.1/include/tvmet/loop/Gemv.h | 109 - tvmet-1.7.1/include/tvmet/loop/Matrix.h | 65 - tvmet-1.7.1/include/tvmet/loop/Vector.h | 64 - tvmet-1.7.1/include/tvmet/meta/CMakeLists.txt | 6 - tvmet-1.7.1/include/tvmet/meta/Gemm.h | 101 - tvmet-1.7.1/include/tvmet/meta/Gemmt.h | 102 - tvmet-1.7.1/include/tvmet/meta/Gemtm.h | 105 - tvmet-1.7.1/include/tvmet/meta/Gemtv.h | 99 - tvmet-1.7.1/include/tvmet/meta/Gemv.h | 99 - tvmet-1.7.1/include/tvmet/meta/Matrix.h | 165 - tvmet-1.7.1/include/tvmet/meta/Vector.h | 154 - tvmet-1.7.1/include/tvmet/tvmet.h | 140 - tvmet-1.7.1/include/tvmet/util/General.h | 125 - tvmet-1.7.1/include/tvmet/util/Incrementor.h | 90 - tvmet-1.7.1/include/tvmet/xpr/BinOperator.h | 104 - tvmet-1.7.1/include/tvmet/xpr/CMakeLists.txt | 6 - tvmet-1.7.1/include/tvmet/xpr/Eval.h | 115 - tvmet-1.7.1/include/tvmet/xpr/Identity.h | 67 - tvmet-1.7.1/include/tvmet/xpr/Literal.h | 89 - tvmet-1.7.1/include/tvmet/xpr/MMProduct.h | 136 - .../include/tvmet/xpr/MMProductTransposed.h | 138 - tvmet-1.7.1/include/tvmet/xpr/MMtProduct.h | 139 - tvmet-1.7.1/include/tvmet/xpr/MVProduct.h | 132 - tvmet-1.7.1/include/tvmet/xpr/Matrix.h | 156 - tvmet-1.7.1/include/tvmet/xpr/MatrixCol.h | 97 - tvmet-1.7.1/include/tvmet/xpr/MatrixDiag.h | 95 - .../include/tvmet/xpr/MatrixFunctions.h | 736 ---- .../include/tvmet/xpr/MatrixOperators.h | 471 -- tvmet-1.7.1/include/tvmet/xpr/MatrixRow.h | 97 - .../include/tvmet/xpr/MatrixTranspose.h | 88 - tvmet-1.7.1/include/tvmet/xpr/MtMProduct.h | 140 - tvmet-1.7.1/include/tvmet/xpr/MtVProduct.h | 129 - tvmet-1.7.1/include/tvmet/xpr/Null.h | 68 - tvmet-1.7.1/include/tvmet/xpr/UnOperator.h | 98 - tvmet-1.7.1/include/tvmet/xpr/Vector.h | 154 - .../include/tvmet/xpr/VectorFunctions.h | 655 --- .../include/tvmet/xpr/VectorOperators.h | 362 -- tvmet-1.7.1/tests/Makefile.am | 16 - tvmet-1.7.1/tests/Makefile.in | 470 -- tvmet-1.7.1/tests/README | 2 - tvmet-1.7.1/tests/bad_temps.cc | 243 -- tvmet-1.7.1/tests/bad_xpr_const_ref.cc | 164 - tvmet-1.7.1/tests/swap.cc | 154 - tvmet-1.7.1/tests/t.cc | 414 -- tvmet-1.7.1/tests/tvmet.cc | 312 -- tvmet-1.7.1/testsuite/CMakeLists.txt | 50 - tvmet-1.7.1/testsuite/TestConstruction.h | 302 -- tvmet-1.7.1/testsuite/TestDimension.h | 259 -- tvmet-1.7.1/testsuite/TestMathOps.h | 491 --- tvmet-1.7.1/testsuite/TestMatrixElementwise.h | 238 - tvmet-1.7.1/testsuite/TestMatrixEval.h | 307 -- tvmet-1.7.1/testsuite/TestMatrixFunctions.h | 713 --- tvmet-1.7.1/testsuite/TestMatrixOperators.h | 317 -- tvmet-1.7.1/testsuite/TestSTL.h | 160 - tvmet-1.7.1/testsuite/TestUnFunc.h | 383 -- tvmet-1.7.1/testsuite/TestUnloops.h | 417 -- tvmet-1.7.1/testsuite/TestVectorEval.h | 304 -- tvmet-1.7.1/testsuite/TestVectorFunctions.h | 500 --- tvmet-1.7.1/testsuite/TestVectorOperators.h | 414 -- tvmet-1.7.1/testsuite/TestXpr.h | 223 - .../testsuite/TestXprMatrixFunctions.h | 562 --- .../testsuite/TestXprMatrixOperators.h | 228 - .../testsuite/TestXprVectorFunctions.h | 324 -- .../testsuite/TestXprVectorOperators.h | 204 - tvmet-1.7.1/testsuite/compare.h | 94 - tvmet-1.7.1/testsuite/main.cpp | 25 - tvmet-1.7.1/testsuite/main.h | 53 - .../testsuite/testcommainitializer.cpp | 49 - tvmet-1.7.1/testsuite/testconstructors.cpp | 147 - tvmet-1.7.1/testsuite/testtraits.cpp | 146 - 167 files changed, 34603 deletions(-) delete mode 100644 TODO delete mode 100644 cmake/modules/CheckAlwaysInline.cmake delete mode 100644 cmake/modules/CheckRestrictKeyword.cmake delete mode 100644 tvmet-1.7.1/AUTHORS delete mode 100644 tvmet-1.7.1/CMakeLists.txt delete mode 100644 tvmet-1.7.1/COPYING delete mode 100644 tvmet-1.7.1/INSTALL delete mode 100644 tvmet-1.7.1/LICENSE delete mode 100644 tvmet-1.7.1/NEWS delete mode 100644 tvmet-1.7.1/README delete mode 100644 tvmet-1.7.1/THANKS delete mode 100644 tvmet-1.7.1/benchmark/BTL-20030124.patch delete mode 100644 tvmet-1.7.1/benchmark/Makefile.am delete mode 100644 tvmet-1.7.1/benchmark/Makefile.in delete mode 100644 tvmet-1.7.1/doc/Doxyfile.in delete mode 100644 tvmet-1.7.1/doc/Makefile.am delete mode 100644 tvmet-1.7.1/doc/Makefile.in delete mode 100644 tvmet-1.7.1/doc/Util.h delete mode 100644 tvmet-1.7.1/doc/aat.png delete mode 100644 tvmet-1.7.1/doc/ata.png delete mode 100644 tvmet-1.7.1/doc/axpy.png delete mode 100644 tvmet-1.7.1/doc/benchmark.dox delete mode 100644 tvmet-1.7.1/doc/build.dox delete mode 100644 tvmet-1.7.1/doc/compiler.dox delete mode 100644 tvmet-1.7.1/doc/dox_functions.cc delete mode 100644 tvmet-1.7.1/doc/dox_operators.cc delete mode 100644 tvmet-1.7.1/doc/faq.dox delete mode 100644 tvmet-1.7.1/doc/footer.html.in delete mode 100644 tvmet-1.7.1/doc/header.html delete mode 100644 tvmet-1.7.1/doc/intro.dox delete mode 100644 tvmet-1.7.1/doc/license.dox delete mode 100644 tvmet-1.7.1/doc/links.dox delete mode 100644 tvmet-1.7.1/doc/matrix_matrix.png delete mode 100644 tvmet-1.7.1/doc/matrix_vector.png delete mode 100644 tvmet-1.7.1/doc/misc.dox delete mode 100644 tvmet-1.7.1/doc/notes.dox delete mode 100644 tvmet-1.7.1/doc/projects.dox delete mode 100644 tvmet-1.7.1/doc/tvmet.css delete mode 100644 tvmet-1.7.1/doc/tvmet.sty.in delete mode 100644 tvmet-1.7.1/doc/usage.dox delete mode 100644 tvmet-1.7.1/doc/works.dox delete mode 100644 tvmet-1.7.1/examples/Makefile.am delete mode 100644 tvmet-1.7.1/examples/Makefile.in delete mode 100644 tvmet-1.7.1/examples/alias.cc delete mode 100644 tvmet-1.7.1/examples/aliasing.cc delete mode 100644 tvmet-1.7.1/examples/cmm.cc delete mode 100644 tvmet-1.7.1/examples/cmv.cc delete mode 100644 tvmet-1.7.1/examples/diag.cc delete mode 100644 tvmet-1.7.1/examples/frob_matrix_norm.cc delete mode 100644 tvmet-1.7.1/examples/hspiess.cc delete mode 100644 tvmet-1.7.1/examples/matrix_col.cc delete mode 100644 tvmet-1.7.1/examples/mm.cc delete mode 100644 tvmet-1.7.1/examples/mv.cc delete mode 100644 tvmet-1.7.1/examples/ray.cc delete mode 100644 tvmet-1.7.1/examples/redwards.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_m1.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_m2.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_m3.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_m4.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_mv1.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_mv2.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_v1.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_v2.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_v3.cc delete mode 100644 tvmet-1.7.1/examples/xpr_print_v4.cc delete mode 100644 tvmet-1.7.1/include/CMakeLists.txt delete mode 100644 tvmet-1.7.1/include/tvmet/AliasProxy.h delete mode 100644 tvmet-1.7.1/include/tvmet/BinaryFunctionals.h delete mode 100644 tvmet-1.7.1/include/tvmet/CMakeLists.txt delete mode 100644 tvmet-1.7.1/include/tvmet/CommaInitializer.h delete mode 100644 tvmet-1.7.1/include/tvmet/CompileTimeError.h delete mode 100644 tvmet-1.7.1/include/tvmet/Extremum.h delete mode 100644 tvmet-1.7.1/include/tvmet/Functional.h delete mode 100644 tvmet-1.7.1/include/tvmet/Matrix.h delete mode 100644 tvmet-1.7.1/include/tvmet/MatrixEval.h delete mode 100644 tvmet-1.7.1/include/tvmet/MatrixFunctions.h delete mode 100644 tvmet-1.7.1/include/tvmet/MatrixImpl.h delete mode 100644 tvmet-1.7.1/include/tvmet/MatrixOperators.h delete mode 100644 tvmet-1.7.1/include/tvmet/MatrixUnaryFunctions.h delete mode 100644 tvmet-1.7.1/include/tvmet/Traits.h delete mode 100644 tvmet-1.7.1/include/tvmet/TraitsBase.h delete mode 100644 tvmet-1.7.1/include/tvmet/TvmetBase.h delete mode 100644 tvmet-1.7.1/include/tvmet/TypePromotion.h delete mode 100644 tvmet-1.7.1/include/tvmet/UnaryFunctionals.h delete mode 100644 tvmet-1.7.1/include/tvmet/Vector.h delete mode 100644 tvmet-1.7.1/include/tvmet/VectorEval.h delete mode 100644 tvmet-1.7.1/include/tvmet/VectorFunctions.h delete mode 100644 tvmet-1.7.1/include/tvmet/VectorImpl.h delete mode 100644 tvmet-1.7.1/include/tvmet/VectorOperators.h delete mode 100644 tvmet-1.7.1/include/tvmet/VectorUnaryFunctions.h delete mode 100644 tvmet-1.7.1/include/tvmet/config.h.cmake delete mode 100644 tvmet-1.7.1/include/tvmet/loop/CMakeLists.txt delete mode 100644 tvmet-1.7.1/include/tvmet/loop/Gemm.h delete mode 100644 tvmet-1.7.1/include/tvmet/loop/Gemmt.h delete mode 100644 tvmet-1.7.1/include/tvmet/loop/Gemtm.h delete mode 100644 tvmet-1.7.1/include/tvmet/loop/Gemtv.h delete mode 100644 tvmet-1.7.1/include/tvmet/loop/Gemv.h delete mode 100644 tvmet-1.7.1/include/tvmet/loop/Matrix.h delete mode 100644 tvmet-1.7.1/include/tvmet/loop/Vector.h delete mode 100644 tvmet-1.7.1/include/tvmet/meta/CMakeLists.txt delete mode 100644 tvmet-1.7.1/include/tvmet/meta/Gemm.h delete mode 100644 tvmet-1.7.1/include/tvmet/meta/Gemmt.h delete mode 100644 tvmet-1.7.1/include/tvmet/meta/Gemtm.h delete mode 100644 tvmet-1.7.1/include/tvmet/meta/Gemtv.h delete mode 100644 tvmet-1.7.1/include/tvmet/meta/Gemv.h delete mode 100644 tvmet-1.7.1/include/tvmet/meta/Matrix.h delete mode 100644 tvmet-1.7.1/include/tvmet/meta/Vector.h delete mode 100644 tvmet-1.7.1/include/tvmet/tvmet.h delete mode 100644 tvmet-1.7.1/include/tvmet/util/General.h delete mode 100644 tvmet-1.7.1/include/tvmet/util/Incrementor.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/BinOperator.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/CMakeLists.txt delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/Eval.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/Identity.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/Literal.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MMProduct.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MMProductTransposed.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MMtProduct.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MVProduct.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/Matrix.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MatrixCol.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MatrixDiag.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MatrixFunctions.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MatrixOperators.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MatrixRow.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MatrixTranspose.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MtMProduct.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/MtVProduct.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/Null.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/UnOperator.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/Vector.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/VectorFunctions.h delete mode 100644 tvmet-1.7.1/include/tvmet/xpr/VectorOperators.h delete mode 100644 tvmet-1.7.1/tests/Makefile.am delete mode 100644 tvmet-1.7.1/tests/Makefile.in delete mode 100644 tvmet-1.7.1/tests/README delete mode 100644 tvmet-1.7.1/tests/bad_temps.cc delete mode 100644 tvmet-1.7.1/tests/bad_xpr_const_ref.cc delete mode 100644 tvmet-1.7.1/tests/swap.cc delete mode 100644 tvmet-1.7.1/tests/t.cc delete mode 100644 tvmet-1.7.1/tests/tvmet.cc delete mode 100644 tvmet-1.7.1/testsuite/CMakeLists.txt delete mode 100644 tvmet-1.7.1/testsuite/TestConstruction.h delete mode 100644 tvmet-1.7.1/testsuite/TestDimension.h delete mode 100644 tvmet-1.7.1/testsuite/TestMathOps.h delete mode 100644 tvmet-1.7.1/testsuite/TestMatrixElementwise.h delete mode 100644 tvmet-1.7.1/testsuite/TestMatrixEval.h delete mode 100644 tvmet-1.7.1/testsuite/TestMatrixFunctions.h delete mode 100644 tvmet-1.7.1/testsuite/TestMatrixOperators.h delete mode 100644 tvmet-1.7.1/testsuite/TestSTL.h delete mode 100644 tvmet-1.7.1/testsuite/TestUnFunc.h delete mode 100644 tvmet-1.7.1/testsuite/TestUnloops.h delete mode 100644 tvmet-1.7.1/testsuite/TestVectorEval.h delete mode 100644 tvmet-1.7.1/testsuite/TestVectorFunctions.h delete mode 100644 tvmet-1.7.1/testsuite/TestVectorOperators.h delete mode 100644 tvmet-1.7.1/testsuite/TestXpr.h delete mode 100644 tvmet-1.7.1/testsuite/TestXprMatrixFunctions.h delete mode 100644 tvmet-1.7.1/testsuite/TestXprMatrixOperators.h delete mode 100644 tvmet-1.7.1/testsuite/TestXprVectorFunctions.h delete mode 100644 tvmet-1.7.1/testsuite/TestXprVectorOperators.h delete mode 100644 tvmet-1.7.1/testsuite/compare.h delete mode 100644 tvmet-1.7.1/testsuite/main.cpp delete mode 100644 tvmet-1.7.1/testsuite/main.h delete mode 100644 tvmet-1.7.1/testsuite/testcommainitializer.cpp delete mode 100644 tvmet-1.7.1/testsuite/testconstructors.cpp delete mode 100644 tvmet-1.7.1/testsuite/testtraits.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d304f9b4..f33b7a2b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,5 @@ project(Eigen) -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") - OPTION(BUILD_TESTS "Build tests" OFF) OPTION(BUILD_EXAMPLES "Build examples" OFF) @@ -16,4 +14,3 @@ endif (CMAKE_COMPILER_IS_GNUCXX) include_directories( ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ) -add_subdirectory(tvmet-1.7.1) diff --git a/TODO b/TODO deleted file mode 100644 index 1e0d49901..000000000 --- a/TODO +++ /dev/null @@ -1,47 +0,0 @@ -Eigen 2 business plan, aka TODO. - -This is the work branch for Eigen2, eventually to supersede to Eigen 1 in -/trunk/kdesupport/eigen. - -Eigen2 starts as a fork of the orphaned code of Tvmet. - -- Phase A: cleanup and reorganize Tvmet code. --- port from autotools to CMake (IN PROGRESS) --- Remove unneeded/obsolete configure checks (IN PROGRESS) --- Remove other unneeded defines and #ifdefs, like TVMET_DYNAMIC_MEMORY - (we want to use fixed-size only at this stage). --- Make sure the test-suite compiles and succeeds. --- add a meta-header including all headers (requested by Andre) - -- Phase B: Complete the fixed-size part of Eigen 2. --- Add to the Vector and Matrix classes all the useful methods from - Eigen 1. Also implement the other useful features from Eigen 1, like - projective geometry, linear regression, quaternions. - Make sure all that works nicely with the expression templates. --- review the API for consistency, naming scheme etc. --- Make sure all the optimizations of Eigen 1 survive in Eigen 2. For - instance, in Eigen 1 we hand-unroll most of the nested loops that GCC 4.1 - fails to unroll. This is most useful and we need to make sure that Eigen 2 - does it too. --- Extend the test-suite to cover everything. --- Rename consistently Tvmet to Eigen while giving credit (keep copyright - lines, mention Tvmet in documentation, README, website, etc.) - -- Phase C: Do the dynamic-size part of Eigen 2 (as a GMM++ wrapper). --- Import a SVN snapshot of GMM++ (there have been useful changes since the - last stable release 2.0.2). --- Write the wrapping classes using the expression template mechanisms from - Tvmet. --- Evaluate adding some methods/functions from Eigen 1, like those for linear - regression. --- Review the whole API (fixed-size and dynamic-size) for consistency and - add bridges between the fixed-size and dynamic-size classes: constructors, - conversion operators, etc. --- In a perfect world we would be able to do dynamic-size matrices with - fixed-size-matrix entries. --- give credit to GMM in the documentation, README, website, etc. - -- Phase D: ?????? - -- Phase E: $$$ Profit!!! $$$ - diff --git a/cmake/modules/CheckAlwaysInline.cmake b/cmake/modules/CheckAlwaysInline.cmake deleted file mode 100644 index ab5ceb0ac..000000000 --- a/cmake/modules/CheckAlwaysInline.cmake +++ /dev/null @@ -1,44 +0,0 @@ -# This module checks if the C++ compiler supports -# __attribute__((always_inline)). -# -# If yes, _RESULT is set to __attribute__((always_inline)). -# If no, _RESULT is set to empty value. -# -# Copyright Benoit Jacob 2007 -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file in -# kdelibs/cmake/modules. - -INCLUDE(CheckCXXSourceCompiles) - -MACRO (CHECK_ALWAYS_INLINE _RESULT) - -SET(_CHECK_attribute_always_inline_SRC " - -#ifdef __GNUC__ -# define ALL_IS_WELL -#endif - -#ifdef __INTEL_COMPILER -# if (__INTEL_COMPILER == 800) || (__INTEL_COMPILER > 800) -# define ALL_IS_WELL -# endif -#endif - -#ifndef ALL_IS_WELL -# error I guess your compiler doesn't support __attribute__((always_inline)) -#endif - -int main(int argc, char *argv[]) { return 0; } -") - -CHECK_CXX_SOURCE_COMPILES("${_CHECK_attribute_always_inline_SRC}" - HAVE_attribute_always_inline) -IF(HAVE_attribute_always_inline) - SET(${_RESULT} "__attribute__((always_inline))") -ELSE(HAVE_attribute_always_inline) - SET(${_RESULT} ) # attribute always_inline unsupported -ENDIF(HAVE_attribute_always_inline) - -ENDMACRO (CHECK_ALWAYS_INLINE) diff --git a/cmake/modules/CheckRestrictKeyword.cmake b/cmake/modules/CheckRestrictKeyword.cmake deleted file mode 100644 index d3fcbda90..000000000 --- a/cmake/modules/CheckRestrictKeyword.cmake +++ /dev/null @@ -1,87 +0,0 @@ -# This module checks if the C++ compiler supports the restrict keyword or -# some variant of it. The following variants are checked for in that order: -# 1. restrict (The standard C99 keyword, not yet in C++ standard) -# 2. __restrict (G++ has it) -# 3. __restrict__ (G++ has it too) -# 4. _Restrict (seems to be used by Sun's compiler) -# These four cases seem to cover all existing variants; however some C++ -# compilers don't support any variant, in which case the _RESULT variable is -# set to empty value. -# -# Copyright Benoit Jacob 2007 -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file in -# kdelibs/cmake/modules. - -INCLUDE(CheckCXXSourceCompiles) - -MACRO (CHECK_RESTRICT_KEYWORD _RESULT) - -SET(_CHECK_restrict_KEYWORD_SRC " - -char f( const char * restrict x ) -{ - return *x; -} - -int main(int argc, char *argv[]) { return 0; } -") - -SET(_CHECK___restrict_KEYWORD_SRC " - -char f( const char * __restrict x ) -{ - return *x; -} - -int main(int argc, char *argv[]) { return 0; } -") - -SET(_CHECK___restrict___KEYWORD_SRC " - -char f( const char * __restrict__ x ) -{ - return *x; -} - -int main(int argc, char *argv[]) { return 0; } -") - -SET(_CHECK__Restrict_KEYWORD_SRC " - -char f( const char * _Restrict x ) -{ - return *x; -} - -int main(int argc, char *argv[]) { return 0; } -") - -CHECK_CXX_SOURCE_COMPILES("${_CHECK_restrict_KEYWORD_SRC}" - HAVE_KEYWORD_restrict) -IF(HAVE_KEYWORD_restrict) - SET(${_RESULT} restrict) -ELSE(HAVE_KEYWORD_restrict) - CHECK_CXX_SOURCE_COMPILES("${_CHECK___restrict_KEYWORD_SRC}" - HAVE_KEYWORD___restrict) - IF(HAVE_KEYWORD___restrict) - SET(${_RESULT} __restrict) - ELSE(HAVE_KEYWORD___restrict) - CHECK_CXX_SOURCE_COMPILES("${_CHECK___restrict___KEYWORD_SRC}" - HAVE_KEYWORD___restrict__) - IF(HAVE_KEYWORD___restrict__) - SET(${_RESULT} __restrict__) - ELSE(HAVE_KEYWORD___restrict__) - CHECK_CXX_SOURCE_COMPILES("${_CHECK__Restrict_KEYWORD_SRC}" - HAVE_KEYWORD__Restrict) - IF(HAVE_KEYWORD__Restrict) - SET(${_RESULT} _Restrict) - ELSE(HAVE_KEYWORD__Restrict) - SET(${_RESULT} ) # no variant of restrict keyword supported - ENDIF(HAVE_KEYWORD__Restrict) - ENDIF(HAVE_KEYWORD___restrict__) - ENDIF(HAVE_KEYWORD___restrict) -ENDIF(HAVE_KEYWORD_restrict) - -ENDMACRO (CHECK_RESTRICT_KEYWORD) diff --git a/tvmet-1.7.1/AUTHORS b/tvmet-1.7.1/AUTHORS deleted file mode 100644 index 726223309..000000000 --- a/tvmet-1.7.1/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Olaf Petzold diff --git a/tvmet-1.7.1/CMakeLists.txt b/tvmet-1.7.1/CMakeLists.txt deleted file mode 100644 index de32e4420..000000000 --- a/tvmet-1.7.1/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -ADD_SUBDIRECTORY(include) -ADD_SUBDIRECTORY(testsuite) \ No newline at end of file diff --git a/tvmet-1.7.1/COPYING b/tvmet-1.7.1/COPYING deleted file mode 100644 index b1e3f5a26..000000000 --- a/tvmet-1.7.1/COPYING +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/tvmet-1.7.1/INSTALL b/tvmet-1.7.1/INSTALL deleted file mode 100644 index 54caf7c19..000000000 --- a/tvmet-1.7.1/INSTALL +++ /dev/null @@ -1,229 +0,0 @@ -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software -Foundation, Inc. - - This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the `--target=TYPE' option to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -will cause the specified gcc to be used as the C compiler (unless it is -overridden in the site shell script). - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/tvmet-1.7.1/LICENSE b/tvmet-1.7.1/LICENSE deleted file mode 100644 index c29dde6d3..000000000 --- a/tvmet-1.7.1/LICENSE +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - ADDENDUM TO LICENSE - Februar 2003 - - Copyright (C) 2003 Olaf Petzold - - Everyone is permitted to copy and distribute verbatim copies - of this license addendum document, but changing it is not allowed. - - -tvmet License Agreement. - - -0. tvmet ("The Library") is licensed under GNU Lesser General Public License -as published by the Free Software Foundation, version 2.1 of the License, or -(at your option) any later version, with the following additional conditions. -The following conditions take precedence over any conditions or restrictions -stipulated by the Lesser General Public License insofar as a conflict exists. - -1. The tvmet License Agreement ("License") covers only tvmet ("The Library"). -Other libraries which the Library may use are covered by their own respective -licenses. - -2. Modification of the configure scripts, makefiles, or installation tools of -the Library to support a specific platform does not constitute creating a -modified or derivative work based on the Library. - -3. Statically linking of a copy of the Library against any work using the -Library, i.e. the inclusion of (parts of) the Library into a program or binary, -is functionally equivalent to a work using the Library by linking to it -dynamically, and therefore does not constitute creating a modified or derivative -work based on the Library. - -4. Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of the GNU Lesser General Public -License. Any executables containing that work also may be distributed under -the Lesser General Public License whether or not they are linked directly with -the Library itself. - -5. Programs or binaries linked with the Library must be identified as such by -including, in the Documentation or by other means (for example in the About -Box or Online Help), the following statement: - -"This software uses tvmet (http://tvmet.sourceforge.net)." - - - - - END OF ADDENDUM diff --git a/tvmet-1.7.1/NEWS b/tvmet-1.7.1/NEWS deleted file mode 100644 index 0216d9c9b..000000000 --- a/tvmet-1.7.1/NEWS +++ /dev/null @@ -1,190 +0,0 @@ -* release 1.7.1 - -- major and minor bug fix release. -- element wise operations on non square matrix expressions. - does work as expected now. -- tvmet compiles with gcc 3.4.3. -- extended docs. -- new regression tests. - -* release 1.7.0 - -- support for Microsoft VC++ 7.1 -- several critical bug fixes. -- docs enhanced and corrected; new chapter for VC++ 7.1. -- conj for signed types disabled, since an unary minus operator - applied to unsigned type will result unsigned type. -- drem, hypot, jn, yn, cbrt and rint are inside the global namespace - now. -- some fixes for Makefile on creating pdf documentation. -- header depencies limited. - -* release 1.6.0 - -- major bug fix: tvmet did crash on zero matrix print (introduced - with release 1.5.0, there was only a patch available). -- corrected and extended docs. -- new regressions added for traits. -- some compiler specific optimizations for gcc and icc - (compatibility mode) introduced, use it by defined TVMET_OPTIMIZE. - This uses the gcc's __attribute__((always_inline)) wrapped by a - macro - this allows to produce high optimized and inline code - even on lower optimization levels, e.g. -O. This is enabled by - configure process by --enable-optimize. -- For pgCC 5.1 the TVMET_HAVE_LONG_DOUBLE has been disabled, since - the support is incomplete imo. For icc some pragma are used - to avoid warnings about 'operands are evaluated in unspecified - order' since it concerns ostream printing only. -- traits prepared to be an entry point of several functions - used in the feature. -- new functions c{matrix,vector}_ref to handle C style vectors - and arrays as expressions - using inside the tvmet Matrix/Vector - expressions as usual. -- tvmet's syntax/naming convention more cleaner, code should be - more readable now. Further more unused template parameter has - been removed. -- new function identity<>() to create identity matrices. -- some cosmetic changes. - -* release 1.5.0 - -- the build process is more compliant to the GNU standard. -- alias function extended. -- Matrix and Vector data printing improved, gives better output - even by negative values/contents. -- configure script supports different compiler better; users - can specify --enable-optimize, --enable-debug and - --enable-warnings for their needs. -- the configure and build process has been improved generally; - tvmet can be build in a separate build directory and passes - the distcheck target successfully. - -* release 1.4.1 - -- new function alias to solve the aliasing problem. -- major bug fix: forgotten header tvmet/loop/Vector.h added - and benchmark shows AtA and AAt graph with matrices - less than 10x10 too - the BTL patch is updated. - -* release 1.4.0 - -- major and minor bug fixes -- Matrix/Vector and XprMatrix/XprVector uses an assign_to() - function - this could be a way for pre-evaluate/caching - nodes of the sub expressions for further releases. -- an alternate way of computing matrix-matrix and matrix-vector - products added: using meta templates or loops. Therefore some - trigger are introduced which are not tuned yet. Using - matrix-matrix products less than Rows*Cols 8*8 or - matrix-vector products less than Sz=8 uses meta templates - else loops. -- regression tests added for loop products, as well as bugs - fixed. -- enums Rows, Cols and Size for Matrix and Vector are - introduced. -- expression level printing improved - more info's are shown -- output format has been changed, the output is compatible - to octave/matlab. To get the type and size info as before - a new member function info() has been introduced which can - be streamed to ostreams. -- improved data printing, aligns output regarding of maximum - element. -- different members for expression and data printing. -- BTL benchmark results added. - -* release 1.3.0 - -- major and minor bug fixes - all users should update ! -- RVO problem/bug removed, chaining/composed expressions are - working now. The problem was related on use of temporaries - on composed functions, which gone out of scope. -- sources compiled without optimizations, by -O0, doesn't crash - any more. The Problem was related by holding expressions by - references instead by value. At higher optimization levels - there were no faults than. -- better english documentation (spelling and grammar) as well - some corrections and extensions. -- benchmark removed from sources. -- interface changes. -- prodTrans renamed to trans_prod to follow the naming convention -- boolean version of eval removed to avoid confusion, comparing - is done using all_elements and any_elements. -- support for complex<> slightly improved. - -* release 1.2.1 - -- major and minor bug fixes. -- corrected and extended docs. -- tvmet's const correctness improved. - -* release 1.2.0 - -- major and minor bug fixes -- better gcc 2.95.3 support but, still problems -- function naming convention from product to prod, transpose - to trans etc. changed. -- new functions add,sub,mul and div on element wise functions. -- expressions used for row/col and diag vectors on matrices, - prevents use of temporaries on expressions for pre-evaluation. -- Vector access using braces () is default on internal use, - brackets [] are still valid and supported. -- better debug support. -- regression test improved and more tests added, especially - on expressions. -- more functions and operators on functions. -- better header file layout. - -* release 1.1.0 - -- major and minor bug fixes -- new meta templated functions for matrix operations for - product(transpose(M), M), product(M, transpose(M)) and - transpose(product(M,M)), namely MtM_product(), MMt_product - as well as productTransposed(). -- productTranspose(M,V) renamed to Mtx_product(). In this - function is a return dimension bug removed (working for non- - square matrices too now). -- Therefore, old productTransposed() functions doesn't have - the old meaning any more! -- a matrix expression can be transposed too. -- new functions and operators for products of expression of - matrices and vectors added - chaining of this should work - now. -- better support for non-square matrices and non-square - matrix-matrix and matrix-vector functions/operations. -- regression test improved and more tests added. -- file and directory structure extended. - -* release 1.0.1: - -- minor bug fixes - -* release 1.0.0: - -- corrected and improved documents -- new product(XprMatrix, Vector) and operator*(XprMatrix, Vector) - as well as product(XprMatrix<>, XprVector<>), -- more regression tests -- better intel compiler support -- extended include directory structure - -* release 0.9.0: - -- the benchmark is delayed. -- new function product(XprMatrix<>,XprMatrix<>) and operator* - (XprMatrix<>,XprMatrix<>), therefore concating of mathematical - expressions are better supported now. -- Addendum to the LGPL, static linking is explicit allowed. -- regression tests for element wise operations added. -- docs FAQ enhanced. -- new function diag(Matrix<>) added. -- autoconf 2.5x ready. -- default distribution is tar.bz2 now. -- tvmet-doc-xxx.prm target removed, docs are inside the rpm - package self. - - - - - -%%% Local IspellDict: "english" diff --git a/tvmet-1.7.1/README b/tvmet-1.7.1/README deleted file mode 100644 index f26f71ae7..000000000 --- a/tvmet-1.7.1/README +++ /dev/null @@ -1,9 +0,0 @@ -This tiny vector and matrix template libary uses meta templates and -template expressions to evaluate results at compile time - to make -it fast for low order systems. Temporaries are kicked off. - -Nevertheless, this isn't a matlab or octave in C++! - -For more informations please have a look into docs/html/ or to the -project web page at http://tvmet.sourceforge.net - diff --git a/tvmet-1.7.1/THANKS b/tvmet-1.7.1/THANKS deleted file mode 100644 index dffebb116..000000000 --- a/tvmet-1.7.1/THANKS +++ /dev/null @@ -1,49 +0,0 @@ -Thanks to: - -- Alexei Sheplyakov reported a bug inside the matrix expressions - using elementwise operations and others. - -- Robi Carnecky for his report on success using MS VC 7.1 and - reporting missing typename keyword inside CommaInitializer.h - and others. - -- Krzysiek Goj found a bug inside the swap functions and - reported problems on calling functions in wrong namespace. - -- Claudia Bertram for reporting a bug by printing a zero - elements matrix. - -- Julian Cummings for his help on supporting complex types and - some other comments on tvmet. - -- Alex V. Frolov found inconsistens on typepromotion used. - -- David J. C. Beach, thanks! He checked the grammar and spelling - of tvmet's documents. Further more, he gave me hints for - any/all_elements and eval. - -- David Sarrut for correction on the matrix column access bug. - -- Holger Spiess, for his testing on real application (FEM), reporting - problems and conversations. - -- Erik Kruus, he found a bug inside tvmet.m4. - -- George Schnurer for his suggestions and help concerning the licensing - and the need to an addendum to it. - -- Laurent Plagne, the author of the BTL, for his testing and comparing - tvmet against other libs and others. - -- Jörg Walter about using uBlas faster assuming alias free operations. - Further more for his great conversation about benchmarking and others, - thanks! - -- Jörg Barfurth from de.compl.lang.iso-c++ for his help on instance - problems with templates occoured on regressions test. - -- Michael Kochetkov and Tom from comp.lang.c++ for help on namespace - problems. Now I know more about Koenig lookup and the problems due - too 8) - -- Darin DeForest, he found a nasty bug inside the regression tests. diff --git a/tvmet-1.7.1/benchmark/BTL-20030124.patch b/tvmet-1.7.1/benchmark/BTL-20030124.patch deleted file mode 100644 index 2488198c2..000000000 --- a/tvmet-1.7.1/benchmark/BTL-20030124.patch +++ /dev/null @@ -1,3887 +0,0 @@ -diff -Nur BTL-20030124/actions/action_aat_product.hh BTL/actions/action_aat_product.hh ---- BTL-20030124/actions/action_aat_product.hh 2002-12-02 14:57:49.000000000 +0100 -+++ BTL/actions/action_aat_product.hh 2003-11-12 19:06:26.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : action_aat_product.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef ACTION_AAT_PRODUCT - #define ACTION_AAT_PRODUCT - #include "utilities.h" -@@ -26,103 +26,39 @@ - #include "init/init_vector.hh" - #include "init/init_matrix.hh" - --using namespace std; -- - template --class Action_aat_product { -+class Action_aat_product -+{ -+ Action_aat_product(const Action_aat_product &); - - public : -- - // Ctor -- -- Action_aat_product( int size ):_size(size) -- { -- MESSAGE("Action_aat_product Ctor"); -- -- // STL matrix and vector initialization -- -- init_matrix(A_stl,_size); -- init_matrix(X_stl,_size); -- init_matrix(resu_stl,_size); -- -- // generic matrix and vector initialization -- -- Interface::matrix_from_stl(A_ref,A_stl); -- Interface::matrix_from_stl(X_ref,X_stl); -- -- Interface::matrix_from_stl(A,A_stl); -- Interface::matrix_from_stl(X,X_stl); -- -- } -- -- // invalidate copy ctor -- -- Action_aat_product( const Action_aat_product & ) -- { -- INFOS("illegal call to Action_aat_product Copy Ctor"); -- exit(0); -- } -+ Action_aat_product(int size); - - // Dtor -+ ~Action_aat_product(); - -- ~Action_aat_product( void ){ -- -- MESSAGE("Action_aat_product Dtor"); -- -- // deallocation -- -- Interface::free_matrix(A,_size); -- Interface::free_matrix(X,_size); -- -- Interface::free_matrix(A_ref,_size); -- Interface::free_matrix(X_ref,_size); -- -- } -- - // action name -- -- static inline std::string name( void ) -- { -- return "aat_"+Interface::name(); -+ static inline std::string name() { -+ return "aat_" + Interface::name(); - } - -- double nb_op_base( void ){ -+ double nb_op_base() { - return 2.0*_size*_size*_size; - } - -- inline void initialize( void ){ -- -+ void initialize() { - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_matrix(X_ref,X,_size); -- - } - -- inline void calculate( void ) { -- -- Interface::aat_product(A,X,_size); -- -+ void calculate( void ) { -+ Interface::aat_product(A,X,_size); - } - -- void check_result( void ){ -- -- // calculation check -- -- Interface::matrix_to_stl(X,resu_stl); -- -- STL_interface::aat_product(A_stl,X_stl,_size); -- -- typename Interface::real_type error= -- STL_interface::norm_diff(X_stl,resu_stl); -- -- if (error>1.e-6){ -- INFOS("WRONG CALCULATION...residual=" << error); -- exit(0); -- } -- -- } -- --private : -+ void check_result(); - -+private : - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix resu_stl; -@@ -133,13 +69,61 @@ - typename Interface::gene_matrix A; - typename Interface::gene_matrix X; - -- - int _size; -- - }; -- - --#endif - -+/* -+ * Implementation -+ */ -+template -+Action_aat_product::Action_aat_product(int size) -+ : _size(size) -+{ -+ MESSAGE("Action_aat_product Ctor"); -+ -+ // STL matrix and vector initialization -+ init_matrix(A_stl,_size); -+ init_matrix(X_stl,_size); -+ init_matrix(resu_stl,_size); -+ -+ // generic matrix and vector initialization -+ Interface::matrix_from_stl(A_ref,A_stl); -+ Interface::matrix_from_stl(X_ref,X_stl); -+ -+ Interface::matrix_from_stl(A,A_stl); -+ Interface::matrix_from_stl(X,X_stl); -+} -+ -+template -+Action_aat_product::~Action_aat_product() -+{ -+ MESSAGE("Action_aat_product Dtor"); -+ -+ // deallocation -+ Interface::free_matrix(A,_size); -+ Interface::free_matrix(X,_size); -+ -+ Interface::free_matrix(A_ref,_size); -+ Interface::free_matrix(X_ref,_size); -+} -+ -+template -+void Action_aat_product::check_result() -+{ -+ // calculation check -+ -+ Interface::matrix_to_stl(X,resu_stl); - -+ STL_interface::aat_product(A_stl,X_stl,_size); - -+ typename Interface::real_type error= -+ STL_interface::norm_diff(X_stl,resu_stl); -+ -+ if (error>1.e-6){ -+ INFOS("WRONG CALCULATION...residual=" << error); -+ exit(0); -+ } -+} -+ -+#endif -diff -Nur BTL-20030124/actions/action_ata_product.hh BTL/actions/action_ata_product.hh ---- BTL-20030124/actions/action_ata_product.hh 2002-12-02 14:58:14.000000000 +0100 -+++ BTL/actions/action_ata_product.hh 2003-11-12 19:13:07.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : action_ata_product.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef ACTION_ATA_PRODUCT - #define ACTION_ATA_PRODUCT - #include "utilities.h" -@@ -26,103 +26,39 @@ - #include "init/init_vector.hh" - #include "init/init_matrix.hh" - --using namespace std; -- - template --class Action_ata_product { -+class Action_ata_product -+{ -+ Action_ata_product(const Action_ata_product &); - - public : -- - // Ctor -- -- Action_ata_product( int size ):_size(size) -- { -- MESSAGE("Action_ata_product Ctor"); -- -- // STL matrix and vector initialization -- -- init_matrix(A_stl,_size); -- init_matrix(X_stl,_size); -- init_matrix(resu_stl,_size); -- -- // generic matrix and vector initialization -- -- Interface::matrix_from_stl(A_ref,A_stl); -- Interface::matrix_from_stl(X_ref,X_stl); -- -- Interface::matrix_from_stl(A,A_stl); -- Interface::matrix_from_stl(X,X_stl); -- -- } -- -- // invalidate copy ctor -- -- Action_ata_product( const Action_ata_product & ) -- { -- INFOS("illegal call to Action_ata_product Copy Ctor"); -- exit(0); -- } -+ Action_ata_product(int size); - - // Dtor -+ ~Action_ata_product(); - -- ~Action_ata_product( void ){ -- -- MESSAGE("Action_ata_product Dtor"); -- -- // deallocation -- -- Interface::free_matrix(A,_size); -- Interface::free_matrix(X,_size); -- -- Interface::free_matrix(A_ref,_size); -- Interface::free_matrix(X_ref,_size); -- -- } -- - // action name -- -- static inline std::string name( void ) -- { -- return "ata_"+Interface::name(); -+ static inline std::string name() { -+ return "ata_" + Interface::name(); - } - -- double nb_op_base( void ){ -+ double nb_op_base() { - return 2.0*_size*_size*_size; - } - -- inline void initialize( void ){ -- -+ void initialize() { - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_matrix(X_ref,X,_size); -- - } - - inline void calculate( void ) { -- -- Interface::ata_product(A,X,_size); -- -+ Interface::ata_product(A,X,_size); - } - -- void check_result( void ){ -- -- // calculation check -- -- Interface::matrix_to_stl(X,resu_stl); -- -- STL_interface::ata_product(A_stl,X_stl,_size); -- -- typename Interface::real_type error= -- STL_interface::norm_diff(X_stl,resu_stl); -- -- if (error>1.e-6){ -- INFOS("WRONG CALCULATION...residual=" << error); -- exit(0); -- } -- -- } -- --private : -+ void check_result(); - -+private : - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix resu_stl; -@@ -133,13 +69,60 @@ - typename Interface::gene_matrix A; - typename Interface::gene_matrix X; - -- - int _size; -- - }; -- - --#endif - -+/* -+ * Implementation -+ */ -+template -+Action_ata_product::Action_ata_product(int size) -+ : _size(size) -+{ -+ MESSAGE("Action_ata_product Ctor"); -+ -+ // STL matrix and vector initialization -+ init_matrix(A_stl,_size); -+ init_matrix(X_stl,_size); -+ init_matrix(resu_stl,_size); -+ -+ // generic matrix and vector initialization -+ Interface::matrix_from_stl(A_ref,A_stl); -+ Interface::matrix_from_stl(X_ref,X_stl); -+ -+ Interface::matrix_from_stl(A,A_stl); -+ Interface::matrix_from_stl(X,X_stl); -+} -+ -+template -+Action_ata_product::~Action_ata_product() -+{ -+ MESSAGE("Action_ata_product Dtor"); -+ -+ // deallocation -+ Interface::free_matrix(A,_size); -+ Interface::free_matrix(X,_size); -+ -+ Interface::free_matrix(A_ref,_size); -+ Interface::free_matrix(X_ref,_size); -+} -+ -+template -+void Action_ata_product::check_result() -+{ -+ // calculation check -+ Interface::matrix_to_stl(X,resu_stl); - -+ STL_interface::ata_product(A_stl,X_stl,_size); - -+ typename Interface::real_type error= -+ STL_interface::norm_diff(X_stl,resu_stl); -+ -+ if (error>1.e-6){ -+ INFOS("WRONG CALCULATION...residual=" << error); -+ exit(0); -+ } -+} -+ -+#endif -diff -Nur BTL-20030124/actions/action_axpy.hh BTL/actions/action_axpy.hh ---- BTL-20030124/actions/action_axpy.hh 2003-01-08 11:11:35.000000000 +0100 -+++ BTL/actions/action_axpy.hh 2003-11-12 19:07:44.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : action_axpy.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef ACTION_AXPY - #define ACTION_AXPY - #include "utilities.h" -@@ -26,106 +26,39 @@ - #include "init/init_vector.hh" - #include "init/init_matrix.hh" - --using namespace std; -- - template --class Action_axpy { -- --public : -+class Action_axpy -+{ -+ Action_axpy(const Action_axpy &); - -+public: - // Ctor -- -- Action_axpy( int size ):_size(size),_coef(1.0) -- { -- MESSAGE("Action_axpy Ctor"); -- -- // STL vector initialization -- -- init_vector(X_stl,_size); -- init_vector(Y_stl,_size); -- init_vector(resu_stl,_size); -- -- // generic matrix and vector initialization -- -- Interface::vector_from_stl(X_ref,X_stl); -- Interface::vector_from_stl(Y_ref,Y_stl); -- -- Interface::vector_from_stl(X,X_stl); -- Interface::vector_from_stl(Y,Y_stl); -- -- -- } -- -- // invalidate copy ctor -- -- Action_axpy( const Action_axpy & ) -- { -- INFOS("illegal call to Action_axpy Copy Ctor"); -- exit(0); -- } -+ Action_axpy(int size); - - // Dtor -+ ~Action_axpy(); - -- ~Action_axpy( void ){ -- -- MESSAGE("Action_axpy Dtor"); -- -- // deallocation -- -- Interface::free_vector(X_ref); -- Interface::free_vector(Y_ref); -- -- Interface::free_vector(X); -- Interface::free_vector(Y); -- -- -- } -- - // action name -- -- static inline std::string name( void ) -- { -- return "axpy_"+Interface::name(); -+ static inline std::string name() { -+ return "axpy_" + Interface::name(); - } - -- double nb_op_base( void ){ -+ double nb_op_base() { - return 2.0*_size; - } - -- inline void initialize( void ){ -- -+ void initialize() { - Interface::copy_vector(X_ref,X,_size); - Interface::copy_vector(Y_ref,Y,_size); -- - } - -- inline void calculate( void ) { -- -- Interface::axpy(_coef,X,Y,_size); -- -+ void calculate() { -+ Interface::axpy(_coef,X,Y,_size); - } - -+ void check_result(); - -- void check_result( void ){ -- -- // calculation check -- -- Interface::vector_to_stl(Y,resu_stl); -- -- STL_interface::axpy(_coef,X_stl,Y_stl,_size); -- -- typename Interface::real_type error= -- STL_interface::norm_diff(Y_stl,resu_stl); -- -- if (error>1.e-6){ -- INFOS("WRONG CALCULATION...residual=" << error); -- exit(0); -- } -- -- } -- --private : -- -+private : - typename Interface::stl_vector X_stl; - typename Interface::stl_vector Y_stl; - typename Interface::stl_vector resu_stl; -@@ -139,13 +72,59 @@ - typename Interface::real_type _coef; - - int _size; -+}; - -- - --}; -- -+/* -+ * Implementation -+ */ -+template -+Action_axpy::Action_axpy(int size) -+ : _coef(1.0), _size(size) -+{ -+ MESSAGE("Action_axpy Ctor"); -+ -+ // STL vector initialization -+ init_vector(X_stl,_size); -+ init_vector(Y_stl,_size); -+ init_vector(resu_stl,_size); -+ -+ // generic matrix and vector initialization -+ Interface::vector_from_stl(X_ref,X_stl); -+ Interface::vector_from_stl(Y_ref,Y_stl); -+ -+ Interface::vector_from_stl(X,X_stl); -+ Interface::vector_from_stl(Y,Y_stl); -+} - --#endif -+template -+Action_axpy::~Action_axpy() -+{ -+ MESSAGE("Action_axpy Dtor"); -+ -+ // deallocation -+ Interface::free_vector(X_ref); -+ Interface::free_vector(Y_ref); -+ -+ Interface::free_vector(X); -+ Interface::free_vector(Y); -+} -+ -+template -+void Action_axpy::check_result() -+{ -+ // calculation check -+ Interface::vector_to_stl(Y,resu_stl); - -+ STL_interface::axpy(_coef,X_stl,Y_stl,_size); - -+ typename Interface::real_type error= -+ STL_interface::norm_diff(Y_stl,resu_stl); - -+ if (error>1.e-6){ -+ INFOS("WRONG CALCULATION...residual=" << error); -+ exit(0); -+ } -+} -+ -+#endif -diff -Nur BTL-20030124/actions/action_matrix_matrix_product.hh BTL/actions/action_matrix_matrix_product.hh ---- BTL-20030124/actions/action_matrix_matrix_product.hh 2002-12-02 14:57:27.000000000 +0100 -+++ BTL/actions/action_matrix_matrix_product.hh 2003-11-12 19:49:11.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : action_matrix_matrix_product.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef ACTION_MATRIX_MATRIX_PRODUCT - #define ACTION_MATRIX_MATRIX_PRODUCT - #include "utilities.h" -@@ -26,109 +26,40 @@ - #include "init/init_vector.hh" - #include "init/init_matrix.hh" - --using namespace std; -- - template --class Action_matrix_matrix_product { -- --public : -+class Action_matrix_matrix_product -+{ -+ Action_matrix_matrix_product(const Action_matrix_matrix_product &); - -+public: - // Ctor -- -- Action_matrix_matrix_product( int size ):_size(size) -- { -- MESSAGE("Action_matrix_matrix_product Ctor"); -- -- // STL matrix and vector initialization -- -- init_matrix(A_stl,_size); -- init_matrix(B_stl,_size); -- init_matrix(X_stl,_size); -- init_matrix(resu_stl,_size); -- -- // generic matrix and vector initialization -- -- Interface::matrix_from_stl(A_ref,A_stl); -- Interface::matrix_from_stl(B_ref,B_stl); -- Interface::matrix_from_stl(X_ref,X_stl); -- -- Interface::matrix_from_stl(A,A_stl); -- Interface::matrix_from_stl(B,B_stl); -- Interface::matrix_from_stl(X,X_stl); -- -- } -- -- // invalidate copy ctor -- -- Action_matrix_matrix_product( const Action_matrix_matrix_product & ) -- { -- INFOS("illegal call to Action_matrix_matrix_product Copy Ctor"); -- exit(0); -- } -+ Action_matrix_matrix_product(int size); - - // Dtor -+ ~Action_matrix_matrix_product(); - -- ~Action_matrix_matrix_product( void ){ -- -- MESSAGE("Action_matrix_matrix_product Dtor"); -- -- // deallocation -- -- Interface::free_matrix(A,_size); -- Interface::free_matrix(B,_size); -- Interface::free_matrix(X,_size); -- -- Interface::free_matrix(A_ref,_size); -- Interface::free_matrix(B_ref,_size); -- Interface::free_matrix(X_ref,_size); -- -- } -- - // action name -- -- static inline std::string name( void ) -- { -- return "matrix_matrix_"+Interface::name(); -+ static inline std::string name() { -+ return "matrix_matrix_" + Interface::name(); - } - -- double nb_op_base( void ){ -+ double nb_op_base() { - return 2.0*_size*_size*_size; - } - -- inline void initialize( void ){ -- -+ void initialize() { - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_matrix(B_ref,B,_size); - Interface::copy_matrix(X_ref,X,_size); -- - } - -- inline void calculate( void ) { -- -- Interface::matrix_matrix_product(A,B,X,_size); -- -+ inline void calculate() { -+ Interface::matrix_matrix_product(A,B,X,_size); - } - -- void check_result( void ){ -- -- // calculation check -- -- Interface::matrix_to_stl(X,resu_stl); -- -- STL_interface::matrix_matrix_product(A_stl,B_stl,X_stl,_size); -- -- typename Interface::real_type error= -- STL_interface::norm_diff(X_stl,resu_stl); -- -- if (error>1.e-6){ -- INFOS("WRONG CALCULATION...residual=" << error); -- exit(0); -- } -- -- } -- --private : -+ void check_result(); - -+private : - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix B_stl; - typename Interface::stl_matrix X_stl; -@@ -142,13 +73,66 @@ - typename Interface::gene_matrix B; - typename Interface::gene_matrix X; - -- - int _size; -- - }; -- - --#endif - -+/* -+ * Implementation -+ */ -+template -+Action_matrix_matrix_product::Action_matrix_matrix_product(int size) -+ : _size(size) -+{ -+ MESSAGE("Action_matrix_matrix_product Ctor"); -+ -+ // STL matrix and vector initialization -+ init_matrix(A_stl,_size); -+ init_matrix(B_stl,_size); -+ init_matrix(X_stl,_size); -+ init_matrix(resu_stl,_size); -+ -+ // generic matrix and vector initialization -+ Interface::matrix_from_stl(A_ref,A_stl); -+ Interface::matrix_from_stl(B_ref,B_stl); -+ Interface::matrix_from_stl(X_ref,X_stl); -+ -+ Interface::matrix_from_stl(A,A_stl); -+ Interface::matrix_from_stl(B,B_stl); -+ Interface::matrix_from_stl(X,X_stl); -+} - -+template -+Action_matrix_matrix_product::~Action_matrix_matrix_product() -+{ -+ MESSAGE("Action_matrix_matrix_product Dtor"); -+ -+ // deallocation -+ Interface::free_matrix(A,_size); -+ Interface::free_matrix(B,_size); -+ Interface::free_matrix(X,_size); -+ -+ Interface::free_matrix(A_ref,_size); -+ Interface::free_matrix(B_ref,_size); -+ Interface::free_matrix(X_ref,_size); - -+} -+ -+template -+void Action_matrix_matrix_product::check_result() -+{ -+ // calculation check -+ Interface::matrix_to_stl(X,resu_stl); -+ -+ STL_interface::matrix_matrix_product(A_stl,B_stl,X_stl,_size); -+ -+ typename Interface::real_type error= -+ STL_interface::norm_diff(X_stl,resu_stl); -+ -+ if (error>1.e-6){ -+ INFOS("WRONG CALCULATION...residual=" << error); -+ exit(0); -+ } -+} -+ -+#endif -diff -Nur BTL-20030124/actions/action_matrix_vector_product.hh BTL/actions/action_matrix_vector_product.hh ---- BTL-20030124/actions/action_matrix_vector_product.hh 2002-12-02 14:58:57.000000000 +0100 -+++ BTL/actions/action_matrix_vector_product.hh 2003-11-12 19:08:45.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : action_matrix_vector_product.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef ACTION_MATRIX_VECTOR_PRODUCT - #define ACTION_MATRIX_VECTOR_PRODUCT - #include "utilities.h" -@@ -26,109 +26,40 @@ - #include "init/init_vector.hh" - #include "init/init_matrix.hh" - --using namespace std; -- - template --class Action_matrix_vector_product { -+class Action_matrix_vector_product -+{ -+ Action_matrix_vector_product(const Action_matrix_vector_product &); - - public : -- - // Ctor -- -- Action_matrix_vector_product( int size ):_size(size) -- { -- MESSAGE("Action_matrix_vector_product Ctor"); -- -- // STL matrix and vector initialization -- -- init_matrix(A_stl,_size); -- init_vector(B_stl,_size); -- init_vector(X_stl,_size); -- init_vector(resu_stl,_size); -- -- // generic matrix and vector initialization -- -- Interface::matrix_from_stl(A_ref,A_stl); -- Interface::vector_from_stl(B_ref,B_stl); -- Interface::vector_from_stl(X_ref,X_stl); -- -- Interface::matrix_from_stl(A,A_stl); -- Interface::vector_from_stl(B,B_stl); -- Interface::vector_from_stl(X,X_stl); -- -- } -- -- // invalidate copy ctor -- -- Action_matrix_vector_product( const Action_matrix_vector_product & ) -- { -- INFOS("illegal call to Action_matrix_vector_product Copy Ctor"); -- exit(0); -- } -+ Action_matrix_vector_product(int size); - - // Dtor -+ ~Action_matrix_vector_product(); - -- ~Action_matrix_vector_product( void ){ -- -- MESSAGE("Action_matrix_vector_product Dtor"); -- -- // deallocation -- -- Interface::free_matrix(A,_size); -- Interface::free_vector(B); -- Interface::free_vector(X); -- -- Interface::free_matrix(A_ref,_size); -- Interface::free_vector(B_ref); -- Interface::free_vector(X_ref); -- -- } -- - // action name -- -- static inline std::string name( void ) -- { -- return "matrix_vector_"+Interface::name(); -+ static inline std::string name() { -+ return "matrix_vector_" + Interface::name(); - } - -- double nb_op_base( void ){ -+ double nb_op_base(){ - return 2.0*_size*_size; - } - -- inline void initialize( void ){ -- -+ void initialize() { - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_vector(B_ref,B,_size); - Interface::copy_vector(X_ref,X,_size); -- -- } -- -- inline void calculate( void ) { -- -- Interface::matrix_vector_product(A,B,X,_size); -- - } - -- void check_result( void ){ -- -- // calculation check -- -- Interface::vector_to_stl(X,resu_stl); -- -- STL_interface::matrix_vector_product(A_stl,B_stl,X_stl,_size); -- -- typename Interface::real_type error= -- STL_interface::norm_diff(X_stl,resu_stl); -- -- if (error>1.e-6){ -- INFOS("WRONG CALCULATION...residual=" << error); -- exit(0); -- } -- -+ inline void calculate() { -+ Interface::matrix_vector_product(A,B,X,_size); - } - --private : -+ void check_result(); - -+private: - typename Interface::stl_matrix A_stl; - typename Interface::stl_vector B_stl; - typename Interface::stl_vector X_stl; -@@ -142,13 +73,71 @@ - typename Interface::gene_vector B; - typename Interface::gene_vector X; - -- - int _size; -- - }; -- - --#endif - -+/* -+ * Implementation -+ */ -+template -+Action_matrix_vector_product::Action_matrix_vector_product( int size ) -+ : _size(size) -+{ -+ MESSAGE("Action_matrix_vector_product Ctor"); -+ -+ // STL matrix and vector initialization -+ -+ init_matrix(A_stl,_size); -+ init_vector(B_stl,_size); -+ init_vector(X_stl,_size); -+ init_vector(resu_stl,_size); -+ -+ // generic matrix and vector initialization -+ -+ Interface::matrix_from_stl(A_ref,A_stl); -+ Interface::vector_from_stl(B_ref,B_stl); -+ Interface::vector_from_stl(X_ref,X_stl); -+ -+ Interface::matrix_from_stl(A,A_stl); -+ Interface::vector_from_stl(B,B_stl); -+ Interface::vector_from_stl(X,X_stl); -+ -+} -+ -+template -+Action_matrix_vector_product::~Action_matrix_vector_product() -+{ -+ -+ MESSAGE("Action_matrix_vector_product Dtor"); -+ -+ // deallocation -+ -+ Interface::free_matrix(A,_size); -+ Interface::free_vector(B); -+ Interface::free_vector(X); -+ -+ Interface::free_matrix(A_ref,_size); -+ Interface::free_vector(B_ref); -+ Interface::free_vector(X_ref); -+ -+} -+ -+template -+void Action_matrix_vector_product::check_result() -+{ -+ // calculation check -+ Interface::vector_to_stl(X,resu_stl); -+ -+ STL_interface::matrix_vector_product(A_stl,B_stl,X_stl,_size); -+ -+ typename Interface::real_type error= -+ STL_interface::norm_diff(X_stl,resu_stl); - -+ if (error>1.e-6){ -+ INFOS("WRONG CALCULATION...residual=" << error); -+ exit(0); -+ } -+} - -+#endif -diff -Nur BTL-20030124/data/aat.hh BTL/data/aat.hh ---- BTL-20030124/data/aat.hh 2002-12-04 15:06:08.000000000 +0100 -+++ BTL/data/aat.hh 2003-12-07 19:31:27.000000000 +0100 -@@ -1,21 +1,21 @@ - #!/usr/bin/gnuplot -persist - # --# -+# - # G N U P L O T - # Linux version 3.7 - # patchlevel 0 - # last modified Thu Jan 14 19:34:53 BST 1999 --# -+# - # Copyright(C) 1986 - 1993, 1998, 1999 - # Thomas Williams, Colin Kelley and many others --# -+# - # Type `help` to access the on-line reference manual - # The gnuplot FAQ is available from - # --# -+# - # Send comments and requests for help to - # Send bugs, suggestions and mods to --# -+# - # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14 - # set output 'bench_gcc.ps' - set noclip points -@@ -76,9 +76,9 @@ - set mytics default - set mx2tics default - set my2tics default --set xtics border mirror norotate autofreq --set ytics border mirror norotate autofreq --set ztics border nomirror norotate autofreq -+set xtics border mirror norotate autofreq -+set ytics border mirror norotate autofreq -+set ztics border nomirror norotate autofreq - set nox2tics - set noy2tics - set title "A x At product " 0.000000,0.000000 "" -@@ -104,5 +104,5 @@ - set rmargin -1 - set tmargin -1 - set locale "C" --set xrange [10:1000] -+set xrange [1:100] - ##set yrange [0:400] -diff -Nur BTL-20030124/data/ata.hh BTL/data/ata.hh ---- BTL-20030124/data/ata.hh 2002-12-04 15:06:08.000000000 +0100 -+++ BTL/data/ata.hh 2003-12-07 19:31:36.000000000 +0100 -@@ -1,21 +1,21 @@ - #!/usr/bin/gnuplot -persist - # --# -+# - # G N U P L O T - # Linux version 3.7 - # patchlevel 0 - # last modified Thu Jan 14 19:34:53 BST 1999 --# -+# - # Copyright(C) 1986 - 1993, 1998, 1999 - # Thomas Williams, Colin Kelley and many others --# -+# - # Type `help` to access the on-line reference manual - # The gnuplot FAQ is available from - # --# -+# - # Send comments and requests for help to - # Send bugs, suggestions and mods to --# -+# - # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14 - # set output 'bench_gcc.ps' - set noclip points -@@ -76,9 +76,9 @@ - set mytics default - set mx2tics default - set my2tics default --set xtics border mirror norotate autofreq --set ytics border mirror norotate autofreq --set ztics border nomirror norotate autofreq -+set xtics border mirror norotate autofreq -+set ytics border mirror norotate autofreq -+set ztics border nomirror norotate autofreq - set nox2tics - set noy2tics - set title "At x A product " 0.000000,0.000000 "" -@@ -104,5 +104,5 @@ - set rmargin -1 - set tmargin -1 - set locale "C" --set xrange [10:1000] -+set xrange [1:100] - ##set yrange [0:400] -diff -Nur BTL-20030124/data/axpy.hh BTL/data/axpy.hh ---- BTL-20030124/data/axpy.hh 2003-01-06 11:07:11.000000000 +0100 -+++ BTL/data/axpy.hh 2003-11-15 07:06:46.000000000 +0100 -@@ -1,21 +1,21 @@ - #!/usr/bin/gnuplot -persist - # --# -+# - # G N U P L O T - # Linux version 3.7 - # patchlevel 0 - # last modified Thu Jan 14 19:34:53 BST 1999 --# -+# - # Copyright(C) 1986 - 1993, 1998, 1999 - # Thomas Williams, Colin Kelley and many others --# -+# - # Type `help` to access the on-line reference manual - # The gnuplot FAQ is available from - # --# -+# - # Send comments and requests for help to - # Send bugs, suggestions and mods to --# -+# - # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14 - # set output 'bench_gcc.ps' - set noclip points -@@ -76,9 +76,9 @@ - set mytics default - set mx2tics default - set my2tics default --set xtics border mirror norotate autofreq --set ytics border mirror norotate autofreq --set ztics border nomirror norotate autofreq -+set xtics border mirror norotate autofreq -+set ytics border mirror norotate autofreq -+set ztics border nomirror norotate autofreq - set nox2tics - set noy2tics - set title "Y+=alpha*X " 0.000000,0.000000 "" -@@ -104,5 +104,5 @@ - set rmargin -1 - set tmargin -1 - set locale "C" --set xrange [1:1000000] -+set xrange [1:100] - ##set yrange [0:550] -diff -Nur BTL-20030124/data/matrix_matrix.hh BTL/data/matrix_matrix.hh ---- BTL-20030124/data/matrix_matrix.hh 2003-01-06 11:08:38.000000000 +0100 -+++ BTL/data/matrix_matrix.hh 2003-11-15 07:06:16.000000000 +0100 -@@ -1,21 +1,21 @@ - #!/usr/bin/gnuplot -persist - # --# -+# - # G N U P L O T - # Linux version 3.7 - # patchlevel 0 - # last modified Thu Jan 14 19:34:53 BST 1999 --# -+# - # Copyright(C) 1986 - 1993, 1998, 1999 - # Thomas Williams, Colin Kelley and many others --# -+# - # Type `help` to access the on-line reference manual - # The gnuplot FAQ is available from - # --# -+# - # Send comments and requests for help to - # Send bugs, suggestions and mods to --# -+# - # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14 - # set output 'bench_gcc.ps' - set noclip points -@@ -76,9 +76,9 @@ - set mytics default - set mx2tics default - set my2tics default --set xtics border mirror norotate autofreq --set ytics border mirror norotate autofreq --set ztics border nomirror norotate autofreq -+set xtics border mirror norotate autofreq -+set ytics border mirror norotate autofreq -+set ztics border nomirror norotate autofreq - set nox2tics - set noy2tics - set title "matrix matrix product " 0.000000,0.000000 "" -@@ -104,5 +104,5 @@ - set rmargin -1 - set tmargin -1 - set locale "C" --set xrange [1:1000] -+set xrange [1:100] - ##set yrange [0:400] -diff -Nur BTL-20030124/data/matrix_vector.hh BTL/data/matrix_vector.hh ---- BTL-20030124/data/matrix_vector.hh 2003-01-06 11:08:29.000000000 +0100 -+++ BTL/data/matrix_vector.hh 2003-11-15 07:06:24.000000000 +0100 -@@ -1,21 +1,21 @@ - #!/usr/bin/gnuplot -persist - # --# -+# - # G N U P L O T - # Linux version 3.7 - # patchlevel 0 - # last modified Thu Jan 14 19:34:53 BST 1999 --# -+# - # Copyright(C) 1986 - 1993, 1998, 1999 - # Thomas Williams, Colin Kelley and many others --# -+# - # Type `help` to access the on-line reference manual - # The gnuplot FAQ is available from - # --# -+# - # Send comments and requests for help to - # Send bugs, suggestions and mods to --# -+# - # set terminal postscript landscape noenhanced monochrome dashed defaultplex "Helvetica" 14 - # set output 'bench_gcc.ps' - set noclip points -@@ -76,9 +76,9 @@ - set mytics default - set mx2tics default - set my2tics default --set xtics border mirror norotate autofreq --set ytics border mirror norotate autofreq --set ztics border nomirror norotate autofreq -+set xtics border mirror norotate autofreq -+set ytics border mirror norotate autofreq -+set ztics border nomirror norotate autofreq - set nox2tics - set noy2tics - set title "matrix vector product " 0.000000,0.000000 "" -@@ -104,5 +104,5 @@ - set rmargin -1 - set tmargin -1 - set locale "C" --set xrange [1:1000] -+set xrange [1:100] - ##set yrange [0:400] -diff -Nur BTL-20030124/data/mk_gnuplot_script.sh BTL/data/mk_gnuplot_script.sh ---- BTL-20030124/data/mk_gnuplot_script.sh 2003-01-10 11:52:01.000000000 +0100 -+++ BTL/data/mk_gnuplot_script.sh 2003-11-30 14:56:49.000000000 +0100 -@@ -26,8 +26,8 @@ - BASE=${LAST##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} - echo "'"$LAST"'" title "'"$TITLE"'" >> $WHAT.gnuplot - --#echo set term postscript color >> $WHAT.gnuplot --#echo set output "'"$WHAT.ps"'" >> $WHAT.gnuplot -+echo set term postscript color >> $WHAT.gnuplot -+echo set output "'"$WHAT.ps"'" >> $WHAT.gnuplot - echo set term pbm small color >> $WHAT.gnuplot - echo set output "'"$WHAT.ppm"'" >> $WHAT.gnuplot - echo plot \\ >> $WHAT.gnuplot -@@ -62,7 +62,3 @@ - gnuplot -persist < $WHAT.gnuplot - - rm $WHAT.gnuplot -- -- -- -- -diff -Nur BTL-20030124/data/mk_mean_script.sh BTL/data/mk_mean_script.sh ---- BTL-20030124/data/mk_mean_script.sh 2003-01-21 16:57:53.000000000 +0100 -+++ BTL/data/mk_mean_script.sh 2003-11-30 15:10:01.000000000 +0100 -@@ -10,7 +10,7 @@ - mkdir $WORK_DIR - - DATA_FILE=`find $DIR -name "*.dat" | grep _${WHAT}` --echo -+echo - for FILE in $DATA_FILE - do - ##echo hello world -@@ -19,7 +19,7 @@ - - ##echo "mk_mean_script1" ${TITLE} - cp $FILE ${WORK_DIR}/${TITLE} -- -+ - done - - cd $WORK_DIR -@@ -29,11 +29,3 @@ - cd .. - - rm -R $WORK_DIR -- -- -- -- -- -- -- -- -diff -Nur BTL-20030124/data/mk_new_gnuplot.sh BTL/data/mk_new_gnuplot.sh ---- BTL-20030124/data/mk_new_gnuplot.sh 2003-01-10 12:02:58.000000000 +0100 -+++ BTL/data/mk_new_gnuplot.sh 2003-11-30 15:58:09.000000000 +0100 -@@ -5,6 +5,7 @@ - - DATA_FILE=`cat ../order_lib` - -+echo set grid xtics ytics mxtics mytics >> $WHAT.gnuplot - echo plot \\ >> $WHAT.gnuplot - - for FILE in $DATA_FILE -@@ -12,7 +13,21 @@ - LAST=$FILE - done - -+# GUI plot -+for FILE in $DATA_FILE -+do -+ if [ $FILE != $LAST ] -+ then -+ echo "'"$FILE"'" ",\\" >> $WHAT.gnuplot -+ fi -+done -+echo "'"$LAST"'" >> $WHAT.gnuplot - -+# postscript plot -+echo set size 2,1.412 >> $WHAT.gnuplot -+echo set terminal postscript eps color \"Arial\" 24 >> $WHAT.gnuplot -+echo set output "'"../${DIR}/$WHAT.eps"'" >> $WHAT.gnuplot -+echo plot \\ >> $WHAT.gnuplot - for FILE in $DATA_FILE - do - if [ $FILE != $LAST ] -@@ -22,10 +37,9 @@ - done - echo "'"$LAST"'" >> $WHAT.gnuplot - --echo set term postscript color >> $WHAT.gnuplot --echo set output "'"../${DIR}/$WHAT.ps"'" >> $WHAT.gnuplot --#echo set term pbm color >> $WHAT.gnuplot --#echo set output "'"../${DIR}/$WHAT.ppm"'" >> $WHAT.gnuplot -+# png plot -+echo set terminal png small color >> $WHAT.gnuplot -+echo set output "'"../${DIR}/$WHAT.png"'" >> $WHAT.gnuplot - echo plot \\ >> $WHAT.gnuplot - for FILE in $DATA_FILE - do -@@ -39,7 +53,3 @@ - gnuplot -persist < $WHAT.gnuplot - - rm $WHAT.gnuplot -- -- -- -- -diff -Nur BTL-20030124/data/order_lib BTL/data/order_lib ---- BTL-20030124/data/order_lib 1970-01-01 01:00:00.000000000 +0100 -+++ BTL/data/order_lib 2003-12-07 19:31:44.000000000 +0100 -@@ -0,0 +1,7 @@ -+ATLAS -+C -+ublas -+f77 -+tvmet -+STL -+blitz -diff -Nur BTL-20030124/generic_bench/bench.hh BTL/generic_bench/bench.hh ---- BTL-20030124/generic_bench/bench.hh 2003-03-08 22:40:23.000000000 +0100 -+++ BTL/generic_bench/bench.hh 2003-11-12 19:57:27.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : bench.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:16 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef BENCH_HH - #define BENCH_HH - #include "bench_parameter.hh" -@@ -31,58 +31,47 @@ - //#include "timers/x86_perf_analyzer.hh" - //#include "timers/STL_perf_analyzer.hh" - --using namespace std; -- --template class Perf_Analyzer, class Action> --void bench( int size_min, int size_max, int nb_point ){ -- -- // bench name -- -- string filename="bench_"+Action::name()+".dat"; -+template < -+ template class Perf_Analyzer, -+ class Action -+> -+void bench(int size_min, int size_max, int nb_point) { -+ // bench name -+ std::string filename="bench_" + Action::name() + ".dat"; - - INFOS("starting " < tab_mflops(nb_point); - std::vector tab_sizes(nb_point); - - // matrices and vector size calculations -- -- size_lin_log(nb_point,size_min,size_max,tab_sizes); -+ size_lin_log(nb_point, size_min, size_max, tab_sizes); - - // loop on matrix size -- - Perf_Analyzer perf_action; - -- for (int i=nb_point-1;i>=0;i--){ -- -+ for (int i = nb_point-1; i >= 0; i--) { - INFOS("size=" < --void bench( int size_min, int size_max, int nb_point ){ -+void bench(int size_min, int size_max, int nb_point) { - - // if the rdtsc is not available : -- bench(size_min,size_max,nb_point); -+ bench(size_min, size_max, nb_point); - // if the rdtsc is available : -- // bench(size_min,size_max,nb_point); -- -+ // bench(size_min,size_max,nb_point); - - // Only for small problem size. Otherwize it will be too long -- //bench(size_min,size_max,nb_point); -- //bench(size_min,size_max,nb_point); -- -+ // bench(size_min,size_max,nb_point); -+ // bench(size_min,size_max,nb_point); - } - - #endif -diff -Nur BTL-20030124/generic_bench/bench.hh~ BTL/generic_bench/bench.hh~ ---- BTL-20030124/generic_bench/bench.hh~ 2003-03-13 15:36:19.000000000 +0100 -+++ BTL/generic_bench/bench.hh~ 1970-01-01 01:00:00.000000000 +0100 -@@ -1,88 +0,0 @@ --//===================================================== --// File : bench.hh --// Author : L. Plagne --// Copyright (C) EDF R&D, lun sep 30 14:23:16 CEST 2002 --//===================================================== --// --// This program is free software; you can redistribute it and/or --// modify it under the terms of the GNU General Public License --// as published by the Free Software Foundation; either version 2 --// of the License, or (at your option) any later version. --// --// This program is distributed in the hope that it will be useful, --// but WITHOUT ANY WARRANTY; without even the implied warranty of --// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --// GNU General Public License for more details. --// You should have received a copy of the GNU General Public License --// along with this program; if not, write to the Free Software --// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// --#ifndef BENCH_HH --#define BENCH_HH --#include "bench_parameter.hh" --#include --#include "utilities.h" --#include "size_lin_log.hh" --#include "dump_file_x_y.hh" --#include --#include --#include "timers/portable_perf_analyzer.hh" --#include "timers/mixed_perf_analyzer.hh" --#include "timers/x86_perf_analyzer.hh" --#include "timers/STL_perf_analyzer.hh" -- --using namespace std; -- --template class Perf_Analyzer, class Action> --void bench( int size_min, int size_max, int nb_point ){ -- -- // bench name -- -- string filename="bench_"+Action::name()+".dat"; -- -- INFOS("starting " < tab_mflops(nb_point); -- std::vector tab_sizes(nb_point); -- -- // matrices and vector size calculations -- -- size_lin_log(nb_point,size_min,size_max,tab_sizes); -- -- // loop on matrix size -- -- Perf_Analyzer perf_action; -- -- for (int i=nb_point-1;i>=0;i--){ -- -- INFOS("size=" < --void bench( int size_min, int size_max, int nb_point ){ -- -- // if the rdtsc is not available : -- //bench(size_min,size_max,nb_point); -- // if the rdtsc is available : -- bench(size_min,size_max,nb_point); -- -- -- // Only for small problem size. Otherwize it will be too long -- //bench(size_min,size_max,nb_point); -- //bench(size_min,size_max,nb_point); -- --} -- --#endif -diff -Nur BTL-20030124/generic_bench/bench_parameter.hh BTL/generic_bench/bench_parameter.hh ---- BTL-20030124/generic_bench/bench_parameter.hh 2003-03-17 14:42:37.000000000 +0100 -+++ BTL/generic_bench/bench_parameter.hh 2003-11-13 21:37:12.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : bench_parameter.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:16 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,34 +16,34 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef BENCH_PARAMETER_HH - #define BENCH_PARAMETER_HH - - // minimal time for each measurement - #define REAL_TYPE double - // minimal time for each measurement --#define MIN_TIME 2.0 -+#define MIN_TIME 2.0 - // nb of point on bench curves --#define NB_POINT 100 -+#define NB_POINT 20 - // min vector size for axpy bench - #define MIN_AXPY 20 - // max vector size for axpy bench --#define MAX_AXPY 1000000 -+#define MAX_AXPY 100 - // min matrix size for matrix vector product bench --#define MIN_MV 10 -+#define MIN_MV 1 - // max matrix size for matrix vector product bench --#define MAX_MV 1000 -+#define MAX_MV 100 - // min matrix size for matrix matrix product bench --#define MIN_MM 10 -+#define MIN_MM 1 - // max matrix size for matrix matrix product bench --#define MAX_MM 1000 -+#define MAX_MM 100 - // min matrix size for LU bench --#define MIN_LU 10 -+#define MIN_LU 1 - // max matrix size for LU bench --#define MAX_LU 1000 -+#define MAX_LU 100 - // max size for tiny vector and matrix --#define TINY_MV_MAX_SIZE 5 -+#define TINY_MV_MAX_SIZE 10 - // default nb_sample for x86 timer - #define DEFAULT_NB_SAMPLE 1000 - -diff -Nur BTL-20030124/generic_bench/bench_parameter.hh~ BTL/generic_bench/bench_parameter.hh~ ---- BTL-20030124/generic_bench/bench_parameter.hh~ 2003-03-08 22:39:52.000000000 +0100 -+++ BTL/generic_bench/bench_parameter.hh~ 1970-01-01 01:00:00.000000000 +0100 -@@ -1,52 +0,0 @@ --//===================================================== --// File : bench_parameter.hh --// Author : L. Plagne --// Copyright (C) EDF R&D, lun sep 30 14:23:16 CEST 2002 --//===================================================== --// --// This program is free software; you can redistribute it and/or --// modify it under the terms of the GNU General Public License --// as published by the Free Software Foundation; either version 2 --// of the License, or (at your option) any later version. --// --// This program is distributed in the hope that it will be useful, --// but WITHOUT ANY WARRANTY; without even the implied warranty of --// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --// GNU General Public License for more details. --// You should have received a copy of the GNU General Public License --// along with this program; if not, write to the Free Software --// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// --#ifndef BENCH_PARAMETER_HH --#define BENCH_PARAMETER_HH -- --// minimal time for each measurement --#define REAL_TYPE double --// minimal time for each measurement --#define MIN_TIME 2.0 --// nb of point on bench curves --#define NB_POINT 100 --// min vector size for axpy bench --#define MIN_AXPY 20 --// max vector size for axpy bench --#define MAX_AXPY 1000000 --// min matrix size for matrix vector product bench --#define MIN_MV 10 --// max matrix size for matrix vector product bench --#define MAX_MV 1000 --// min matrix size for matrix matrix product bench --#define MIN_MM 10 --// max matrix size for matrix matrix product bench --#define MAX_MM 1000 --// min matrix size for LU bench --#define MIN_LU 10 --// max matrix size for LU bench --#define MAX_LU 1000 --// max size for tiny vector and matrix --#define TINY_MV_MAX_SIZE 10 --// default nb_sample for x86 timer --#define DEFAULT_NB_SAMPLE 1000 -- -- -- --#endif -diff -Nur BTL-20030124/generic_bench/init/init_function.hh BTL/generic_bench/init/init_function.hh ---- BTL-20030124/generic_bench/init/init_function.hh 2002-11-21 16:04:06.000000000 +0100 -+++ BTL/generic_bench/init/init_function.hh 2003-10-31 21:41:10.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : init_function.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:18 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef INIT_FUNCTION_HH - #define INIT_FUNCTION_HH - -@@ -30,24 +30,24 @@ - return index_i+index_j; - } - --double pseudo_random(int index) -+double pseudo_random(int /* index */) - { - // INFOS("random="<<(std::rand()/double(RAND_MAX))); - return std::rand()/double(RAND_MAX); - } - --double pseudo_random(int index_i, int index_j) -+double pseudo_random(int /* index_i */, int /* index_j */) - { - return std::rand()/double(RAND_MAX); - } - - --double null_function(int index) -+double null_function(int /* index */) - { - return 0.0; - } - --double null_function(int index_i, int index_j) -+double null_function(int /* index_i */, int /* index_j */) - { - return 0.0; - } -diff -Nur BTL-20030124/generic_bench/init/init_matrix.hh BTL/generic_bench/init/init_matrix.hh ---- BTL-20030124/generic_bench/init/init_matrix.hh 2002-11-21 16:04:06.000000000 +0100 -+++ BTL/generic_bench/init/init_matrix.hh 2003-11-02 11:44:15.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : init_matrix.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef INIT_MATRIX_HH - #define INIT_MATRIX_HH - -@@ -29,7 +29,7 @@ - - X.resize(size); - -- for (int j=0;j(A[row],size,row); - } -- -- -+ -+ - } - - #endif -diff -Nur BTL-20030124/generic_bench/init/init_vector.hh BTL/generic_bench/init/init_vector.hh ---- BTL-20030124/generic_bench/init/init_vector.hh 2002-11-21 16:04:06.000000000 +0100 -+++ BTL/generic_bench/init/init_vector.hh 2003-11-11 19:30:52.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : init_vector.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:18 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef INIT_VECTOR_HH - #define INIT_VECTOR_HH - -@@ -29,7 +29,7 @@ - - X.resize(size); - -- for (int i=0;i -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:16 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef BENCH_STATIC_HH - #define BENCH_STATIC_HH - #include "bench_parameter.hh" -@@ -28,51 +28,41 @@ - #include "timers/mixed_perf_analyzer.hh" - #include "timers/x86_perf_analyzer.hh" - --using namespace std; -- -- --template class Perf_Analyzer, template class Action, template class Interface> --void bench_static( void ){ -- -- string filename="bench_"+Action >::name()+".dat"; -+template < -+ template class Perf_Analyzer, -+ template class Action, -+ template class Interface, -+ unsigned Sz -+> -+void bench_static() -+{ -+ std::string filename="bench_" + Action >::name() + ".dat"; - - INFOS("starting " < tab_mflops; - std::vector tab_sizes; - -- static_size_generator::go(tab_sizes,tab_mflops); -- -- dump_file_x_y(tab_sizes,tab_mflops,filename); -+ static_size_generator::go(tab_sizes, tab_mflops); - -+ dump_file_x_y(tab_sizes, tab_mflops, filename); - } - - // default Perf Analyzer -+template < -+ template class Action, -+ template class Interface, -+ unsigned Sz -+> -+void bench_static() -+{ -+ // if the rdtsc is not available : -+ bench_static(); -+ // if the rdtsc is available : -+ // bench_static(); - --template class Action, template class Interface> --void bench_static( void ){ -- -- bench_static(); -- //bench_static(); -- //bench_static(); -- -+ // Only for small problem size. Otherwize it will be too long -+ // bench_static(); - } - - #endif -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -diff -Nur BTL-20030124/generic_bench/static/static_size_generator.hh BTL/generic_bench/static/static_size_generator.hh ---- BTL-20030124/generic_bench/static/static_size_generator.hh 2003-01-09 14:33:50.000000000 +0100 -+++ BTL/generic_bench/static/static_size_generator.hh 2003-11-12 18:26:52.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : static_size_generator.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, mar déc 3 18:59:36 CET 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,41 +16,47 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef _STATIC_SIZE_GENERATOR_HH - #define _STATIC_SIZE_GENERATOR_HH --#include - --using namespace std; -+#include - - //recursive generation of statically defined matrix and vector sizes -- --template class Perf_Analyzer, template class Action, template class Interface> --struct static_size_generator{ -- static void go(vector & tab_sizes, vector & tab_mflops) -+template < -+ int SIZE, -+ template class Perf_Analyzer, -+ template class Action, -+ template class Interface -+> -+struct static_size_generator -+{ -+ static void go(std::vector& tab_sizes, std::vector& tab_mflops) - { - tab_sizes.push_back(SIZE); - - Perf_Analyzer > > perf_action; - tab_mflops.push_back(perf_action.eval_mflops(SIZE)); -- static_size_generator::go(tab_sizes,tab_mflops); -+ -+ static_size_generator::go(tab_sizes,tab_mflops); - }; - }; - - //recursion end -- --template class Perf_Analyzer, template class Action, template class Interface> --struct static_size_generator<1,Perf_Analyzer,Action,Interface>{ -- static void go(vector & tab_sizes, vector & tab_mflops) -+template < -+ template class Perf_Analyzer, -+ template class Action, -+ template class Interface -+> -+struct static_size_generator<1, Perf_Analyzer, Action, Interface> -+{ -+ static void go(std::vector& tab_sizes, std::vector& tab_mflops) - { - tab_sizes.push_back(1); -+ - Perf_Analyzer > > perf_action; - tab_mflops.push_back(perf_action.eval_mflops(1)); - }; - }; - - #endif -- -- -- -- -diff -Nur BTL-20030124/generic_bench/timers/portable_perf_analyzer.hh BTL/generic_bench/timers/portable_perf_analyzer.hh ---- BTL-20030124/generic_bench/timers/portable_perf_analyzer.hh 2003-01-15 11:06:09.000000000 +0100 -+++ BTL/generic_bench/timers/portable_perf_analyzer.hh 2003-11-12 20:09:14.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : portable_perf_analyzer.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, mar déc 3 18:59:35 CET 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef _PORTABLE_PERF_ANALYZER_HH - #define _PORTABLE_PERF_ANALYZER_HH - -@@ -24,111 +24,118 @@ - #include "timers/portable_timer.hh" - - template --class Portable_Perf_Analyzer{ --public: -- Portable_Perf_Analyzer( void ):_nb_calc(1),_nb_init(1),_chronos(){ -- MESSAGE("Portable_Perf_Analyzer Ctor"); -- }; -- Portable_Perf_Analyzer( const Portable_Perf_Analyzer & ){ -- INFOS("Copy Ctor not implemented"); -- exit(0); -- }; -- ~Portable_Perf_Analyzer( void ){ -- MESSAGE("Portable_Perf_Analyzer Dtor"); -- }; -- -- -- -- inline double eval_mflops(int size) -- { -- -- Action action(size); -- -- double time_baseline=time_init(action); -- -- while (time_baseline < MIN_TIME) { -- -- _nb_init*=2; -- time_baseline=time_init(action); -- } -- -- time_baseline=time_baseline/(double(_nb_init)); -- -- double time_action=time_calculate(action); -- -- while (time_action < MIN_TIME) { -- -- _nb_calc*=2; -- time_action=time_calculate(action); -- } -- -- // INFOS("size="< -+Portable_Perf_Analyzer::~Portable_Perf_Analyzer() -+{ -+ MESSAGE("Portable_Perf_Analyzer Dtor"); -+}; -+ -+template -+double Portable_Perf_Analyzer::time_init(Action& action) -+{ -+ // time measurement -+ _chronos.start(); -+ -+ for (unsigned ii = 0; ii < _nb_init; ii++){ -+ action.initialize(); -+ } -+ -+ _chronos.stop(); -+ -+ return _chronos.user_time(); -+} -+ -+template -+double Portable_Perf_Analyzer::time_calculate(Action& action) -+{ -+ // time measurement -+ _chronos.start(); -+ -+ for (unsigned ii = 0; ii <_nb_calc; ii++) { -+ // the measured bench self -+ action.initialize(); -+ action.calculate(); -+ } -+ -+ _chronos.stop(); -+ -+ return _chronos.user_time(); -+} -+ -+template -+double Portable_Perf_Analyzer::eval_mflops(int size) -+{ -+ Action action(size); -+ -+ double time_baseline = time_init(action); -+ -+ while (time_baseline < MIN_TIME) { -+ _nb_init*=2; -+ time_baseline=time_init(action); -+ } -+ -+ time_baseline=time_baseline/(double(_nb_init)); -+ -+ // perform the benchmark timing -+ double time_action=time_calculate(action); -+ -+ while (time_action < MIN_TIME) { -+ _nb_calc*=2; -+ time_action=time_calculate(action); -+ } -+ -+ // INFOS("size="<::iterator itr; - for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) -- { -- outfile << (*itr).first << " " << (*itr).second << endl ; -- } -- -+ { -+ outfile << (*itr).first << " " << (*itr).second << endl ; -+ } -+ - outfile.close(); - - } - - void dump_history(string filemane){ -- -+ - ofstream outfile (filemane.c_str(),ios::out) ; - - - -- for(int i=0 ; i<_history_mean_clicks.size() ; i++) -- { -- outfile << i << " " -- << _history_mean_clicks[i] << " " -- << _history_shortest_clicks[i] << " " -+ for(unsigned i=0 ; i<_history_mean_clicks.size() ; i++) -+ { -+ outfile << i << " " -+ << _history_mean_clicks[i] << " " -+ << _history_shortest_clicks[i] << " " - << _history_most_occured_clicks[i] << endl ; -- } -- -+ } -+ - outfile.close(); - - } -- -+ - - - double get_mean_clicks( void ){ -- -+ - std::map::iterator itr; -- -+ - unsigned long long mean_clicks=0; - - for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) -- { -- -+ { -+ - mean_clicks+=(*itr).second*(*itr).first; -- } -+ } - - return mean_clicks/double(_nb_sample); - - } - - double get_shortest_clicks( void ){ -- -+ - return double((*_counted_clicks.begin()).first); - - } -@@ -188,18 +188,18 @@ - std::map::iterator itr; - - for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) -- { -- -+ { -+ - if (max_occurence<=(*itr).second){ - max_occurence=(*itr).second; - moc=(*itr).first; - } -- } -- -- return double(moc); -+ } -+ -+ return double(moc); - - } -- -+ - void clear( void ) - { - _counted_clicks.clear(); -@@ -212,9 +212,9 @@ - } - - -- -+ - private : -- -+ - union - { - unsigned long int n32[2] ; -@@ -237,7 +237,7 @@ - - unsigned long long _nb_sample; - -- -+ - - }; - -diff -Nur BTL-20030124/generic_bench/timers/x86_timer.hh~ BTL/generic_bench/timers/x86_timer.hh~ ---- BTL-20030124/generic_bench/timers/x86_timer.hh~ 2003-01-07 17:31:58.000000000 +0100 -+++ BTL/generic_bench/timers/x86_timer.hh~ 1970-01-01 01:00:00.000000000 +0100 -@@ -1,245 +0,0 @@ --//===================================================== --// File : x86_timer.hh --// Author : L. Plagne --// Copyright (C) EDF R&D, mar déc 3 18:59:35 CET 2002 --//===================================================== --// --// This program is free software; you can redistribute it and/or --// modify it under the terms of the GNU General Public License --// as published by the Free Software Foundation; either version 2 --// of the License, or (at your option) any later version. --// --// This program is distributed in the hope that it will be useful, --// but WITHOUT ANY WARRANTY; without even the implied warranty of --// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --// GNU General Public License for more details. --// You should have received a copy of the GNU General Public License --// along with this program; if not, write to the Free Software --// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// --#ifndef _X86_TIMER_HH --#define _X86_TIMER_HH -- --#include --#include --#include --#include --//#include "system_time.h" --#include --#include "utilities.h" --#include --#include --#include --#include -- --// frequence de la becanne en Hz --//#define FREQUENCY 648000000 --//#define FREQUENCY 1400000000 --#define FREQUENCY 1695000000 -- --using namespace std; -- -- --class X86_Timer { -- --public : -- -- X86_Timer( void ):_frequency(FREQUENCY),_nb_sample(0) -- { -- MESSAGE("X86_Timer Default Ctor"); -- } -- -- inline void start( void ){ -- -- rdtsc(_click_start.n32[0],_click_start.n32[1]); -- -- } -- -- -- inline void stop( void ){ -- -- rdtsc(_click_stop.n32[0],_click_stop.n32[1]); -- -- } -- -- -- inline double frequency( void ){ -- return _frequency; -- } -- -- double get_elapsed_time_in_second( void ){ -- -- return (_click_stop.n64-_click_start.n64)/double(FREQUENCY); -- -- -- } -- -- unsigned long long get_click( void ){ -- -- return (_click_stop.n64-_click_start.n64); -- -- } -- -- inline void find_frequency( void ){ -- -- time_t initial, final; -- int dummy=2; -- -- initial = time(0); -- start(); -- do { -- dummy+=2; -- } -- while(time(0)==initial); -- // On est au debut d'un cycle d'une seconde !!! -- initial = time(0); -- start(); -- do { -- dummy+=2; -- } -- while(time(0)==initial); -- final=time(0); -- stop(); -- INFOS("fine grained time : "<< get_elapsed_time_in_second()); -- INFOS("coarse grained time : "<< final-initial); -- _frequency=_frequency*get_elapsed_time_in_second()/double(final-initial); -- INFOS("CPU frequency : "<< _frequency); -- -- } -- -- void add_get_click( void ){ -- -- _nb_sample++; -- _counted_clicks[get_click()]++; -- fill_history_clicks(); -- -- } -- -- void dump_statistics(string filemane){ -- -- ofstream outfile (filemane.c_str(),ios::out) ; -- -- std::map::iterator itr; -- for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) -- { -- outfile << (*itr).first << " " << (*itr).second << endl ; -- } -- -- outfile.close(); -- -- } -- -- void dump_history(string filemane){ -- -- ofstream outfile (filemane.c_str(),ios::out) ; -- -- -- -- for(int i=0 ; i<_history_mean_clicks.size() ; i++) -- { -- outfile << i << " " -- << _history_mean_clicks[i] << " " -- << _history_shortest_clicks[i] << " " -- << _history_most_occured_clicks[i] << endl ; -- } -- -- outfile.close(); -- -- } -- -- -- -- double get_mean_clicks( void ){ -- -- std::map::iterator itr; -- -- unsigned long long mean_clicks=0; -- -- for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) -- { -- -- mean_clicks+=(*itr).second*(*itr).first; -- } -- -- return mean_clicks/double(_nb_sample); -- -- } -- -- double get_shortest_clicks( void ){ -- -- return double((*_counted_clicks.begin()).first); -- -- } -- -- void fill_history_clicks( void ){ -- -- _history_mean_clicks.push_back(get_mean_clicks()); -- _history_shortest_clicks.push_back(get_shortest_clicks()); -- _history_most_occured_clicks.push_back(get_most_occured_clicks()); -- -- } -- -- -- double get_most_occured_clicks( void ){ -- -- unsigned long long moc=0; -- unsigned long long max_occurence=0; -- -- std::map::iterator itr; -- -- for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) -- { -- -- if (max_occurence<=(*itr).second){ -- max_occurence=(*itr).second; -- moc=(*itr).first; -- } -- } -- -- return double(moc); -- -- } -- -- void clear( void ) -- { -- _counted_clicks.clear(); -- -- _history_mean_clicks.clear(); -- _history_shortest_clicks.clear(); -- _history_most_occured_clicks.clear(); -- -- _nb_sample=0; -- } -- -- -- --private : -- -- union -- { -- unsigned long int n32[2] ; -- unsigned long long n64 ; -- } _click_start; -- -- union -- { -- unsigned long int n32[2] ; -- unsigned long long n64 ; -- } _click_stop; -- -- double _frequency ; -- -- map _counted_clicks; -- -- vector _history_mean_clicks; -- vector _history_shortest_clicks; -- vector _history_most_occured_clicks; -- -- unsigned long long _nb_sample; -- -- -- --}; -- -- --#endif -diff -Nur BTL-20030124/generic_bench/utils/dump_file_x_y.hh BTL/generic_bench/utils/dump_file_x_y.hh ---- BTL-20030124/generic_bench/utils/dump_file_x_y.hh 2002-11-21 16:04:06.000000000 +0100 -+++ BTL/generic_bench/utils/dump_file_x_y.hh 2003-11-12 19:53:23.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : dump_file_x_y.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:20 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,9 +16,10 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef DUMP_FILE_X_Y_HH - #define DUMP_FILE_X_Y_HH -+ - #include - #include - -@@ -27,21 +28,17 @@ - // [] operator for seting element - // the vector element must have the << operator define - --using namespace std; -- - template --void dump_file_x_y(const Vector_A & X, const Vector_B & Y, const std::string & filename){ -- -- ofstream outfile (filename.c_str(),ios::out) ; -- int size=X.size(); -- -- for (int i=0;i -+// Author : L. Plagne - // Copyright (C) EDF R&D, mar déc 3 18:59:37 CET 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef SIZE_LIN_LOG - #define SIZE_LIN_LOG - -@@ -30,41 +30,27 @@ - - X.resize(nb_point); - -- if (nb_point>ten){ -- -- for (int i=0;i ten) { -+ for (int i = 0; i < nine; i++) { -+ X[i] = i+1; - } - - Vector log_size; -- size_log(nb_point-nine,ten,size_max,log_size); - -- for (int i=0;i(); -- bench_static(); -- bench_static(); -+ bench_static(); -+ bench_static(); -+ bench_static(); - - return 0; - } -- -- -diff -Nur BTL-20030124/libs/tvmet/main.cpp BTL/libs/tvmet/main.cpp ---- BTL-20030124/libs/tvmet/main.cpp 2003-01-21 13:05:17.000000000 +0100 -+++ BTL/libs/tvmet/main.cpp 2003-11-14 13:29:57.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : main.cpp --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:30 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,21 +16,24 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #include "utilities.h" - #include "tvmet_interface.hh" - #include "static/bench_static.hh" - #include "action_matrix_vector_product.hh" - #include "action_matrix_matrix_product.hh" - #include "action_axpy.hh" -+#include "action_ata_product.hh" -+#include "action_aat_product.hh" -+ - - int main() - { -- bench_static(); -- bench_static(); -- bench_static(); -+ bench_static(); -+ bench_static(); -+ bench_static(); -+ bench_static(); -+ bench_static(); - - return 0; - } -- -- -diff -Nur BTL-20030124/libs/tvmet/Makefile BTL/libs/tvmet/Makefile ---- BTL-20030124/libs/tvmet/Makefile 2003-01-21 11:38:53.000000000 +0100 -+++ BTL/libs/tvmet/Makefile 2003-10-30 19:02:08.000000000 +0100 -@@ -1,8 +1,8 @@ --include $(BENCH_BASE)/Makefile.in -+include $(BENCH_BASE)/Makefile.in - --LIBS=$(LIBS_BASE) --INCLUDES=-I. $(INCLUDES_BASE) -I$(TVMET_INCLUDES) --OPTIM=$(OPTIM_BASE) -+LIBS=$(LIBS_BASE) -+INCLUDES=-I. $(INCLUDES_BASE) -I$(TVMET_ROOT)/include -+OPTIM=$(shell echo `$(TVMET_ROOT)/tvmet-config --cxxflags`) - DEBUG=$(DEBUG_BASE) - - CXXFLAGS = $(OPTIM) $(INCLUDES) -@@ -13,8 +13,8 @@ - - all : $(DEPEND_BASE) main - --main: Makefile main.o -- $(CXX) -o main main.o $(LIBS) -+main: Makefile main.o -+ $(CXX) -o main main.o $(LIBS) - - - ########################################################################### -diff -Nur BTL-20030124/libs/tvmet/tvmet_interface.hh BTL/libs/tvmet/tvmet_interface.hh ---- BTL-20030124/libs/tvmet/tvmet_interface.hh 2003-01-21 12:05:19.000000000 +0100 -+++ BTL/libs/tvmet/tvmet_interface.hh 2003-11-13 18:20:13.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : tvmet_interface.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:30 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef TVMET_INTERFACE_HH - #define TVMET_INTERFACE_HH - -@@ -25,117 +25,98 @@ - - #include - --using namespace tvmet; -- - template --class tvmet_interface{ -- -+class tvmet_interface -+{ - public : -- -+ - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; -- -- typedef Vector gene_vector; -- typedef Matrix gene_matrix; - -- static inline std::string name( void ) -- { -+ typedef tvmet::Vector gene_vector; -+ typedef tvmet::Matrix gene_matrix; -+ -+ static inline std::string name() { - return "tvmet"; - } -- -- -- static void free_matrix(gene_matrix & A, int N){ -- -- return ; -- } -- -- static void free_vector(gene_vector & B){ -- -- return ; -- -- } -- -- static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ -- -- for (int i=0; i -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:27 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #include "utilities.h" - #include "ublas_interface.hh" - #include "bench.hh" -@@ -26,14 +26,16 @@ - #include "action_ata_product.hh" - #include "action_aat_product.hh" - -+using namespace std; -+ - int main() - { -- bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); -+ bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); -+ -+ bench > >(MIN_MV,MAX_MV,NB_POINT); - -- bench > >(MIN_MV,MAX_MV,NB_POINT); -+ bench > >(MIN_MM,MAX_MM,NB_POINT); - -- bench > >(MIN_MM,MAX_MM,NB_POINT); -- - bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); -@@ -41,5 +43,3 @@ - - return 0; - } -- -- -diff -Nur BTL-20030124/libs/ublas/ublas_interface.hh BTL/libs/ublas/ublas_interface.hh ---- BTL-20030124/libs/ublas/ublas_interface.hh 2002-11-29 16:43:28.000000000 +0100 -+++ BTL/libs/ublas/ublas_interface.hh 2003-11-13 21:58:08.000000000 +0100 -@@ -1,14 +1,14 @@ - //===================================================== - // File : ublas_interface.hh --// Author : L. Plagne -+// Author : L. Plagne - // Copyright (C) EDF R&D, lun sep 30 14:23:27 CEST 2002 - //===================================================== --// -+// - // This program is free software; you can redistribute it and/or - // modify it under the terms of the GNU General Public License - // as published by the Free Software Foundation; either version 2 - // of the License, or (at your option) any later version. --// -+// - // This program is distributed in the hope that it will be useful, - // but WITHOUT ANY WARRANTY; without even the implied warranty of - // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -@@ -16,7 +16,7 @@ - // You should have received a copy of the GNU General Public License - // along with this program; if not, write to the Free Software - // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --// -+// - #ifndef UBLAS_INTERFACE_HH - #define UBLAS_INTERFACE_HH - -@@ -29,7 +29,6 @@ - #include - #include - -- - template - class ublas_interface{ - -@@ -45,65 +44,65 @@ - //typedef numerics::vector > gene_vector; - typedef typename boost::numeric::ublas::matrix gene_matrix; - typedef typename boost::numeric::ublas::vector gene_vector; -- -+ - static inline std::string name( void ) - { - return "ublas"; - } - - -- -+ - - static void free_matrix(gene_matrix & A, int N){ -- -+ - return ; - } -- -+ - static void free_vector(gene_vector & B){ -- -+ - return ; -- -+ - } -- -+ - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ -- -+ - A.resize(A_stl.size(),A_stl[0].size()); -- -+ - for (int i=0; i1.3.0 -+TVMET_ROOT=/home/opetzold/work/tvmet - - ## UBLAS -- --BOOST_ROOT=/home01/lplagne/public/boost/boost_1_28_0 -+BOOST_ROOT=/usr/include/boost - - ## BLITZ -- --##BLITZ_ROOT=/home01/lplagne/public/blitz/blitz-20001213 --BLITZ_ROOT=/home01/lplagne/public/blitz/blitz-0.6 -+BLITZ_ROOT=/home/opetzold/work/blitz++-0.7 - - ## MTL --MTL_ROOT=/home01/lplagne/public/MTL/include -+##MTL_ROOT=/home01/lplagne/public/MTL/include - ##MTL_ROOT=/home01/lplagne/public/MTL/mtl-2.1.2-20 - ##MTL_PATCH=/home01/lplagne/mtl_patch/mtl-spec-1.0 - ##ITL_ROOT=/home01/lplagne/public/MTL/ITL/itl-4.0.0-1 - - ## ATLAS -- --ATLAS_BLAS_LIB=/home01/lplagne/public/atlas/ATLAS/lib/Linux_PIIISSE1 --ATLAS_BLAS_INCLUDE2=/home01/lplagne/public/atlas/ATLAS/include/Linux_PIIISSE1 --ATLAS_BLAS_INCLUDE=/home01/lplagne/public/atlas/ATLAS/include -+ATLAS_BLAS_LIB=/usr/local/lib -+ATLAS_BLAS_INCLUDE2=/usr/local/include/atlas/Linux_P4SSE2 -+ATLAS_BLAS_INCLUDE=/usr/local/include/atlas - - ## C_BLAS -- --C_BLAS_INCLUDE=/home01/lplagne/public/blas_netlib/CBLAS/src --C_BLAS_LIB=/home01/lplagne/public/blas_netlib/CBLAS/lib/LINUX/cblas_LINUX.a --F77_BLAS_LIB=/home01/lplagne/public/blas_netlib/f77_blas/libblas.a -+#C_BLAS_INCLUDE=/home01/lplagne/public/blas_netlib/CBLAS/src -+#C_BLAS_LIB=/home01/lplagne/public/blas_netlib/CBLAS/lib/LINUX/cblas_LINUX.a -+#F77_BLAS_LIB=/home01/lplagne/public/blas_netlib/f77_blas/libblas.a - - ## INTEL_BLAS -- --INTEL_BLAS_INCLUDE=/opt/intel/mkl/include --IBLIB=/opt/intel/mkl/lib/32 --INTEL_BLAS_LIB=$(IBLIB)/libmkl_lapack.a $(IBLIB)/libmkl_p3.a $(IBLIB)/libmkl_p4.a $(IBLIB)/libguide.a $(IBLIB)/libmkl_def.a -lg2c -lpthread --##INTEL_BLAS_LIB=-L/opt/intel/mkl/lib/32 -lmkl_lapack64 -lmkl_lapack32 -lmkl_p4 -lmkl_p3 -lguide -lmkl_def -lg2c -+#INTEL_BLAS_INCLUDE=/opt/intel/mkl/include -+#IBLIB=/opt/intel/mkl/lib/32 -+#INTEL_BLAS_LIB=$(IBLIB)/libmkl_lapack.a $(IBLIB)/libmkl_p3.a $(IBLIB)/libmkl_p4.a $(IBLIB)/libguide.a $(IBLIB)/libmkl_def.a -lg2c -lpthread -+##INTEL_BLAS_LIB=-L/opt/intel/mkl/lib/32 -lmkl_lapack64 -lmkl_lapack32 -lmkl_p4 -lmkl_p3 -lguide -lmkl_def -lg2c - - - --## INCLUDES -+## INCLUDES - - ACTIONS=$(BENCH_BASE)/actions - -@@ -52,13 +45,13 @@ - INCLUDES_BASE= -I$(BENCH_BASE)/includes -I$(STL) -I$(GENERIC) -I$(ACTIONS) -I$(BENCH_UTILS) - - --## LIBS -+## LIBS - --LIBS_BASE = -lm -+LIBS_BASE = -lm - - ##CXX = KCC - --DEFINED_VAR= -+DEFINED_VAR= - CXX=g++ $(DEFINED_VAR) - MAKE_LIB= ar cr - -@@ -78,7 +71,7 @@ - - ########################################################################### - --.SUFFIXES: .o .cpp -+.SUFFIXES: .o .cpp - - .cpp.o: - $(CXX) $(CXXFLAGS) -c $< -@@ -86,14 +79,14 @@ - ########################################################################### - ########################################################################### - --.SUFFIXES: .o .cxx -+.SUFFIXES: .o .cxx - - .cxx.o: - $(CXX) $(CXXFLAGS) -c $< - - ########################################################################### - --default: -+default: - make all - - test_conf : -@@ -105,5 +98,3 @@ - clean: - rm -f *.o *.ii *.int.c *.s *~ \#* main core rm *.dat *.a - rm -rf ti_files -- -- diff --git a/tvmet-1.7.1/benchmark/Makefile.am b/tvmet-1.7.1/benchmark/Makefile.am deleted file mode 100644 index 45e405a9b..000000000 --- a/tvmet-1.7.1/benchmark/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -# $Id: Makefile.am,v 1.4 2003/12/04 19:18:09 opetzold Exp $ - -EXTRA_DIST = BTL-20030124.patch diff --git a/tvmet-1.7.1/benchmark/Makefile.in b/tvmet-1.7.1/benchmark/Makefile.in deleted file mode 100644 index 4e3ec26c3..000000000 --- a/tvmet-1.7.1/benchmark/Makefile.in +++ /dev/null @@ -1,338 +0,0 @@ -# Makefile.in generated by automake 1.8.3 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# $Id: Makefile.am,v 1.4 2003/12/04 19:18:09 opetzold Exp $ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_triplet = @host@ -subdir = benchmark -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \ - $(top_srcdir)/config/ac_create_prefix_config_h.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \ - $(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \ - $(top_srcdir)/config/ac_cxx_have_mutable.m4 \ - $(top_srcdir)/config/ac_cxx_have_namespaces.m4 \ - $(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \ - $(top_srcdir)/config/ac_cxx_partial_specialization.m4 \ - $(top_srcdir)/config/ac_cxx_typename.m4 \ - $(top_srcdir)/config/ac_set_compiler.m4 \ - $(top_srcdir)/config/op_doxygen_doc.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(mkdir_p) -CONFIG_HEADER = $(top_builddir)/config/config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@ -CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@ -CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@ -CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@ -CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@ -CXX_WARN_FLAGS = @CXX_WARN_FLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LATEX_BATCHMODE = @LATEX_BATCHMODE@ -LATEX_MODE = @LATEX_MODE@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -EXTRA_DIST = BTL-20030124.patch -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu benchmark/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu benchmark/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/tvmet-1.7.1/doc/Doxyfile.in b/tvmet-1.7.1/doc/Doxyfile.in deleted file mode 100644 index b98c263b4..000000000 --- a/tvmet-1.7.1/doc/Doxyfile.in +++ /dev/null @@ -1,1120 +0,0 @@ -# $Id: Doxyfile.in,v 1.14 2004/11/30 09:51:06 opetzold Exp $ -# Doxyfile 1.3.5 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = @PACKAGE@ - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = "Version @VERSION@" - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = YES - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. -# -# doxygen BUG: Obviously doxygen takes only the first path and ignores the 2nd - -STRIP_FROM_PATH = @top_srcdir@/ @top_builddir@/ - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = YES - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = YES - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 2 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = "docme=\todo\nDoc me!" - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = doxygen-warning - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = \ - @top_srcdir@/include/ \ - @top_srcdir@/doc \ - @top_builddir@/doc \ - @top_builddir@/include/tvmet/config.h \ - @top_builddir@/include/tvmet/config/config-vc71.h - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc - -FILE_PATTERNS = \ - *.h \ - *.dox - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = \ - @top_srcdir@/doc/Util.h \ - @top_srcdir@/doc/dox_functions.cc \ - @top_srcdir@/doc/dox_operators.cc - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = CVS \ - stamp* \ - *.in - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = @top_srcdir@/examples - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = *.cc \ - *.h - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = @top_srcdir@/doc - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 2 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -#GENERATE_HTML = @enable_html_docs@ -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = @srcdir@/header.html - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = footer.html - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = @srcdir@/tvmet.css - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -#GENERATE_LATEX = @enable_latex_docs@ -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = YES - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = tvmet - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = @LATEX_BATCHMODE@ - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = @top_srcdir@/include \ - @top_builddir@/include - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = DOXYGEN_SKIP_THIS \ - TVMET_HAVE_LONG_DOUBLE \ - EIGEN_USE_COMPLEX \ - TVMET_HAVE_IEEE_MATH - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = html/@PACKAGE@-@VERSION@.tag - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = @DOXYGEN_HAVE_DOT@ - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = YES - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = YES diff --git a/tvmet-1.7.1/doc/Makefile.am b/tvmet-1.7.1/doc/Makefile.am deleted file mode 100644 index 05b0c62dd..000000000 --- a/tvmet-1.7.1/doc/Makefile.am +++ /dev/null @@ -1,218 +0,0 @@ -# $Id: Makefile.am,v 1.22 2004/09/16 08:12:13 opetzold Exp $ - -AM_CXXFLAGS = -O \ - -I@top_srcdir@/include -I@top_builddir@/include - -DOXY_DOC = \ - benchmark.dox \ - build.dox \ - compiler.dox \ - faq.dox \ - intro.dox \ - license.dox \ - links.dox \ - misc.dox \ - notes.dox \ - projects.dox \ - usage.dox \ - works.dox - -HTML_MISC = \ - tvmet.css \ - header.html footer.html.in - -LTEX_MISC = \ - tvmet.sty.in - -BENCH_FIG = \ - axpy.png \ - matrix_matrix.png \ - matrix_vector.png \ - aat.png \ - ata.png - -EXTRA_DIST = \ - $(DOXY_DOC) \ - $(HTML_MISC) \ - $(LTEX_MISC) \ - $(BENCH_FIG) - -DISTCLEANFILES = \ - Doxyfile doxygen-warning \ - footer.html tvmet.sty - -# some depencies -Doxyfile: Doxyfile.in -footer.html: footer.html.in -tvmet.sty: tvmet.sty.in - -# non-install programs for generating doxygen files -noinst_PROGRAMS = dox_operators dox_functions -dox_operators_SOURCES = dox_operators.cc Util.h -dox_functions_SOURCES = dox_functions.cc Util.h - -# -# rules for documentation, if ordered -# -if CONFIG_DOC - -# -# file created on the fly -# -DOXY_BUILD = \ - changelog.dox \ - news.dox \ - credits.dox \ - install.dox \ - operators.dox \ - functions.dox - -DOXY_HTML_SRC = \ - $(DOXY_DOC) \ - $(DOXY_BUILD) \ - $(patsubst %.in, %, $(HTML_MISC)) - -DOXY_LTEX_SRC = \ - $(patsubst %.in, %, $(LTEX_MISC)) - -# file creating rules; not needed every time -operators.dox: dox_operators - ./dox_operators > operators.dox - -functions.dox: dox_functions - ./dox_functions > functions.dox - -# file creating rules -changelog.dox: @top_srcdir@/ChangeLog - @echo "/** \page changelog ChangeLog" > $@ - @echo "\verbatim" >> $@ - cat $< >> $@ - @echo "\endverbatim" >> $@ - @echo "*/" >> $@ - -news.dox: @top_srcdir@/NEWS - @echo "/** \page news News" > $@ - @echo "\verbatim" >> $@ - cat $< >> $@ - @echo "\endverbatim" >> $@ - @echo "*/" >> $@ - -credits.dox: @top_srcdir@/THANKS - @echo "/** \page credits Credits" > $@ - @echo "\verbatim" >> $@ - cat $< >> $@ - @echo "\endverbatim" >> $@ - @echo "*/" >> $@ - -install.dox: @top_srcdir@/INSTALL - @echo "/** \page basic_install INSTALL" > $@ - @echo "\verbatim" >> $@ - cat $< >> $@ - @echo "\endverbatim" >> $@ - @echo "*/" >> $@ - - -# -# doxygen API -# -DOC_API_PDF = $(PACKAGE)-$(VERSION).pdf - -all-local: doxygen-api - -# need's LaTeX style, since we use an own style for LaTeX -# which is required for generating formulas in HTML too. -# Doxygen LaTeX batchmode doesn't solves the problem right here. -doxygen-html-dir: - @if test ! -d ./html; then mkdir ./html; fi - -doxygen-api: doxygen-html-dir Doxyfile $(DOXY_HTML_SRC) - @echo "Making HTML manual" - @cp @builddir@/tvmet.sty ./html/ - @DOXYGEN@ $(DOXYGEN_OPTS) - @$(RM) -f ./html/tvmet.sty - -# -# doxygen LaTeX API -# -TEXINPUTS_PATH=$(TEXINPUTS):$(top_builddir) - -noinst_DATA = $(DOC_API_PDF) - -all-local: $(noinst_DATA) - -dvi-local: -ps-local: -pdf-local: $(DOC_API_PDF) - -$(DOC_API_PDF): Doxyfile $(DOXY_LTEX_SRC) - @if test -d ./latex; then \ - echo "Making PDF manual"; \ - if test -f $@; then \ - $(RM) $@; \ - fi; \ - TEXINPUTS=$(TEXINPUTS_PATH) $(MAKE) -C ./latex refman.pdf; \ - $(LN_S) ./latex/refman.pdf $@; \ - fi - - -# -# misc hooks -# -distclean-local: - @rm -f $(DOXY_BUILD) - @if test -f $(DOC_API_PDF); then \ - $(RM) -f $(DOC_API_PDF); \ - fi - @if test -d html; then \ - $(RM) -rf html; \ - fi - @if test -d latex; then \ - $(RM) -rf latex; \ - fi - @if test -d rtf; then \ - $(RM) -rf rtf; \ - fi - @if test -d man; then \ - $(RM) -rf man; \ - fi - -doc-dist: doxygen-api - echo "please wait while archiving the html docs."; \ - tar cf - -C ./html . | bzip2 --best -c > $(PACKAGE)-docs-$(VERSION).tar.bz2 - -# where to install all html documents -TVMET_DOC_DIR = $(datadir)/doc/$(PACKAGE)-$(VERSION) - -# Automake's "distcheck" is sensitive to having files left over -# after "make uninstall", so we have to clean up the install hook. -uninstall-local: - @if test -d $(TVMET_DOC_DIR); then \ - rm -rf $(TVMET_DOC_DIR); \ - fi - -# Install hooks -make-install-dirs: - @if test '!' -d $(TVMET_DOC_DIR); then \ - $(mkinstalldirs) $(TVMET_DOC_DIR); \ - fi - -install-data-hook: make-install-dirs - @echo Installing documentations into $(TVMET_DOC_DIR) - @echo "install html" - @$(INSTALL_DATA) @top_builddir@/doc/html/* $(TVMET_DOC_DIR) - -else -doc-dist: -install-data-hook: -endif # CONFIG_DOC - - -# -------------------------------------------------------- -# in progress: -# make refman twoside -twoside: - class=`cat latex/refman.tex | grep documentclass` - newclass=`echo $$class | sed -e 's/twoside,//' -e 's/\[/\[twoside,/'` - @echo "class:" $$class - @echo "newclass:" $$newclass - cat latex/refman.tex | sed 's/$$class/$$newclass/' >foo diff --git a/tvmet-1.7.1/doc/Makefile.in b/tvmet-1.7.1/doc/Makefile.in deleted file mode 100644 index 1615e41bf..000000000 --- a/tvmet-1.7.1/doc/Makefile.in +++ /dev/null @@ -1,687 +0,0 @@ -# Makefile.in generated by automake 1.8.3 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# $Id: Makefile.am,v 1.22 2004/09/16 08:12:13 opetzold Exp $ - - -SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_triplet = @host@ -noinst_PROGRAMS = dox_operators$(EXEEXT) dox_functions$(EXEEXT) -subdir = doc -DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/footer.html.in \ - $(srcdir)/tvmet.sty.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \ - $(top_srcdir)/config/ac_create_prefix_config_h.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \ - $(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \ - $(top_srcdir)/config/ac_cxx_have_mutable.m4 \ - $(top_srcdir)/config/ac_cxx_have_namespaces.m4 \ - $(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \ - $(top_srcdir)/config/ac_cxx_partial_specialization.m4 \ - $(top_srcdir)/config/ac_cxx_typename.m4 \ - $(top_srcdir)/config/ac_set_compiler.m4 \ - $(top_srcdir)/config/op_doxygen_doc.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(mkdir_p) -CONFIG_HEADER = $(top_builddir)/config/config.h -CONFIG_CLEAN_FILES = Doxyfile footer.html tvmet.sty -PROGRAMS = $(noinst_PROGRAMS) -am_dox_functions_OBJECTS = dox_functions.$(OBJEXT) -dox_functions_OBJECTS = $(am_dox_functions_OBJECTS) -dox_functions_LDADD = $(LDADD) -am_dox_operators_OBJECTS = dox_operators.$(OBJEXT) -dox_operators_OBJECTS = $(am_dox_operators_OBJECTS) -dox_operators_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config -depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/dox_functions.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/dox_operators.Po -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES) -DIST_SOURCES = $(dox_functions_SOURCES) $(dox_operators_SOURCES) -DATA = $(noinst_DATA) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@ -CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@ -CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@ -CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@ -CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@ -CXX_WARN_FLAGS = @CXX_WARN_FLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LATEX_BATCHMODE = @LATEX_BATCHMODE@ -LATEX_MODE = @LATEX_MODE@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -AM_CXXFLAGS = -O \ - -I@top_srcdir@/include -I@top_builddir@/include - -DOXY_DOC = \ - benchmark.dox \ - build.dox \ - compiler.dox \ - faq.dox \ - intro.dox \ - license.dox \ - links.dox \ - misc.dox \ - notes.dox \ - projects.dox \ - usage.dox \ - works.dox - -HTML_MISC = \ - tvmet.css \ - header.html footer.html.in - -LTEX_MISC = \ - tvmet.sty.in - -BENCH_FIG = \ - axpy.png \ - matrix_matrix.png \ - matrix_vector.png \ - aat.png \ - ata.png - -EXTRA_DIST = \ - $(DOXY_DOC) \ - $(HTML_MISC) \ - $(LTEX_MISC) \ - $(BENCH_FIG) - -DISTCLEANFILES = \ - Doxyfile doxygen-warning \ - footer.html tvmet.sty - -dox_operators_SOURCES = dox_operators.cc Util.h -dox_functions_SOURCES = dox_functions.cc Util.h - -# -# rules for documentation, if ordered -# - -# -# file created on the fly -# -@CONFIG_DOC_TRUE@DOXY_BUILD = \ -@CONFIG_DOC_TRUE@ changelog.dox \ -@CONFIG_DOC_TRUE@ news.dox \ -@CONFIG_DOC_TRUE@ credits.dox \ -@CONFIG_DOC_TRUE@ install.dox \ -@CONFIG_DOC_TRUE@ operators.dox \ -@CONFIG_DOC_TRUE@ functions.dox - -@CONFIG_DOC_TRUE@DOXY_HTML_SRC = \ -@CONFIG_DOC_TRUE@ $(DOXY_DOC) \ -@CONFIG_DOC_TRUE@ $(DOXY_BUILD) \ -@CONFIG_DOC_TRUE@ $(patsubst %.in, %, $(HTML_MISC)) - -@CONFIG_DOC_TRUE@DOXY_LTEX_SRC = \ -@CONFIG_DOC_TRUE@ $(patsubst %.in, %, $(LTEX_MISC)) - - -# -# doxygen API -# -@CONFIG_DOC_TRUE@DOC_API_PDF = $(PACKAGE)-$(VERSION).pdf - -# -# doxygen LaTeX API -# -@CONFIG_DOC_TRUE@TEXINPUTS_PATH = $(TEXINPUTS):$(top_builddir) -@CONFIG_DOC_TRUE@noinst_DATA = $(DOC_API_PDF) - -# where to install all html documents -@CONFIG_DOC_TRUE@TVMET_DOC_DIR = $(datadir)/doc/$(PACKAGE)-$(VERSION) -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu doc/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -footer.html: $(top_builddir)/config.status $(srcdir)/footer.html.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -tvmet.sty: $(top_builddir)/config.status $(srcdir)/tvmet.sty.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ - -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done -dox_functions$(EXEEXT): $(dox_functions_OBJECTS) $(dox_functions_DEPENDENCIES) - @rm -f dox_functions$(EXEEXT) - $(CXXLINK) $(dox_functions_LDFLAGS) $(dox_functions_OBJECTS) $(dox_functions_LDADD) $(LIBS) -dox_operators$(EXEEXT): $(dox_operators_OBJECTS) $(dox_operators_DEPENDENCIES) - @rm -f dox_operators$(EXEEXT) - $(CXXLINK) $(dox_operators_LDFLAGS) $(dox_operators_OBJECTS) $(dox_operators_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dox_functions.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dox_operators.Po@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(DATA) all-local -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-local distclean-tags - -dvi: dvi-am - -dvi-am: dvi-local - -html: html-am - -info: info-am - -info-am: - -install-data-am: - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-data-hook - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: pdf-local - -ps: ps-am - -ps-am: ps-local - -uninstall-am: uninstall-info-am uninstall-local - -.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ - clean-generic clean-libtool clean-noinstPROGRAMS ctags \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-local distclean-tags distdir dvi \ - dvi-am dvi-local html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am pdf-local \ - ps ps-am ps-local tags uninstall uninstall-am \ - uninstall-info-am uninstall-local - - -# some depencies -Doxyfile: Doxyfile.in -footer.html: footer.html.in -tvmet.sty: tvmet.sty.in - -# file creating rules; not needed every time -@CONFIG_DOC_TRUE@operators.dox: dox_operators -@CONFIG_DOC_TRUE@ ./dox_operators > operators.dox - -@CONFIG_DOC_TRUE@functions.dox: dox_functions -@CONFIG_DOC_TRUE@ ./dox_functions > functions.dox - -# file creating rules -@CONFIG_DOC_TRUE@changelog.dox: @top_srcdir@/ChangeLog -@CONFIG_DOC_TRUE@ @echo "/** \page changelog ChangeLog" > $@ -@CONFIG_DOC_TRUE@ @echo "\verbatim" >> $@ -@CONFIG_DOC_TRUE@ cat $< >> $@ -@CONFIG_DOC_TRUE@ @echo "\endverbatim" >> $@ -@CONFIG_DOC_TRUE@ @echo "*/" >> $@ - -@CONFIG_DOC_TRUE@news.dox: @top_srcdir@/NEWS -@CONFIG_DOC_TRUE@ @echo "/** \page news News" > $@ -@CONFIG_DOC_TRUE@ @echo "\verbatim" >> $@ -@CONFIG_DOC_TRUE@ cat $< >> $@ -@CONFIG_DOC_TRUE@ @echo "\endverbatim" >> $@ -@CONFIG_DOC_TRUE@ @echo "*/" >> $@ - -@CONFIG_DOC_TRUE@credits.dox: @top_srcdir@/THANKS -@CONFIG_DOC_TRUE@ @echo "/** \page credits Credits" > $@ -@CONFIG_DOC_TRUE@ @echo "\verbatim" >> $@ -@CONFIG_DOC_TRUE@ cat $< >> $@ -@CONFIG_DOC_TRUE@ @echo "\endverbatim" >> $@ -@CONFIG_DOC_TRUE@ @echo "*/" >> $@ - -@CONFIG_DOC_TRUE@install.dox: @top_srcdir@/INSTALL -@CONFIG_DOC_TRUE@ @echo "/** \page basic_install INSTALL" > $@ -@CONFIG_DOC_TRUE@ @echo "\verbatim" >> $@ -@CONFIG_DOC_TRUE@ cat $< >> $@ -@CONFIG_DOC_TRUE@ @echo "\endverbatim" >> $@ -@CONFIG_DOC_TRUE@ @echo "*/" >> $@ - -@CONFIG_DOC_TRUE@all-local: doxygen-api - -# need's LaTeX style, since we use an own style for LaTeX -# which is required for generating formulas in HTML too. -# Doxygen LaTeX batchmode doesn't solves the problem right here. -@CONFIG_DOC_TRUE@doxygen-html-dir: -@CONFIG_DOC_TRUE@ @if test ! -d ./html; then mkdir ./html; fi - -@CONFIG_DOC_TRUE@doxygen-api: doxygen-html-dir Doxyfile $(DOXY_HTML_SRC) -@CONFIG_DOC_TRUE@ @echo "Making HTML manual" -@CONFIG_DOC_TRUE@ @cp @builddir@/tvmet.sty ./html/ -@CONFIG_DOC_TRUE@ @DOXYGEN@ $(DOXYGEN_OPTS) -@CONFIG_DOC_TRUE@ @$(RM) -f ./html/tvmet.sty - -@CONFIG_DOC_TRUE@all-local: $(noinst_DATA) - -@CONFIG_DOC_TRUE@dvi-local: -@CONFIG_DOC_TRUE@ps-local: -@CONFIG_DOC_TRUE@pdf-local: $(DOC_API_PDF) - -@CONFIG_DOC_TRUE@$(DOC_API_PDF): Doxyfile $(DOXY_LTEX_SRC) -@CONFIG_DOC_TRUE@ @if test -d ./latex; then \ -@CONFIG_DOC_TRUE@ echo "Making PDF manual"; \ -@CONFIG_DOC_TRUE@ if test -f $@; then \ -@CONFIG_DOC_TRUE@ $(RM) $@; \ -@CONFIG_DOC_TRUE@ fi; \ -@CONFIG_DOC_TRUE@ TEXINPUTS=$(TEXINPUTS_PATH) $(MAKE) -C ./latex refman.pdf; \ -@CONFIG_DOC_TRUE@ $(LN_S) ./latex/refman.pdf $@; \ -@CONFIG_DOC_TRUE@ fi - -# -# misc hooks -# -@CONFIG_DOC_TRUE@distclean-local: -@CONFIG_DOC_TRUE@ @rm -f $(DOXY_BUILD) -@CONFIG_DOC_TRUE@ @if test -f $(DOC_API_PDF); then \ -@CONFIG_DOC_TRUE@ $(RM) -f $(DOC_API_PDF); \ -@CONFIG_DOC_TRUE@ fi -@CONFIG_DOC_TRUE@ @if test -d html; then \ -@CONFIG_DOC_TRUE@ $(RM) -rf html; \ -@CONFIG_DOC_TRUE@ fi -@CONFIG_DOC_TRUE@ @if test -d latex; then \ -@CONFIG_DOC_TRUE@ $(RM) -rf latex; \ -@CONFIG_DOC_TRUE@ fi -@CONFIG_DOC_TRUE@ @if test -d rtf; then \ -@CONFIG_DOC_TRUE@ $(RM) -rf rtf; \ -@CONFIG_DOC_TRUE@ fi -@CONFIG_DOC_TRUE@ @if test -d man; then \ -@CONFIG_DOC_TRUE@ $(RM) -rf man; \ -@CONFIG_DOC_TRUE@ fi - -@CONFIG_DOC_TRUE@doc-dist: doxygen-api -@CONFIG_DOC_TRUE@ echo "please wait while archiving the html docs."; \ -@CONFIG_DOC_TRUE@ tar cf - -C ./html . | bzip2 --best -c > $(PACKAGE)-docs-$(VERSION).tar.bz2 - -# Automake's "distcheck" is sensitive to having files left over -# after "make uninstall", so we have to clean up the install hook. -@CONFIG_DOC_TRUE@uninstall-local: -@CONFIG_DOC_TRUE@ @if test -d $(TVMET_DOC_DIR); then \ -@CONFIG_DOC_TRUE@ rm -rf $(TVMET_DOC_DIR); \ -@CONFIG_DOC_TRUE@ fi - -# Install hooks -@CONFIG_DOC_TRUE@make-install-dirs: -@CONFIG_DOC_TRUE@ @if test '!' -d $(TVMET_DOC_DIR); then \ -@CONFIG_DOC_TRUE@ $(mkinstalldirs) $(TVMET_DOC_DIR); \ -@CONFIG_DOC_TRUE@ fi - -@CONFIG_DOC_TRUE@install-data-hook: make-install-dirs -@CONFIG_DOC_TRUE@ @echo Installing documentations into $(TVMET_DOC_DIR) -@CONFIG_DOC_TRUE@ @echo "install html" -@CONFIG_DOC_TRUE@ @$(INSTALL_DATA) @top_builddir@/doc/html/* $(TVMET_DOC_DIR) - -@CONFIG_DOC_FALSE@doc-dist: -@CONFIG_DOC_FALSE@install-data-hook: - -# -------------------------------------------------------- -# in progress: -# make refman twoside -twoside: - class=`cat latex/refman.tex | grep documentclass` - newclass=`echo $$class | sed -e 's/twoside,//' -e 's/\[/\[twoside,/'` - @echo "class:" $$class - @echo "newclass:" $$newclass - cat latex/refman.tex | sed 's/$$class/$$newclass/' >foo -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/tvmet-1.7.1/doc/Util.h b/tvmet-1.7.1/doc/Util.h deleted file mode 100644 index db38b4ee6..000000000 --- a/tvmet-1.7.1/doc/Util.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Util.h,v 1.5 2003/12/19 18:01:37 opetzold Exp $ - */ - -#ifndef TVMET_DOC_UTIL_H -#define TVMET_DOC_UTIL_H - -#include -#include - -struct Function { - Function() { } - virtual ~Function() { } - virtual const char* name() const = 0; - virtual const char* description() const = 0; - virtual bool int_only() const = 0; - static const char* group() { return "_function"; } - static const char* group_unary() { return "_unary_function"; } - static const char* group_binary() { return "_binary_function"; } - template static Stream& doxy_groups(Stream& os) { - os << "/**\n" - << " * \\defgroup " << group() << " Global Functions\n" - << " */\n\n"; - os << "/**\n" - << " * \\defgroup " << group_unary() << " Global Unary Functions\n" - << " * \\ingroup " << group() << "\n" - << " */\n\n"; - os << "/**\n" - << " * \\defgroup " << group_binary() << " Global Binary Functions\n" - << " * \\ingroup " << group() << "\n" - << " */\n\n"; - os << "/**\n" - << " * \\defgroup " << "_trinary_function" << " Global Trinary Functions\n" - << " * \\ingroup " << group() << "\n" - << " */\n\n"; - return os; - } - -}; - -class BinaryFunction : public Function { -public: - BinaryFunction(const char* s, const char* d, bool i = false) - : m_name(s), m_description(d), m_int_only(i) { } - const char* name() const { return m_name; } - const char* description() const { return m_description; } - const char* group() const { return group_binary(); } - bool int_only() const { return m_int_only; } -private: - const char* m_name; - const char* m_description; - bool m_int_only; -}; - -class UnaryFunction : public Function { -public: - UnaryFunction(const char* s, const char* d, bool i = false) - : m_name(s), m_description(d), m_int_only(i) { } - virtual ~UnaryFunction() { } - const char* name() const { return m_name; } - const char* description() const { return m_description; } - const char* group() const { return group_unary(); } - bool int_only() const { return m_int_only; } -private: - const char* m_name; - const char* m_description; - bool m_int_only; -}; - -struct Operator { - Operator() { } - virtual ~Operator() { } - virtual const char* symbol() const = 0; - virtual const char* description() const = 0; - virtual bool int_only() const = 0; - static const char* group() { return "_operator"; } - static const char* group_unary() { return "_unary_operator"; } - static const char* group_binary() { return "_binary_operator"; } - template static Stream& doxy_groups(Stream& os) { - os << "/**\n" - << " * \\defgroup " << group() << " Global Operators\n" - << " */\n\n"; - os << "/**\n" - << " * \\defgroup " << group_binary() << " Global Binary Operators\n" - << " * \\ingroup " << group() << "\n" - << " */\n\n"; - os << "/**\n" - << " * \\defgroup " << group_unary() << " Global Unary Operators\n" - << " * \\ingroup " << group() << "\n" - << " */\n\n"; - return os; - } -}; - -class BinaryOperator : public Operator { -public: - BinaryOperator(const char* s, const char* d, bool i = false) - : m_symbol(s), m_description(d), m_int_only(i) { } - virtual ~BinaryOperator() { } - const char* symbol() const { return m_symbol; } - const char* description() const { return m_description; } - const char* group() const { return group_binary(); } - bool int_only() const { return m_int_only; } -private: - const char* m_symbol; - const char* m_description; - bool m_int_only; -}; - -class UnaryOperator : public Operator { -public: - UnaryOperator(const char* s, const char* d, bool i = false) - : m_symbol(s), m_description(d), m_int_only(i) { } - virtual ~UnaryOperator() { } - const char* symbol() const { return m_symbol; } - const char* description() const { return m_description; } - const char* group() const { return group_unary(); } - bool int_only() const { return m_int_only; } -private: - const char* m_symbol; - const char* m_description; - bool m_int_only; -}; - -class DataType { -public: - DataType(const char* s, const char* d, bool i = false) - : m_name(s), m_description(d), m_is_int(i){ } - const char* name() const { return m_name; } - const char* description() const { return m_description; } - bool is_int() const { return m_is_int; } -private: - const char* m_name; - const char* m_description; - bool m_is_int; -}; - -class Type -{ -public: - Type() { - datatypes.push_back( DataType("int", "int", true) ); - datatypes.push_back( DataType("float", "float") ); - datatypes.push_back( DataType("double", "double") ); -#ifdef TVMET_HAVE_LONG_DOUBLE - datatypes.push_back( DataType("long double", "long double") ); -#endif // HAVE_LONG_DOUBLE -#ifdef EIGEN_USE_COMPLEX - datatypes.push_back( DataType("const std::complex&", "std::complex") ); -#endif // HAVE_COMPLEX - } - - virtual ~Type() { } - -public: - template - Stream& header(Stream& os) const { - os << "namespace tvmet {\n\n"; - return os; - } - - template - Stream& footer(Stream& os) const { - os << "\n} // namespace tvmet\n\n"; - return os; - } - -public: - typedef std::vector< DataType >::const_iterator const_iterator; - -public: - const_iterator begin() const { return datatypes.begin(); } - const_iterator end() const { return datatypes.end(); } - -private: - std::vector< DataType > datatypes; -}; - -#endif // TVMET_DOC_UTIL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/doc/aat.png b/tvmet-1.7.1/doc/aat.png deleted file mode 100644 index 2e2a536ad1961a0477ac9a231c204794b25c58a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19009 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 Kbn|o&H~t?sm%4cX diff --git a/tvmet-1.7.1/doc/ata.png b/tvmet-1.7.1/doc/ata.png deleted file mode 100644 index 0e4d52fbd2532c0b0f546884d51fce94f282f363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18952 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 diff --git a/tvmet-1.7.1/doc/axpy.png b/tvmet-1.7.1/doc/axpy.png deleted file mode 100644 index d537720c6d1da7cef75ab552fff7f78bdca20d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23093 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

|MLza_z}u-%LS^4_70 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 T_IJ?37&vWy*6htmkMREis;uc0 diff --git a/tvmet-1.7.1/doc/benchmark.dox b/tvmet-1.7.1/doc/benchmark.dox deleted file mode 100644 index fa60b48a7..000000000 --- a/tvmet-1.7.1/doc/benchmark.dox +++ /dev/null @@ -1,52 +0,0 @@ -/* - * $Id: benchmark.dox,v 1.8 2004/04/10 04:58:35 opetzold Exp $ - */ - -/** - - \page benchmark Benchmark - - Prior to version 0.8.0, tvmet had benchmark results listed here. Benchmarking - isn't as easy as had been thought. The compiler's optimizer is very tricky - - even more than I am. 8( To outwit the optimizer takes time - I would rather - put the time into tvmet, itself. - - Laurent Plagne has created some benchmarks using tvmet and other libraries, - please have a look at - opencascade. - - The following benchmarks are done on my - Intel(R) Pentium(R) 4 CPU 2.40GHz - Linux box: - - \ref bench_axpy - - \ref bench_matrix_matrix - - \ref bench_matrix_vector - - \ref bench_aat - - \ref bench_ata - - using a patched version of BTL 20030124. The patch is necessary to be able - to compile tvmet due to the high inline level used here. The patch is - distributed with the package. - - \section bench_axpy axpy - \image html axpy.png "axpy" - - \section bench_matrix_matrix Matrix-Matrix - \image html matrix_matrix.png "Matrix-Matrix" - - \section bench_matrix_vector Matrix-Vector - \image html matrix_vector.png "Matrix-Vector" - - \section bench_aat MMt - \image html aat.png "M M^t" - - \section bench_ata MtM - \image html ata.png "M^t M" - -*/ - - -// Local Variables: -// mode:c++ -// End: -// LocalWords: BTL GHz Plagne diff --git a/tvmet-1.7.1/doc/build.dox b/tvmet-1.7.1/doc/build.dox deleted file mode 100644 index 51946daf4..000000000 --- a/tvmet-1.7.1/doc/build.dox +++ /dev/null @@ -1,199 +0,0 @@ -/* - * $Id: build.dox,v 1.14 2005/04/07 15:59:19 opetzold Exp $ - */ - -/** - \page build Download, Configuration, Build and Installation of the library - -

Contents:

- - \ref download - - \ref configure_unix - - \ref install_unix - - \ref install_win - - - - - \section download Download tvmet - -

- You can download %tvmet here. - For the regression tests you will need CppUnit. - While these tests are not mandatory, they are recommended. -

- -

- For the API documentation you will also need doxygen, - maybe you want a graphical class hierarchy, class graph etc you need - the 'dot' tool of GraphViz - to draw the miscellaneous graphs. -

- - - - - - \section configure_unix Configure tvmet on unix - - See the \ref basic_install file for general informations. - - NEW Starting with tvmet version 1.5.0 the configuration options - has been changed! - -
-
--enable-optimize
-
This affects the compiler optimization options. Machine specific - compiler flags are switched on as well. The TVMET_OPTIMIZE - symbol is defined, which uses the gcc's - __attribute__((always_inline)). -
-
- -
-
--enable-debug
-
Enables debugging mode for %tvmet. This affects the compiler - options and preprocessor definitions. The TVMET_DEBUG - symbol is defined. If you compile %tvmet from another source directory - which defines DEBUG, then TVMET_DEBUG will be - not defined (This behavior differs from release less than 0.6.0). - Please have a look at the \ref debug section of the \ref faq. -
-
- -
-
--enable-warnings
-
This affects the compiler warning options. The warning level is on - a high level for default!
-
- -
-
--enable-docs
-
Enables generation of API documentation using doxygen. - If the configure scripts founds the GraphViz - 'dot' tool it will be used. Further more an PDF file of the API - will be generated using doxygen too. -
-
- -
-
--enable-verbose-latex
-
Uses LaTeX non-stop mode for generating the PDF file of tvmet's - API documentation. -
-
- -
-
--disable-cppunit
-
Disables the regression/unit test. For these tests you need an installed - CppUnit. -
-
- -
-
--with-cxx=compiler
-
Set the C++ compiler to compiler and options. The known compiler are - the GNU g++ (default), Intel icc, Kai C++ KCC, Portland Group C++ pgCC. - Please have a look at the \ref compiler page. -
-
- - - - - - \section install_unix Build and Installation of tvmet on unix - - The build target for make are: - -
-
all
-
Makes tvmet ready for installation.
-
- -
-
docs
-
Makes the documentation using doxygen. Depends on the options given - to the configure script, the documentation are HTML and PDF/LaTeX.
-
- -
-
check
-
Build and run the regression tests (needs CppUnit).
-
- -
-
install
-
Installs tvmet.
-
- -
-
uninstall
-
Do you really want this? :-)
-
- - Further more inside the examples directory there is the target: - -
-
examples
-
Build tvmet's examples. - - At this date the example directory contains simple examples - for matrix, vector and matrix-vector operations. Further more - some sources which shows the use for expression tree printing - (expands the expression tree used). -
-
- - - Files will be installed in the following directories: - -
    -
  • Executables    -> ${prefix}/bin
  • -
  • Docs           -> ${prefix}/share/doc/tvmet-${version}
  • -
  • Man pages      -> ${prefix}/man
  • -
  • Header file    -> ${prefix}/include/tvmet
  • -
- - Default value for prefix is /usr/local but you may change it - with --prefix option to the configure script (see above). - - - - - \section install_win Build and Installation of tvmet on MS Windows - - First, the windows version used doesn't matter - the compiler is your - tool. The compiler has to understand the high level C++ style of - tvmet. - - Second, tvmet comes with pre-configured files for the windows compiler. - Therefore you don't need to follow the configure and build procedure. An - exception is the cygwin and - MinGW environment - since they emulate the unix environment on windows - they follow the - unix style process therefore. - - Well, simply copy the tvmet source tree complete or only the include - directory to a location of your choice and include the path to your - compiler environment. Thats all. - - To build the regression tests it's on your own to build support for - cppunit and create the - appropriate sub-project. tvmet does not deliver Microsoft Visual Studio - project files. - - If of interest the config file for Visual Studio can be found on - tvmet/config/config-vc71.h. There are all compiler quirks and - defines needed. - - - \sa \ref vc71 - - -*/ - - -// Local Variables: -// mode:c++ -// End: -// LocalWords: CppUnit GraphViz doxygen diff --git a/tvmet-1.7.1/doc/compiler.dox b/tvmet-1.7.1/doc/compiler.dox deleted file mode 100644 index 4bcd90081..000000000 --- a/tvmet-1.7.1/doc/compiler.dox +++ /dev/null @@ -1,375 +0,0 @@ -/* - * $Id: compiler.dox,v 1.24 2005/03/09 12:05:19 opetzold Exp $ - */ - -/** - \page compiler Compiler Support - -

Contents:

- - \ref requirements - - \ref gcc - - \ref kcc - - \ref pgCC - - \ref intel - - \ref vc71 - - \section requirements General compiler Requirements - - This library is designed for portability - no compiler specific extensions - are used. Nevertheless, there are a few requirements: (These are all a part - of the C++ standard.) - - - Support for the mutable keyword is required. This is used by the - CommaInitializer only. - - - The typename keyword is used exhaustively here. - - - The namespace concept is required. The tvmet library is itself is a - namespace. To avoid collisions of operators, there is also an element_wise - namespace within tvmet. - - - Partial specialization is needed for the extrema functions min and max - to distinguish between vectors and matrices. This allows tvmet to return - an object with a specific behavior. (The location of an extremum in a - matrix has a (row, column) position whereas a vector extremum has only a - single index for its position). - - \section gcc The GNU Compiler Collection - - The GNU compiler collection is mainly used for - developing this library. Moreover, it does compile the library the fastest. - - \subsection gcc2953 GNU C++ Compiler v2.95.3 - - Gcc v2.95.3 is the last official release of the version 2 series from gnu.org. - Since this compiler features the \ref requirements it does work, but only - partial. - - There are certain difficulties - see \ref ambiguous_overload (also, please - read about \ref gcc296). Furthermore, there are problems with functions and - operators declared in the namespace element_wise - the - compiler doesn't seem to find them--even though the compiler does know - about namespace tvmet. It appears to be a problem with nested namespaces and - the compiler's ability to perform function/operator lookup, especially during - regression tests: matrix /= matrix compiles inside a single - file but not at the regression tests--which is a contradiction in terms. - - Porting to gcc v2.95.3 requires a lot of knowledge and effort--unfortunately, - I don't have enough of either. The examples do compile and the regression - tests build partially. - - Matrix and vector operators are working, but don't expect too much. - - \subsection gcc296 GNU C++ Compiler v2.96 (Rh7.x, MD8.x) - - This compiler isn't an official release of the GNU Compiler group but shipped - by Red Hat and Co. - - Blitz++ is using a hasFastAccess() flag to perform a check for the use of - _bz_meta_vecAssign::fastAssign (without bounds checking) or - _bz_meta_vecAssign::assign (with bounds checking). This - isn't really necessary for operations on blitz::TinyVector, since it's - always true. Nevertheless, it is important for the produced asm code using - the gcc-c++-2.96-0.48mdk. Generally the code for Blitz++ using the gcc-2.96 - is better than tvmet because of this (tested!). - - I got into trouble with stl_relops.h where miscellaneous operators are defined. A - simple define of __SGI_STL_INTERNAL_RELOPS in the config header doesn't solve - the problem, only the commented out header version, see \ref - ambiguous_overload. Because of this problem, the regression tests don't - compile with this version. Projects with do not use the relational - operators are not affected. - - It seems that the inlining performed by this compiler collection isn't very - smart. I got a lot of warnings: can't inline call to ... So, it would be - best to use the \ref gcc30x and later compilers. - - \subsection gcc30x GNU C++ Compiler v3.0.x - - These compiler produce better code than the \ref gcc296! Even the problems - with blitz++ fastAssign have vanished. And this compiler conforms to the - standard. The regression tests does compile and run successfully. - - Due to the nature of ET and MT there is a need for a high level of inlining. - The v3.0.x seems to do this well as compared to the v2.9x compilers which - produce inline warnings. - - This compiler works great with the - STLPort-4.5.3 - implementation of the STL/C++ Library, Tiny Vector and Matrix template library - and cpp-unit. - - \subsection gcc31x GNU C++ Compiler v3.1 - - %tvmet does compile with this new GNU C++ compiler. The produced code looks - as good as the code created by \ref gcc30x. (Does anyone have time to make - a benchmark?) - - The primary goal is conformance to the standard ISO/IEC 14882:1998. - - \subsection gcc32x GNU C++ Compiler v3.2.x - - The once again changed Application Binary Interface (ABI) doesn't affect - tvmet since it isn't a binary library--it's only compiled templates inside - the client code. - - There are some problems with the GNU C++ compiler collection on the - regression test due to some bugs (IMO), \sa \ref regressiontest_failed. - - \subsection gcc33x GNU C++ Compiler v3.3 - - Tested and works fine. Only some warnings on failed inlining which doesn't - concern tvmet directly. - - Anyway, here the code from examples/ray.cc on gcc 3.3.3 using - -O2 -DTVMET_OPTIMIZE - - \par Assembler (IA-32 Intel® Architecture): - \code - movl 16(%ebp), %edx - movl 12(%ebp), %ebx - movl 8(%ebp), %esi - fldl 8(%edx) - fldl 16(%edx) - fmull 16(%ebx) - fxch %st(1) - movl %ebx, -24(%ebp) - fmull 8(%ebx) - movl %edx, -32(%ebp) - fldl (%edx) - fmull (%ebx) - fxch %st(1) - movl %edx, -60(%ebp) - movl %edx, -12(%ebp) - faddp %st, %st(2) - faddp %st, %st(1) - fadd %st(0), %st - fstpl -56(%ebp) - movl -56(%ebp), %ecx - movl -52(%ebp), %eax - movl %ecx, -20(%ebp) - movl %eax, -16(%ebp) - movl %ecx, -40(%ebp) - movl %eax, -36(%ebp) - movl %ecx, -68(%ebp) - movl %eax, -64(%ebp) - fldl (%edx) - fmull -20(%ebp) - fsubrl (%ebx) - fstpl (%esi) - fldl 8(%edx) - fmull -20(%ebp) - fsubrl 8(%ebx) - fstpl 8(%esi) - fldl 16(%edx) - fmull -20(%ebp) - fsubrl 16(%ebx) - fstpl 16(%esi) - addl $64, %esp - popl %ebx - popl %esi - popl %ebp - ret - \endcode - - \subsection gcc34x GNU C++ Compiler v3.4.x - - The compiler 3.4.3 works fine, starting with tvmet release 1.7.1. The problem is - the correct syntax for the CommaInitializer template declaration and - implementation. - - There is no assembler output for our examples/ray.cc, since I don't - have this compiler yet (yes, I need to update my linux system ;-) - - - \section kcc Kai C++ - - This has not been tested. Unfortunately Kai's compiler is no longer shipped - -- one should use the Intel compiler instead - (see here). - - If you have used it successfully including regression and/or benchmark tests, - please give me an answer. - - \section pgCC Portland Group Compiler Technology - - \subsection pgCC32 Portland Group C++ 3.2 - - The Portland Group C++ compiler is shipped - with the RogueWave Standard C++ Library which provides conformance to the - standard. Unfortunately, the <cname> C library wrapper headers and the C++ - overloads of the math functions are not provided on all platforms, see - . The download evaluation version 3.2-4 for - Linux is affected for example. At first glance, it does compile with pgCC - since it has has the great EDG front-end. - - Maybe there is a solution with other standard library implementations like - STLPort (On a quick try the STL Port - doesn't recognize the pgCC). If you know more about this, please let me know. - - Anyway, the code produced is very poor even if I use high inlining levels - like the command line option -Minline=levels:100 which increases the compile - time dramatically! The benchmark tests have not been done. Unfortunately, - my trial period has expired. I haven't any idea if this compiler will pass - the regression tests. - - \subsection pgCC51 Portland Group C++ 5.1 - - The Portland Group C++ compiler is shipped - with the STLport Standard C++ Library, cool! - - The code produced isn't very compact compared with the intel or gnu compiler. - Anyway it works, but the compiler time increases dramatically - even on higher inline levels. - - - \section intel Intel Compiler - - \subsection icc5 Intel Compiler v5.0.1 - - This compiler complains even more than gcc-3.0.x regarding template - specifiers (e.g. correct spaces for template arguments to std::complex are - needed even when not instanced). - - The produced code looks good but, I haven't done a benchmark to compare it - with the gcc-3.0.x since the compile time increases for the benchmark test - dramatically. - - I have not run any regression tests due to the compile time needed by my - AMD K6/400 Linux box ... - - \subsection icc6 Intel Compiler v6.0.x - - Should work, but I haven't tested it. - - \subsection icc7 Intel Compiler v7.x - - This compiler is well supported by tvmet and passes the regression tests - without any failure - as opposed to the GNU C++ compiler collection. - - \subsection icc8 Intel Compiler v8.x - - No regression tests are done - reports are welcome. I'm not expecting - problems. Anyway, this versions uses pure macros for IEEE math isnan and - isinf. This prevents overwriting with tvmet's functions. Therefore - this functions are disabled after tvmet release 1.4.1. The code produced - is even on examples/ray.cc more compact than the \ref gcc33x. - - Anyway, here the code from examples/ray.cc using - -O2 -DTVMET_OPTIMIZE - - \par Assembler (IA-32 Intel® Architecture): - \code - movl 4(%esp), %ecx - movl 8(%esp), %edx - movl 12(%esp), %eax - fldl (%edx) - fmull (%eax) - fldl 8(%edx) - fmull 8(%eax) - fldl 16(%edx) - fmull 16(%eax) - faddp %st, %st(1) - faddp %st, %st(1) - fldl (%eax) - fxch %st(1) - fadd %st(0), %st - fmul %st, %st(1) - fxch %st(1) - fsubrl (%edx) - fstpl (%ecx) - fldl 8(%eax) - fmul %st(1), %st - fsubrl 8(%edx) - fstpl 8(%ecx) - fldl 16(%eax) - fmulp %st, %st(1) - fsubrl 16(%edx) - fstpl 16(%ecx) - ret - \endcode - - - - - \section vc71 Microsoft Visual C++ v7.1 - - \htmlonly - - \endhtmlonly - \latexonly - Robi Carnecky - \endlatexonly - has reported the success on tvmet using Visual C++ v7.1. At this - release of tvmet there are some warnings left - the work is on - progress. - - The Microsoft Visual C++ Toolkit 2003 - and Visual C++ prior 7.1 do not compile - you will get an undefined - internal error unfortunally. - - Anyway, here the code from examples/ray.cc: - - \par Assembler (IA-32 Intel® Architecture, no SSE2): - \code - push ebp - mov ebp, esp - and esp, -8 ; fffffff8H - sub esp, 28 ; 0000001cH - mov eax, DWORD PTR _ray$[ebp] - mov ecx, DWORD PTR _surfaceNormal$[ebp] - fld QWORD PTR [eax+16] - fmul QWORD PTR [ecx+16] - push ebx - fld QWORD PTR [eax+8] - push esi - fmul QWORD PTR [ecx+8] - push edi - mov edi, DWORD PTR $T35206[esp+52] - faddp ST(1), ST(0) - mov DWORD PTR $T35027[esp+60], edi - fld QWORD PTR [eax] - pop edi - fmul QWORD PTR [ecx] - faddp ST(1), ST(0) - fadd ST(0), ST(0) - fstp QWORD PTR $T35206[esp+36] - mov esi, DWORD PTR $T35206[esp+40] - mov edx, DWORD PTR $T35206[esp+36] - mov ebx, DWORD PTR $T35265[esp+40] - mov DWORD PTR $T35027[esp+44], edx - mov edx, DWORD PTR _reflection$[ebp] - mov DWORD PTR $T35027[esp+48], esi - fld QWORD PTR $T35027[esp+44] - fmul QWORD PTR [ecx] - pop esi - mov DWORD PTR $T35027[esp+36], ebx - pop ebx - fsubr QWORD PTR [eax] - fstp QWORD PTR [edx] - fld QWORD PTR $T35027[esp+36] - fmul QWORD PTR [ecx+8] - fsubr QWORD PTR [eax+8] - fstp QWORD PTR [edx+8] - fld QWORD PTR $T35027[esp+36] - fmul QWORD PTR [ecx+16] - fsubr QWORD PTR [eax+16] - fstp QWORD PTR [edx+16] - mov esp, ebp - pop ebp - \endcode - - \sa \ref regressiontest_failed - \sa \ref install_win -*/ - - -// Local Variables: -// mode:c++ -// End: diff --git a/tvmet-1.7.1/doc/dox_functions.cc b/tvmet-1.7.1/doc/dox_functions.cc deleted file mode 100644 index ac85787e4..000000000 --- a/tvmet-1.7.1/doc/dox_functions.cc +++ /dev/null @@ -1,448 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: dox_functions.cc,v 1.8 2003/12/19 18:01:37 opetzold Exp $ - */ - -#include - -#include - -#include "Util.h" - -class FunctionBase -{ -public: - FunctionBase() { - m_binary_functions.push_back( BinaryFunction("atan2", "arcus tangent of two variables") ); - m_binary_functions.push_back( BinaryFunction("drem", "floating-point remainder") ); - m_binary_functions.push_back( BinaryFunction("fmod", "floating-point remainder") ); - m_binary_functions.push_back( BinaryFunction("hypot", "Euclidean distance") ); - m_binary_functions.push_back( BinaryFunction("jn", "Bessel") ); - m_binary_functions.push_back( BinaryFunction("yn", "Bessel") ); - m_binary_functions.push_back( BinaryFunction("pow", "power") ); - - m_unary_functions.push_back( UnaryFunction("abs", "absolute value") ); - m_unary_functions.push_back( UnaryFunction("cbrt", "cube root") ); - m_unary_functions.push_back( UnaryFunction("floor", "round") ); - m_unary_functions.push_back( UnaryFunction("rint", "round") ); - m_unary_functions.push_back( UnaryFunction("sin", "sin") ); - m_unary_functions.push_back( UnaryFunction("sinh", "sinh") ); - m_unary_functions.push_back( UnaryFunction("cos", "cos") ); - m_unary_functions.push_back( UnaryFunction("cosh", "cosh") ); - m_unary_functions.push_back( UnaryFunction("asin", "asin") ); - m_unary_functions.push_back( UnaryFunction("acos", "acos") ); - m_unary_functions.push_back( UnaryFunction("atan", "atan") ); - m_unary_functions.push_back( UnaryFunction("exp", "exponential") ); - m_unary_functions.push_back( UnaryFunction("log", "logarithmic") ); - m_unary_functions.push_back( UnaryFunction("log10", "logarithmic") ); - m_unary_functions.push_back( UnaryFunction("sqrt", "sqrt") ); -#ifdef TVMET_HAVE_IEEE_MATH - m_unary_functions.push_back( UnaryFunction("asinh", "IEEE Math asinh") ); - m_unary_functions.push_back( UnaryFunction("acosh", "IEEE Math acosh") ); - m_unary_functions.push_back( UnaryFunction("atanh", "IEEE Math atanh") ); - m_unary_functions.push_back( UnaryFunction("expm1", "IEEE Math expm1") ); - m_unary_functions.push_back( UnaryFunction("log1p", "IEEE Math log1p") ); - m_unary_functions.push_back( UnaryFunction("erf", "IEEE Math erf") ); - m_unary_functions.push_back( UnaryFunction("erfc", "IEEE Math erfc") ); - m_unary_functions.push_back( UnaryFunction("isnan", "IEEE Math isnan. " - "Return nonzero value if X is a NaN.") ); - m_unary_functions.push_back( UnaryFunction("isinf", "IEEE Math isinf. " - "Return nonzero value if X is positive or negative infinity.") ); - m_unary_functions.push_back( UnaryFunction("isfinite", "fIEEE Math isfinite. " - "Return nonzero value if X is not +-Inf or NaN.") ); - m_unary_functions.push_back( UnaryFunction("j0", "IEEE Math Bessel") ); - m_unary_functions.push_back( UnaryFunction("j1", "IEEE Math Bessel") ); - m_unary_functions.push_back( UnaryFunction("y0", "IEEE Math Bessel") ); - m_unary_functions.push_back( UnaryFunction("y1", "IEEE Math Bessel") ); - m_unary_functions.push_back( UnaryFunction("lgamma", "IEEE Math lgamma") ); -#endif - } - - virtual ~FunctionBase() { } - -public: - template - Stream& header(Stream& os) const { - m_type.header(os); - return os; - } - - template - Stream& footer(Stream& os) const { - m_type.footer(os); - return os; - } - - template - Stream& binary(Stream& os) const { - return os; - } - - template - Stream& unary(Stream& os) const { - return os; - } - -public: - typedef std::vector< BinaryFunction >::const_iterator bfun_iterator; - typedef std::vector< UnaryFunction >::const_iterator ufun_iterator; - -public: - virtual const std::vector< BinaryFunction >& bfun() const { return m_binary_functions; } - virtual const std::vector< UnaryFunction >& ufun() const { return m_unary_functions; } - -protected: - std::vector< BinaryFunction > m_binary_functions; - std::vector< UnaryFunction > m_unary_functions; - Type m_type; -}; - - - -class XprFunctions : public FunctionBase -{ -public: - XprFunctions() { } - -public: - template - Stream& operator()(Stream& os) const { - header(os); - - binary(os); - binary2(os); - unary(os); - - footer(os); - - return os; - } - -public: - template - Stream& header(Stream& os) const { - FunctionBase::header(os); - os << "//\n" - << "// XprFunctions.h\n" - << "//\n\n"; - return os; - } - - // binary functions - template - Stream& binary(Stream& os) const { - FunctionBase::binary(os); - - for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const XprVector& lhs, const XprVector& rhs)\n" - << " * \\brief " << fun->description() << " function for two XprVector.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn " << fun->name() << "(const XprMatrix& lhs, const XprMatrix& rhs)\n" - << " * \\brief " << fun->description() << " function for two XprMatrix.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - } - return os; - } - - // binary functions with pod and std::complex<> - template - Stream& binary2(Stream& os) const { - for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) { - for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const XprVector& lhs, " << tp->name() << " rhs)\n" - << " * \\brief " << fun->description() << " function between XprVector and " << tp->description() << ".\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - -// os << "/**\n" -// << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const XprVector& rhs)\n" -// << " * \\brief " << fun->description() << " function between " << tp->description() << " and XprVector.\n" -// << " * \\ingroup " << fun->group() << "\n" -// << " */\n\n"; - - os << "/**\n" - << " * \\fn " << fun->name() << "(const XprMatrix& lhs, " << tp->name() << " rhs)\n" - << " * \\brief " << fun->description() << " function between XprMatrix and " << tp->description() << ".\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - -// os << "/**\n" -// << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const XprMatrix& rhs)\n" -// << " * \\brief " << fun->description() << " function between " << tp->description() << " and XprMatrix.\n" -// << " * \\ingroup " << fun->group() << "\n" -// << " */\n\n"; - } - } - return os; - } - - // unary functions - template - Stream& unary(Stream& os) const { - FunctionBase::unary(os); - - for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const XprVector& rhs)\n" - << " * \\brief " << fun->description() << " function for XprVector\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn " << fun->name() << "(const XprMatrix& rhs)\n" - << " * \\brief " << fun->description() << " function for XprMatrix.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - } - return os; - } -}; - - - - -class VectorFunctions : public FunctionBase -{ -public: - VectorFunctions() { } - -public: - template - Stream& operator()(Stream& os) const { - header(os); - - binary(os); - binary2(os); - binary3(os); - unary(os); - - footer(os); - - return os; - } - -public: - template - Stream& header(Stream& os) const { - FunctionBase::header(os); - - os << "//\n" - << "// VectorFunctions.h\n" - << "//\n\n"; - return os; - } - - // binary functions - template - Stream& binary(Stream& os) const { - FunctionBase::binary(os); - - for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const Vector& lhs, const Vector& rhs)\n" - << " * \\brief " << fun->description() << " function for two Vector.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - } - return os; - } - - // binary functions with pod and std::complex<> - template - Stream& binary2(Stream& os) const { - for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) { - for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const Vector& lhs, " << tp->name() << " rhs)\n" - << " * \\brief " << fun->description() << " function on Vector and " << tp->description() << ".\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - -// os << "/**\n" -// << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const Vector& rhs)\n" -// << " * \\brief " << fun->description() << " function on " << tp->description() << " and Vector.\n" -// << " * \\ingroup " << fun->group() << "\n" -// << " */\n\n"; - } - } - return os; - } - - // binary functions with expressions - template - Stream& binary3(Stream& os) const { - for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const XprVector& lhs, const Vector& rhs)\n" - << " * \\brief " << fun->description() << " function on XprVector and Vector.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn " << fun->name() << "(const Vector& lhs, const XprVector& rhs)\n" - << " * \\brief " << fun->description() << " function on Vector and XprVector.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - } - return os; - } - - // unary functions - template - Stream& unary(Stream& os) const { - FunctionBase::unary(os); - - for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const Vector& rhs)\n" - << " * \\brief " << fun->description() << " function on Vector.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - } - return os; - } -}; - - - - -class MatrixFunctions : public FunctionBase -{ -public: - MatrixFunctions() { } - -public: - template - Stream& operator()(Stream& os) const { - header(os); - - binary(os); - binary2(os); - binary3(os); - unary(os); - - footer(os); - - return os; - } - -public: - template - Stream& header(Stream& os) const { - FunctionBase::header(os); - - os << "//\n" - << "// MatrixFunctions.h\n" - << "//\n\n"; - return os; - } - - // binary functions - template - Stream& binary(Stream& os) const { - FunctionBase::binary(os); - - for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const Matrix& lhs, const Matrix& rhs)\n" - << " * \\brief " << fun->description() << " function for two Matrizes.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - } - return os; - } - - // binary functions with pod and std::complex<> - template - Stream& binary2(Stream& os) const { - for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) { - for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const Matrix& lhs, " << tp->name() << " rhs)\n" - << " * \\brief " << fun->description() << " function on Matrix and " << tp->description() << ".\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - -// os << "/**\n" -// << " * \\fn " << fun->name() << "(" << tp->name() << " lhs, const Matrix& rhs)\n" -// << " * \\brief " << fun->description() << " function on " << tp->description() << " and Matrix.\n" -// << " * \\ingroup " << fun->group() << "\n" -// << " */\n\n"; - } - } - return os; - } - - // binary functions with expressions - template - Stream& binary3(Stream& os) const { - for(bfun_iterator fun = bfun().begin(); fun != bfun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const XprMatrix& lhs, const Matrix& rhs)\n" - << " * \\brief " << fun->description() << " function on XprMatrix and Matrix.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn " << fun->name() << "(const Matrix& lhs, const XprMatrix& rhs)\n" - << " * \\brief " << fun->description() << " function on Matrix and XprMatrix.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - } - return os; - } - - // unary functions - template - Stream& unary(Stream& os) const { - FunctionBase::unary(os); - - for(ufun_iterator fun = ufun().begin(); fun != ufun().end(); ++fun) { - os << "/**\n" - << " * \\fn " << fun->name() << "(const Matrix& rhs)\n" - << " * \\brief " << fun->description() << " function on Matrix.\n" - << " * \\ingroup " << fun->group() << "\n" - << " */\n\n"; - } - return os; - } -}; - - - -int main() -{ - XprFunctions xpr_fun; - VectorFunctions vec_fun; - MatrixFunctions mtx_fun; - - Function::doxy_groups(std::cout); - - xpr_fun(std::cout); - vec_fun(std::cout); - mtx_fun(std::cout); -} diff --git a/tvmet-1.7.1/doc/dox_operators.cc b/tvmet-1.7.1/doc/dox_operators.cc deleted file mode 100644 index 7c4da40b3..000000000 --- a/tvmet-1.7.1/doc/dox_operators.cc +++ /dev/null @@ -1,425 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: dox_operators.cc,v 1.6 2003/11/30 08:26:25 opetzold Exp $ - */ - -#include -#include -#include - -#include - -#include "Util.h" - -class OperatorBase -{ -public: - OperatorBase() { - m_binary_operators.push_back( BinaryOperator("+", "Addition") ); - m_binary_operators.push_back( BinaryOperator("-", "Subtraction") ); - m_binary_operators.push_back( BinaryOperator("*", "Multliply") ); - m_binary_operators.push_back( BinaryOperator("/", "Division") ); - m_binary_operators.push_back( BinaryOperator("%", "Modulo", true) ); - m_binary_operators.push_back( BinaryOperator("^", "Exclusive OR", true) ); - m_binary_operators.push_back( BinaryOperator("&", "AND", true) ); - m_binary_operators.push_back( BinaryOperator("|", "OR", true) ); - m_binary_operators.push_back( BinaryOperator("<<", "Left Shift", true) ); - m_binary_operators.push_back( BinaryOperator(">>", "Right Shift", true) ); - m_binary_operators.push_back( BinaryOperator(">", "Bigger") ); - m_binary_operators.push_back( BinaryOperator("<", "Lesser") ); - m_binary_operators.push_back( BinaryOperator(">=", "Bigger Equal") ); - m_binary_operators.push_back( BinaryOperator("<=", "Less Equal") ); - m_binary_operators.push_back( BinaryOperator("==", "Equal") ); - m_binary_operators.push_back( BinaryOperator("!=", "Not Equal") ); - m_binary_operators.push_back( BinaryOperator("&&", "Logical AND", true) ); - m_binary_operators.push_back( BinaryOperator("||", "Logical OR", true) ); - - m_unary_operators.push_back( UnaryOperator("!", "Logical Not", true) ); - m_unary_operators.push_back( UnaryOperator("~", "Bitwise Not", true) ); - m_unary_operators.push_back( UnaryOperator("-", "Negate") ); - } - - virtual ~OperatorBase() { } - -public: - template - Stream& header(Stream& os) const { - m_type.header(os); - return os; - } - - template - Stream& footer(Stream& os) const { - m_type.footer(os); - return os; - } - - template - Stream& binary(Stream& os) const { - return os; - } - - template - Stream& unary(Stream& os) const { - return os; - } - -public: - typedef std::vector< BinaryOperator >::const_iterator bop_iterator; - typedef std::vector< UnaryOperator >::const_iterator uop_iterator; - -public: - virtual const std::vector< BinaryOperator >& bop() const { return m_binary_operators; } - virtual const std::vector< UnaryOperator >& uop() const { return m_unary_operators; } - -protected: - std::vector< BinaryOperator > m_binary_operators; - std::vector< UnaryOperator > m_unary_operators; - Type m_type; -}; - - -class XprOperators : public OperatorBase -{ -public: - XprOperators() { } - -public: - template - Stream& operator()(Stream& os) const { - header(os); - - binary(os); - binary2(os); - unary(os); - - footer(os); - return os; - } - -public: - template - Stream& header(Stream& os) const { - OperatorBase::header(os); - - os << "//\n" - << "// XprOperators.h\n" - << "//\n\n"; - return os; - } - - // global binary math, bitops and logical operators - template - Stream& binary(Stream& os) const { - OperatorBase::binary(os); - - for(bop_iterator op = bop().begin(); op != bop().end(); ++op) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const XprVector& lhs, const XprVector& rhs)\n" - << " * \\brief " << op->description() << " operator for two XprVector\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const XprMatrix& lhs, const XprMatrix& rhs)\n" - << " * \\brief " << op->description() << " operator for two XprMatrix.\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - return os; - } - - // global binary math, bitops and logical operators with pod and std::complex<> - template - Stream& binary2(Stream& os) const { - for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) { - for(bop_iterator op = bop().begin(); op != bop().end(); ++op) { - if(tp->is_int() && op->int_only()) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const XprVector& lhs, " << tp->name() << " rhs)\n" - << " * \\brief " << op->description() << " operator between XprVector and " << tp->description() << ".\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const XprVector& rhs)\n" - << " * \\brief " << op->description() << " operator between " << tp->description() << " and XprVector.\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const XprMatrix& lhs, " << tp->name() << " rhs)\n" - << " * \\brief " << op->description() << " operator between XprMatrix and " << tp->description() << ".\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const XprMatrix& rhs)\n" - << " * \\brief " << op->description() << " operator between " << tp->description() << " and XprMatrix.\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - } - } - return os; - } - - // global unary operators - template - Stream& unary(Stream& os) const { - OperatorBase::unary(os); - - for(uop_iterator op = uop().begin(); op != uop().end(); ++op) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const XprVector& rhs)\n" - << " * \\brief " << op->description() << " operator for XprVector\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const XprMatrix& rhs)\n" - << " * \\brief " << op->description() << " operator for XprMatrix.\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - return os; - } -}; - - -class VectorOperators : public OperatorBase -{ -public: - VectorOperators() { } - -public: - template - Stream& operator()(Stream& os) const { - header(os); - - binary(os); - binary2(os); - binary3(os); - unary(os); - - footer(os); - } - -public: - template - Stream& header(Stream& os) const { - OperatorBase::header(os); - - os << "//\n" - << "// VectorOperators.h\n" - << "//\n\n"; - return os; - } - - // global binary math, bitops and logical operators - template - Stream& binary(Stream& os) const { - OperatorBase::binary(os); - - for(bop_iterator op = bop().begin(); op != bop().end(); ++op) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const Vector& lhs, const Vector& rhs)\n" - << " * \\brief " << op->description() << " operator for two Vector\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - return os; - } - - // global binary math, bitops and logical operators with pod and std::complex<> - template - Stream& binary2(Stream& os) const { - for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) { - for(bop_iterator op = bop().begin(); op != bop().end(); ++op) { - if(tp->is_int() && op->int_only()) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const Vector& lhs, " << tp->name() << " rhs)\n" - << " * \\brief " << op->description() << " operator between Vector and " << tp->description() << ".\n" - << " * \\ingroup _operators\n" - << " * \\ingroup " << op->group() << "\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const Vector& rhs)\n" - << " * \\brief " << op->description() << " operator between " << tp->description() << " and Vector.\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - } - } - return os; - } - - // global binary operations with expressions - template - Stream& binary3(Stream& os) const { - for(bop_iterator op = bop().begin(); op != bop().end(); ++op) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const XprVector& lhs, const Vector& rhs)\n" - << " * \\brief " << op->description() << " operator between XprVector and Vector\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const Vector& lhs, const XprVector& rhs)\n" - << " * \\brief " << op->description() << " operator between Vector and XprVector\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - return os; - } - - // global unary operators - template - Stream& unary(Stream& os) const { - OperatorBase::unary(os); - - for(uop_iterator op = uop().begin(); op != uop().end(); ++op) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const Vector& rhs)\n" - << " * \\brief " << op->description() << " operator for Vector\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - return os; - } -}; - - - -class MatrixOperators : public OperatorBase -{ -public: - MatrixOperators() { } - -public: - template - Stream& operator()(Stream& os) const { - header(os); - - binary(os); - binary2(os); - binary3(os); - unary(os); - - footer(os); - } - -public: - template - Stream& header(Stream& os) const { - OperatorBase::header(os); - - os << "//\n" - << "// MatrixOperators.h\n" - << "//\n\n"; - return os; - } - - // global binary math, bitops and logical operators - template - Stream& binary(Stream& os) const { - OperatorBase::binary(os); - - for(bop_iterator op = bop().begin(); op != bop().end(); ++op) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const Matrix& lhs, const Matrix& rhs)\n" - << " * \\brief " << op->description() << " operator for two Matrizes\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - return os; - } - - // global binary math, bitops and logical operators with pod and std::complex<> - template - Stream& binary2(Stream& os) const { - for(Type::const_iterator tp = m_type.begin(); tp != m_type.end(); ++tp) { - for(bop_iterator op = bop().begin(); op != bop().end(); ++op) { - if(tp->is_int() && op->int_only()) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const Matrix& lhs, " << tp->name() << " rhs)\n" - << " * \\brief " << op->description() << " operator between Vector and " << tp->description() << ".\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(" << tp->name() << " lhs, const Matrix& rhs)\n" - << " * \\brief " << op->description() << " operator between " << tp->description() << " and Vector.\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - } - } - return os; - } - - // global binary operations with expressions - template - Stream& binary3(Stream& os) const { - for(bop_iterator op = bop().begin(); op != bop().end(); ++op) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const XprMatrix& lhs, const Matrix& rhs)\n" - << " * \\brief " << op->description() << " operator between XprMatrix and Matrix\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const Matrix& lhs, const XprMatrix& rhs)\n" - << " * \\brief " << op->description() << " operator between Matrix and XprMatrix\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - return os; - } - - // global unary operators - template - Stream& unary(Stream& os) const { - OperatorBase::unary(os); - - for(uop_iterator op = uop().begin(); op != uop().end(); ++op) { - os << "/**\n" - << " * \\fn operator" << op->symbol() << "(const Matrix& rhs)\n" - << " * \\brief " << op->description() << " operator for Matrix\n" - << " * \\ingroup " << op->group() << "\n" - << " */\n\n"; - } - return os; - } -}; - -int main() -{ - XprOperators xpr_op; - VectorOperators vec_op; - MatrixOperators mtx_op; - - Operator::doxy_groups(std::cout); - - xpr_op(std::cout); - //vec_op(std::cout); - //mtx_op(std::cout); -} diff --git a/tvmet-1.7.1/doc/faq.dox b/tvmet-1.7.1/doc/faq.dox deleted file mode 100644 index 78c59e255..000000000 --- a/tvmet-1.7.1/doc/faq.dox +++ /dev/null @@ -1,295 +0,0 @@ -/** - \page faq FAQ - -

Contents:

- -# \ref license_tvmet - -# \ref commercial_tvmet - -# \ref debug - -# \ref optimize - -# \ref ambiguous_overload - -# \ref conversion_non_scalar - -# \ref could_not_convert - -# \ref assign_op - -# \ref comma_initializer - -# \ref no_match_operator - -# \ref dimension_error - -# \ref rtlx_kernel_crash - -# \ref regressiontest_failed - - Certain items on this page are also covered by the \ref usage and \ref notes - pages! - - - - \section license_tvmet How is tvmet licensed? - - tvmet comes with completely free source code. tvmet is available under the - terms of the GNU Lesser General Public License (LGPL). - - I have amended the LGPL to explicitly allow statically linking tvmet (or any - modified version of tvmet) to your software. The LGPL is not clear on this - and I definitely want to allow it. - - \sa \ref license - - - - - \section commercial_tvmet Can I use it in commercial software products? - - Yes, you can. The LGPL allows you to do this, and you do not need to release - the source code to your software. You do need to release the source code for - any modifications you make to tvmet itself. (We would hope you would send - any improvements like these back to us anyways.) - - - - - \section debug Debugging the code - - Not all faults can be caught at compile time. Therefore, there is a need - for runtime debugging by defining TVMET_DEBUG (e.g. index - operators of Vector::operator(i) and - Matrix::operator(i,j)). On defined TVMET_DEBUG a bounds checking - is involved. Runtime errors are handled throwing an assertion failure using - std::assert(). TVMET_DEBUG is not enabled by defining - DEBUG. This behavior differs from release less than 0.6.0 - - If you don't get the expected result on certain operations you can try the - \ref expr_print feature to check that the expression is being evaluated as - you expect. - - - - - - \section optimize Optimizing the code - - Starting after tvmet 1.5.0 there is a new define TVMET_OPTIMIZE. - - If this is defined tvmet uses some compiler specific keywords. - Mainly, this declares the functions using gcc's - __attribute__((always_inline)). This allows the - compiler to produce high efficient code even on less - optimization levels, like gcc's -O2 or even -O! - This is known to work with gcc v3.3.3 (and higher). - Using icc's v8 gnuc compatibility mode this may work, I've read - that it's using as an hint, this means you can have static inline - functions inside left so you can't get the full power of this feature - for circumstances. - - - - - \section ambiguous_overload ambiguous overload for ... Compiler Error - - When using gcc-2.96 you can get a compiler error like: - - \code - ambiguous overload for ... - /usr/include/g++-3/stl_relops.h:42: candidates are: bool operator> - ... - \endcode - - I haven't any solution for this--even if I don't use it in the tvmet library. - A simple define __SGI_STL_INTERNAL_RELOPS in the config header doesn't solve - the problem. The easiest way (brute force method) is to comment out all - operators in stl_reops.h. (The better way is to use the gcc-3.0.x and later, - see \ref compiler.) - - - - - - \section conversion_non_scalar conversion from ... to non-scalar type ... Compiler Error - - You get a compiler error like: - - \code - conversion from `tvmet::XprVector< ... >, Sz>' to non-scalar type - `tvmet::Vector' requested - \endcode - - Please read about \ref construct. You probably ignored or forgot the rules - of using expression templates. - - - - - - \section could_not_convert could not convert `tvmet::operatorXX(...)' to `bool' ... Compiler Error - - You get a compiler error like: - - \code - could not convert `tvmet::operator==( ... , ... )' to `bool' - \endcode - - In the example above, you did try (or hoped) to use a global operator== - which doesn't return a bool. Please read \ref compare. - - - - - \section assign_op no match for ?= operator - - You get a compiler error like: - - \code - no match for `tvmet::Vector<...>& /= tvmet::Vector<...>&' operator - \endcode - - For element-wise operations, you need to use the element_wise namespace - (found within tvmet). As the name suggests, all these operators are - performed in an element wise fashion. (e.g. division of two vectors--not - allowed from a mathematical perspective--element by element.) The following - code snippet shows how to use it: - - \code - using namespace tvmet; - Vector v1, v2; - - v1 = 1,2,3; - v2 = v1; - - cout << v1 << endl; - { - using namespace tvmet::element_wise; - v1 /= v2; - } - cout << v1 << endl; - \endcode - - \sa \ref operators - \sa \ref alias - - - - - \section comma_initializer storage size of `ERROR_CommaInitializerList_is_too_long' isn't known - - You get a compiler error like: - - \code - In member function `tvmet::CommaInitializer::Initializer .... - storage size of `ERROR_CommaInitializerList_is_too_long' isn't known - \endcode - - You have caused a forced compile time error. tvmet prevents you from - overwriting foreign memory! In other words, your comma separated initializer - list is too long, e.g. you wrote something like: - - \code - using namespace tvmet; - Vector v0; - - v0 = 1,2,3,4,5,6,7,8,9; - \endcode - - You just tried to fill a %Vector of length 3 with 9 values, which would - normally result in values being written off the end of the vector. tvmet - prevents this with the compile time error you just saw. - - - - - \section no_match_operator no match for `...' operator - - You get a compiler error like: - - \code - no match for `tvmet::Matrix& * tvmet::XprVector, Sz>' operator - include/tvmet/xpr/VectorOperators.h:123: candidates are: - // a lot of candidates.... - \endcode - - Perhaps you wrote code like: - - \code - Matrix eigenvecs; - Matrix M; - ... - - Vector ev0( M * col(eigenvecs, 0) ); - \endcode - - Using %tvmet prior to release 1.2.0 in this case: Obviously an operator - is missing... but which one? Well, all arithmetic operators have a - functional equivalent, in this case, prod(). Rewriting the code above - using the function syntax will give you a more descriptive error message: - - \code - no matching function for call to - `prod(tvmet::Matrix&, tvmet::XprVector, 3>)' - \endcode - - This says, I forgot to write a function with the appropriate operator. - In this case, please give me a hint by writing a short example, used compiler - and tvmet release. - - \sa \ref dimension_error. - - - - - - - \section dimension_error no match for `tvmet::Matrix& * tvmet::Vector&' operator - - You get a compiler error like: - - \code - no match for `tvmet::Matrix& * tvmet::Vector&' operator - candidates are: T tvmet::operator*(const T&, ...) ... - \endcode - - This is a feature of tvmet. The compiler detects a mathematical problem: - You tried call an operator between tvmet objects which had incompatible - dimensions. For example, you attempted to multiply a matrix of dimension - 4x4 with a vector of size 3 - this isn't mathematically feasible. - - - - - - \section rtlx_kernel_crash Using with Linux Real-time Extensions crashes in kernel mode - - Normally there should not be a problem on using tvmet inside Linux kernel - space as a C++ kernel module. Unfortunately, code working in normal - environment (e.g. Linux user space) crashes the Linux box by using linux - real-time extensions, definitely on RTAI. - - I haven't found the reason yet, my knowledge of assembler and debugging is - too limited. - - - - - - \section regressiontest_failed Failed regression tests - - Well, this is a strange world. It can happen that some (especially the - tan) regression test can fail. This is not a problem with the %tvmet library. - After some hours I reduce the problem to: - - \code - cout << (std::tan(1.0) - std::tan(1.0)) << endl; - \endcode - - got 6.17995e-17 on my Linux Mandrake 8.2/9.1 box. It makes no - difference if I take the tan function from namespace std or from the global - namespace. This is especially a problem for g++ v3.2 and prior. The Intel - compiler v7.0 isn't affected. - - Especially on VC++ 7.1 you will get 2 failed tests for complex - %Matrix and %Vector. The error is about 8.88178e-016 and - 1.77636e-015. - -*/ - - - -// Local Variables: -// mode:c++ -// End: -// LocalWords: RTAI diff --git a/tvmet-1.7.1/doc/footer.html.in b/tvmet-1.7.1/doc/footer.html.in deleted file mode 100644 index 962f834da..000000000 --- a/tvmet-1.7.1/doc/footer.html.in +++ /dev/null @@ -1,17 +0,0 @@ -
- - - - -
- Author:
- -
- - diff --git a/tvmet-1.7.1/doc/header.html b/tvmet-1.7.1/doc/header.html deleted file mode 100644 index b71b879ee..000000000 --- a/tvmet-1.7.1/doc/header.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - Tiny Vector Matrix library using Expression Templates - - - - - - - - - - - - - -
- - SourceForge Logo - - Tiny Vector Matrix library using Expression Templates - - Sourceforge Project Page -
-
diff --git a/tvmet-1.7.1/doc/intro.dox b/tvmet-1.7.1/doc/intro.dox deleted file mode 100644 index aac830d2d..000000000 --- a/tvmet-1.7.1/doc/intro.dox +++ /dev/null @@ -1,140 +0,0 @@ -/* - * $Id: intro.dox,v 1.12 2004/11/30 09:05:53 opetzold Exp $ - */ - -/** - \mainpage - - \section intro_contents Contents - - \ref introduction - - \ref license - - \ref news - - \ref changelog - - \ref benchmark - - \ref build - - \ref usage - - \ref faq - - \ref notes - - \ref compiler - - \ref works - - \ref credits - - \ref projects - - \ref links - -*/ - -/** - \page introduction Introduction - - This Tiny %Vector and %Matrix template library uses - Meta Templates - (MT) and - Expression Templates (ET) to evaluate results at compile time -- which - makes it fast for low order (tiny) systems. "Tiny" is a subjective term, - but typically means vectors and matrices of size ten (10) or less. - - The technique used internally by tvmet is described by Todd Veldhuizen: - - - - Techniques for Scientific C++ - - - Expression Templates - - - Template Metaprograms - - and is used by his blitz++, too. - Therefore, the speed achieved by tvmet is similar to the speed of blitz++. - Unfortunately, blitz++ isn't developed any more (year 2001, 2002) - because of other interests being pursued by Todd Veldhuizen (like his Ph.D.). - Furthermore, blitz++'s TinyVector is mainly developed for use by the blitz++ - Array class -- and not for minimalistic/tiny fast math support for which - tvmet is designed. Because of this, the operators and functions are - incomplete or not supported well. blitz::TinyMatrix supports a few lesser - operators and functions (as with blitz::TinyVector). blitz++ doesn't conform - to STL (e.g. Container<>::value_type isn't defined), it defines a T_numtype - or, for blitz::TinyVector, it does have an iterator begin() - but the end() - is missing (blitz::TinyMatrix doesn't have anything). - - These were reasons why I developed tvmet. Still, tvmet is designed to be more - than a mere rehashing of blitz++. The primary design goals are: - - -# mathematical notation and correctness, - -# high efficiency for small/tiny vector and matrices, - -# functionality and wide range of supported operators and functions, and - -# compatibility and portability. - - The dimensions for vectors and matrices are statically bound at compile - time using template arguments. The bounded dimensions feature a compile - time dimension check to force adherence to proper dimensional sizes - between operands (even in the night if you are sleepy). For example, you - can't assign a %Vector or %Matrix with dimension = 3 to a %Vector or %Matrix - of dimension = 4; nor can you create an expression using a binary operation - between arguments with incompatible dimensions. This is a major difference - between tvmet (which features this) and blitz++ (which does not prevent - from this). Nevertheless, tvmet isn't a matlab, maple or octave for C++. - - tvmet is a general purpose library and is not (yet) a linear algebra library. - It does not have an interface to other numerical libraries as BLAS or LAPACK. - Tiny Vector Matrix template - library offers these features: - - -# Matrices and Vectors with fixed sizes (of course), the data is stored in - a static array. - -# compile time dimension check for Vectors and Matrices to preserve the - mathematical meaning. - -# vector, matrix, matrix-matrix and matrix-vector fast operations: - - complete set of standard arithmetic operations for Vectors and Matrices - (blitz++ supports this only for - TinyVector). - - complete set of standard compare operations for Vectors and Matrices - as well as ternary functions like a ? b : c (see eval for use). - - binary and unary operations. - - meta template use for %Matrix-Matrix-Product \f$M\,M\f$, - %Matrix-Transpose \f$M^T\f$ and %Matrix-Vector-Product \f$M\,x\f$ - functions and operators. - - meta template for special functions like - \f$M^T\, x\f$, \f$M^T\,M\f$, \f$M\,M^T\f$ and \f$(M\,M)^T\f$ - functions, see \ref spec_meta_func. - - simple %Matrix rows and column access as a %Vector. - - chaining of matrix and vector expressions is possible and working. - - %Vector inner and outer product (dot and cross product). - -# special handling for the aliasing problem - see \ref alias. - -# STL iterator interface. This opens the door to all sorts of great STL - applications. - -# type promotion (for handling Matrices and Vectors of differing types). - -# works on self defined types such as the std::complex<> type. - -# makes no use of exceptions. Therefore you can use it for embedded systems - or in Linux kernel space. - -# nice expression level printing for debugging purposes (print the expanded - expression tree). - -# good documentation with examples. - -# regression tests for nearly all operations and functions. - -# support for several compilers (see \ref compiler). - -# written as a pure class and template library, no binary libraries and - versioning are needed - designed to avoid code blot due to the use of - templates. - -# ISO/IEC 14882:1998 compliant. - - Although there are many advantages and features, tvmet has some limitations. - Due to the expression template and meta template programming, the compilation - time increases for higher dimensional constructs. This can cause resource - limitations, especially for memory (during compilation). On the other hand, - the runtime performance will also decrease on higher order. Therefore only - use tvmet only tiny (typically less than 10) sizes. (The maximum useful - size/dimension depends on the operation, of course.) The \ref benchmark - gives a good entry point about these problem. - Other - general purpose libraries and linear algebra libraries will do a better job - for larger matrix/vector problems. - - -*/ - -/** - \bugs regression test TestUnFunc::Arc and TestUnFunc::Log fails due to - precision errors. - */ - -// Local Variables: -// mode:c++ -// End: diff --git a/tvmet-1.7.1/doc/license.dox b/tvmet-1.7.1/doc/license.dox deleted file mode 100644 index ae03f4aa9..000000000 --- a/tvmet-1.7.1/doc/license.dox +++ /dev/null @@ -1,677 +0,0 @@ -/* - * $Id: license.dox,v 1.7 2004/06/08 12:11:15 opetzold Exp $ - */ - -/** - \page license License - -

Contents:

- - \ref tvmet_license - - \ref addendum - - \ref rationale - - - - \section license tvmet's License - - Copyright (C) 2001-2003 Olaf Petzold. - - tvmet basically follows the standard GNU Lesser General Public License (LGPL). - Because of repeated questions on this topic, it has become apparent that many - people still had a number of uncertainties about licensing issues. Also, a - number of stipulations in the GNU Lesser Public License statement have - evidently been an impediment to truely wide-spread adoption of the tvmet - Library. - - Thus, the intent of the License Addendum has been to provide clarification - of a number of obscure issues in the GNU Lesser General Public License, and - to relax a few of its stipulations with an eye to solving a couple of - practical issues. - - Below follows the GNU Lesser Public License, followed by the tvmet Library - License addendum. - - Finally, detailed rationale behind the License Addendum is presented. - - - - - \section tvmet_license The License -
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Section 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Section 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
- - - - - - - \section addendum Addendum to License - -
-
-                           ADDENDUM TO LICENSE
-                              February 2003
-
-                Copyright (C) 2003 Olaf Petzold
-
-        Everyone is permitted to create and distribute verbatim copies
-     of this license addendum document, but changing it is not allowed.
-
-
-tvmet License Agreement:
-
-
-0. tvmet ("The Library") is licensed under GNU Lesser General Public License
-   as published by the Free Software Foundation, version 2.1 of the License, or
-   (at your option) any later version, with the following additional conditions.
-   The following conditions take precedence over any conditions or restrictions
-   stipulated by the Lesser General Public License insofar as a conflict exists.
-
-1. The tvmet License Agreement ("License") covers only tvmet ("The Library").
-   Other libraries which the Library may use are covered by their own respective
-   licenses.
-
-2. Modification of the configure scripts, makefiles, or installation tools of
-   the Library to support a specific platform does not constitute creating a
-   modified or derivative work based on the Library.
-
-3. Statically linking of a copy of the Library against any work using the
-   Library, i.e. the inclusion of (parts of) the Library into a program or
-   binary, is functionally equivalent to a work using the Library by linking to
-   it dynamically, and therefore does not constitute creating a modified or
-   derivative work based on the Library.
-
-4. Otherwise, if the work is a derivative of the Library, you may distribute
-   the object code for the work under the terms of the GNU Lesser General Public
-   License.  Any executables containing that work also may be distributed under
-   the Lesser General Public License whether or not they are linked directly
-   with the Library itself.
-
-5. Programs or binaries linked with the Library must be identified as such by
-   including, in the Documentation or by other means (for example in the About
-   Box or Online Help), the following statement:
-
-   "This software uses tvmet (http://tvmet.sourceforge.net)."
-
-
-
-
-                             END OF ADDENDUM
-
- - - - - - -\section rationale Rationale - -We now launch into a point by point discussion of the License Addendum: - -
    -
  • -Point 0 says that whereever LGPL and tvmet License Addendum disagree, the tvmet -License Addendum holds. In points not covered in the tvmet License Addendum, -LGPL shall hold. -
  • -
  • -Point 1 says we can not make any statements about anyone else's code; if your -application must use other libraries (jpeg, png, tiff, glibc, and so on), then -you must observe the licenses of these other libraries. -
  • -
  • -Point 2 clarifies that when we're talking about derived works, we're not talking -about making some minor changes to Makefiles or configuration scripts. However, -it would still be nice to communicate them with the tvmet community so as to be -able to support new platforms. -
  • -
  • -Point 3 addresses the practical problem of linking tvmet statically into an -application program or combined work. LGPL insists that the recipient of a -distribution of a combined work i.e. a program linked with the Library, be -allowed to relink; linking a program dynamically is usually the easiest way to -comply with this stipulation. However, there are sometimes practical or -logistical problems which make it difficult to comply with this requirement. We -have taken the position that static linking is functionally equivalent to -linking dynamically, and we're not really denying the recipient of a statically -linked program any source code he or she wouldn't be able to obtain otherwise. -
  • -
  • -Point 4 says that if you make a work based on the Library, then you may -distribute this under the Lesser General Public License:- in other words, point -4 applies only to a work using the Library being linked (statically or -dynamically) to the Library. It is in the spirit of LGPL that the recipient of -the combined work not be denied anything he or she would be able to receive with -the regular LGPL. However, statically linking an application program with a work -based on the Library, i.e. a modified copy would do just that! Point 5 says that -the regular Lesser General Public License applies in that case. -
  • -
  • -Point 5 requires you to identify your program as using the tvmet library. With -static linking, there would be no way for a normal user to tell otherwise. We -request that you include the given statement, and preferably a version number -also. The motivation is two-fold: - - -# A certain amount of publicity for tvmet :-) - -# Some way for recipients of your program to know that (a) your program is - linked to the tvmet Library, and (b) for them to verify that they have in fact - not been denied anything they would have been able to obtain under LGPL, by - visiting this page which details the license information (there are many GPL- - vigilantes out there, and this might appease them). - -
  • -
- -This concludes our remarks on the License revision; please feel free to contact -me if you have additional questions. The rationale section will likely be -expanded when there are still questions left unanswered. - -*/ - - -// Local Variables: -// mode:c++ -// End: diff --git a/tvmet-1.7.1/doc/links.dox b/tvmet-1.7.1/doc/links.dox deleted file mode 100644 index 8d6a70825..000000000 --- a/tvmet-1.7.1/doc/links.dox +++ /dev/null @@ -1,41 +0,0 @@ -/* - * $Id: links.dox,v 1.3 2003/12/05 19:08:59 opetzold Exp $ - */ - -/** - \page links Links of Interest or Related Links - - - - \section generell General Information on Numeric C++ - - Techniques for Scientific C++ - - Expression Templates - - Template Metaprograms - - The Object-Oriented Numerics Page - a very good entry point - - The OpenScience Project > Mathematics > Linear Algebra - - SAL- Numerical Analysis - Miscellaneous Software - - \section numlibs Other ET and MT Vector and Matrix Libraries - - - blitz++ - - uBlas - - MTL - - ETSMO - no files released since over one year - - MET - - meta::Expr{T_emplate} - - PETE - - POOMA - - TNT - Template Numerical Toolkit - - This list isn't complete. For more freely available libraries please have - a look here. -*/ - - -// Local Variables: -// mode:c++ -// End: - -// Local Variables: -// mode:c++ -// End: diff --git a/tvmet-1.7.1/doc/matrix_matrix.png b/tvmet-1.7.1/doc/matrix_matrix.png deleted file mode 100644 index 737a91ad132f857fa385cd86d95910048fc7f680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22105 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 KS^y#3&5XBg*ek3StcBI*K zjqrP;F0Efk%4^r4oQm66NMuwdsQMjfjC6UBWQWrwbMD-RfR1l)m>?#Kr2k_>$xS3Fghnp=oqHNLxuez=%4xWKuAVojZTvKLC|8>R1ID40Ghp=&L1CjK1wZs*z-{Ei zyW0kh%JW0d+XfOjK7VSV{5`BfG#li^-cqk)9-7sC8LDHTNH zb>)}KUKP`BoKT^Ratlm{Vwi(UXUE^Q8`2TX%e8Z^@woZa+AOnhHrL9HWTY7?P1<30 zt_Ewsu$&ZS$dPuiVO6#nhKdI!an>DTua;)stn2p^YS(=eA6i^S<$n?1JtCmU1Mm9; zZ}si9l{JT>4+e`3Xi8pT!pm?xYiq|w7y^4Dg`wmM0t>KKOS!RzgvwFzcvsoirc>=a zn8ft2+>(3O#KItz3b;lOBrfn`w-<6B8jkDRsBJP=tMeP_uPsjab&IKQKa#BGy#5(_@;d!|C%|0wN?OXzG$drdHEg{|&J5n`(qOW;A^G&a zq{MR)-M9po@CA`z#R}cMwcN z^~nqT_|UKUgB*l5VG9&G_REd;OTyBWu%fE|cXy!M+p9aTO%G<4Mqo;r9rXs&J*ISA zT&i3}gP!5>)v0mz1A<%UmmF(qT(bB4Lk>0U+cC!lcf2yLs!jNq0Tc*60$J%4&CA ztksYeFnrSl2hej5)UY%&k#Qcn>Rg)?{CQOR%a>DxzFTUi(?vHIBF|RItsQTHUX|=> zLyW1_IAr^G(@FoUkaG`b`hDa0XHKb2iIPJOsUi2_DNQyRu}fVrBT9(lzkmaTEv z^|PO5&<;TL5w@W9Aflj&Wb8O{Wy6+a?wW<~tAr>L zvyW{u$HM|71d)zx!|0t)HV|i;DH_}qsgCpVr-t?|wv=UrXw zLSXWsFq3KAYG~xexJ0>5!Up0_PR7lElIjY^j;oV(!>_MPQvYq#SP04>#0l--jbkUu zlTczbJ;6PsYf>2{O>U`mQ!^K5HJRFWWleb9ZHhbeXjWKW+)%K!>Rh-R-@ehg)c;&V z=>bk{^7e7rF;rW@1;a$xTVV^$Lxz;v-Sw7A!FX($_Ab?txt$Yu0b{1|tVB&TdG1Kc zKnVjzV1A(eMFQ+U>TG8*P@EmI^MMXFTqACzza0+oxtrSE;b0zTRvtG88-EaT~~{1UxBG{Eq*#*=UJrvwej%fu44@x1-|WpxJCKU8KN z%8Y!6UG5KLZ$M{msGnj2WpGfz4NA34ZH>V))0`t5rIcXtpngL}^Wx?Y!t|(N9%8t% zdN>oz@JZ4LsIfrOOQt^-=${uBX$M0cy{b*rZM>K){OwXIq0Q<+e0GGg;vFr_{o&z! z;sPiDIPNA!nn9xAxU#6;&L_UkB?wbE?mL|w*f7fby*(Hu5`Vg^rLLA)yoxVJ(DHSr zYLTiOdeaj9M$Y{Xh9hi;0A_cCWIXlwksJKRbM&fX5qg|y%y{RnrS4i6;$pAzy zNWa>WOdLc8Y~;m!vddX#%$D^gDSR^S%Un9y>|eeZ7|f(hMJCZ>34b)c(UQNmFLTFI zo`}xs7W#w2fd$q;Yg1faCd{f1`gjmE>%w$FaK-D(H3cwoYt<n^oG@sY;WR=Iy!G?dHw)xt?l41)SqorAdS4+-!CCogG8+%>D8c}Przs9API^DZ+k6Y9!Nyg&4(wO4b7*@@r6KGd)Cx6xb8GUJRevDh zJ`Z6`YHQVV=;#7;0p_`46U7$X$}R3v(I}Er!oV;;Xj@#xYkqer>~ok+S~I8lolBDe zQM+hrV0a?l-T~Is}7KUTP@y57g5?vh|Df{zOm{c5Y_iyH2CvC_7b;n!$ucSL4Fxk zXUufY+3xEI^f-jU776v7fIBN%50-7=E+PLMq=E;XL)h z-CoLU2IpvoeY&JaWKID+_t60bwQE#nk_qNEyC+&;Gz>arKJcQZu9&jedjtzWb5 z##4`BhX1lz2yx3ZhBELOL-Ycfsmm!$$95!Pq0F_4cY6ePr5@mGD;JHopXdUhmBsMb zOLRZ2FF)g6@Z5;+RP%ddoh~6b>WbFe&&d82$nntblY|FDfJdFmAe}N#n;XmI5jaEy=c1veq8FmWs7M zy)?II#>&KRJ%9~SL%nvX_#p4IW6EE}3(;|1FKj#EVDS&e;T3mNejaDIwIYW$J)P>a z_qBA#j$CJinY*GlI7L`OFAs12nWZ$ig+&@n{noN;Xp<1Fk~PJZiYj&dYHZlyHCZ-* z62$`wq}%>J2rn;RWyf4%Che$w0U;fw*6-eWU_F3K{tr*GQZ9e5TJVGXm##{=nvK{a z-=i$n1^dYRjXc|6!dQ+SiY|Y0CglM@2dSuJW2n zLQR;;*w3)yvlr0ueMXenc2!(|pb8k-T_;(2EAGuF6_&?}F=O2GXR%Xnyg2fJ^AsdL z4B^o#5)i$$h94>4e1iV+yQrp`m|1FD>E?%}RuAF318Us0jM1|(z(O(u(NdZIrS_M^ njldOWR~p8__Wb3hC0BJqu0AEiY3oP8IfX3u+w3dZb1dq=jMOWD diff --git a/tvmet-1.7.1/doc/matrix_vector.png b/tvmet-1.7.1/doc/matrix_vector.png deleted file mode 100644 index 08aa4739974cdff8f9f787c7d91f49ac9ba2e071..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24808 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:

- -# \ref optimizing - -# \ref temporaries - -# \ref operators - -# \ref threads - -# \ref expressions - -# \ref adl - -# \ref alias - -# \ref spec_meta_func - -# \ref mmv - - - - - \section optimizing ... on optimizing - - This depends heavily on compiler and the flags used. The code produced with - -O could be better than with -O2 even on gcc-2.9x suite. To get the best - results, you should examine the assembler code generated by your compiler. - Maybe I will write a benchmark suite for different compiler options one day. - (Maybe you could contribute?) - - - - - - - \section temporaries ... on temporaries - - The use of expression templates (ET) and meta templates (MT) allows the - generated code to avoid the creation of many temporaries -- especially with - standard mathematical and assignment operations. There are times that you - have to use actual temporaries e.g. when swapping variables of type - double -- with integer values you can use the XOR operator. - - Some implementations are using a loop with temporaries even if there is a - solution with ET. Than the loops are faster than MT. - - \sa \ref mmv - - - - - - \section operators ... on operators and namespace element_wise - - Some operations on matrices and vectors are not available at first glance. - These are defined in the namespace element_wise because they - are element wise (and not strictly mathematical) operations. - - But there is more: some functions do element wise operations per se (e.g. - vector addition) and are NOT inside namespace element_wise. Furthermore, - all comparison operators perform element wise operations. - - \sa \ref compare - - - - - - \section threads ... about Threads - - This library is not thread safe. It's designed for small math operations where - the overhead for locking policies is too great. If you require locking for - a multi-threaded application, you will need to write a wrapper. - - - - - - \section expressions ... on expressions - - The first versions of %tvmet had only one expression (Xpr) which was shared - for both vectors and matrices. This was working fine, but limited tvmet's - use for arithmetic expressions expressions on complex values. For this - reason, I had to separate expression types for vectors and matrices. The - same problem appeared when using the eval() function for evaluating these - expressions. (Which index operator should handle it?) Unfortunately, the - use of separate expression types vastly increases the number of operators - and functions needed to make the library viable. Fortunately, most boundary - checks are not necessary since they are done at compile time (such as those - needed by the assignment operator, etc). - - - - - - \section adl ... on namespaces and Koenig Lookup - - IMO, the cleanest way would be to put all functions into their own - namespace Functional instead of naming them with the - fncl_ prefix they currently have. (I did beforehand, and - have thought better since). Unfortunately, this technique doesn't work well. - I got compiler errors like: - - \code - template Functional::xyt' is not a function - conflict with `template xyz(Xpr)' in call to `xyz' - \endcode - - when trying: - - \code - typedef Vector vector3d; - vector3d t1(1,2,3); - vector3d t2(t1); - vector3d r; - r = sqrt( t1 * t2 ); - \endcode - - ADL (argument dependent lookup), aka Koenig Lookup, is causing the - compiler to check for a match in namespace Functional, since the - template instantiation is part of Functional (the Xpr stuff), it matches - before the global namespace (the Vector stuff) is checked. Writing: - - \code - r = ::sqrt( t1 * t2 ); - \endcode - - seems to solve the problem at first glance. However, to force the user of - the library into this syntax is painful and could probably run cause other - problems with other namespaces (I haven't checked this). Therefore, all - "Functionals" have the prefix fncl_. - - - - - - \section alias ... about aliasing - - tvmet assumes that all matrices and vectors are alias free. These means that - source and destination memory layout of matrices and vectors never overlaps - (during an operation). - - This is very easy to understood if you see a matrix-vector product. Both - contain different data in different (unique, non-overlapping) memory - regions -- hence, they are alias free. Contrast this with a matrix-matrix - multiply which maybe can have an aliasing, e.g. \f$A = A * B\f$. - When source and destination memory regions are the same, the computed results - may be wrong. (Probably they will be.) But, \f$C = A * B\f$ is alias free. - - Let's see an example in detail: - - \par Example: - \code - Matrix M1; - M1 = 1,2,3,4,5,6,7,8,9; - - cout << "M1 = " << M1 << endl; - M1 = trans(M1); - cout << "M1 = " << M1 << endl; - \endcode - - \par Output: - \code - M1 = Matrix = [ - [1, 2, 3], - [4, 5, 6], - [7, 8, 9] - ] - M1 = Matrix = [ - [1, 4, 7], - [4, 5, 8], - [7, 8, 9] - ] - \endcode - - As you can see, the lower triangular matrix isn't what you expected due to - the aliasing. These results depends on the compiler optimizations, too. - - Unfortunately, to avoid the aliasing problem, you must use temporaries - as shown here: - - \par Example: - \code - matrix_type temp_A(A); - A = temp_A * B; - cout << "matrix_type temp_A(A);\n" - << "A = temp_A * B = " << A << endl; - \endcode - - Anyway, it seems there is a small exception (no guarantee, since it's - compiler dependent I assume) for element wise operations with matrices - or vectors on right hand side. - - Starting with tvmet release 1.4.1 there is a new function alias. These - function use a proxy to call special member functions of the %Matrix/Vector - class. These member functions introduce the temporary for you. - - \par Example: - \code - typedef tvmet::Matrix matrix_type; - matrix_type M; - std::generate(M.begin(), M.end(), - tvmet::util::Incrementor()); - std::cout << "M = " << M << std::endl; - - alias(M) = trans(M); - std::cout << "M = " << M << std::endl; - \endcode - - with the expected - - \par Output: - \code - M = [ - [1, 4, 7], - [2, 5, 8], - [3, 6, 9] - ] - \endcode - - These function/proxy will work for the element wise operators +=, -=, *= and /= - with expressions, e.g. as trans() returns. - - \sa \ref assign_op - - - - - - \section spec_meta_func ... special Meta-Template Functions - - From a principle point of view, there is no need for some special functions - for %Matrix and %Vector functions, namely \f$M^T\, x\f$, \f$M^T\,M\f$, - \f$M\,M^T\f$, and \f$(M\,M)^T\f$. - - Unfortunately, the g++ compiler throws in the towel sometimes even on - transposing matrices. Because of this, %tvmet offers specialized functions - which speed up at runtime (about factor 2 ... 3) using meta templates. - - \par Example: - \code - using namespace tvmet; - - Matrix M1(0); // will be transposed to be conform to vector size - Vector v1(0); - Vector v2(0); - - M1 = ... - v1 = ... - - v2 = Mtx_prod(M1, v1); // equal to: v2 = trans(M1)*v1; - \endcode - - BTW, the %Matrix-%Matrix \f$M\,M\f$ and %Matrix-%Vector \f$M\,x\f$ - products use Meta-Templates, too. - - \sa \ref Mtx_prod - \sa \ref MMt_prod - \sa \ref MtM_prod - \sa \ref trans_prod - - - - - - \section mmv ... about Matrix-Matrix-Vector and Matrix-Matrix-Matrix-operations - - The problem is related to the optimizer - due to the expression and meta - templates used. - - Internally, an expression template may contain other expression templates - (meta templates inside as well as) too - the compiler will unroll all of - these expression into a single resultant expression (which is a hard job). - Sometimes the code generated from this is worse (from a performance point - of view) than just using simple temporaries. - - You can chain matrix-matrix and matrix-vector operations without writing - temporaries by yourself (if this is what you want). - - \par from examples/hspiess.cc: - \code - tvmet::Matrix B; - tvmet::Matrix D; - tvmet::Matrix K; - - B = - -0.05, 0, - 0, 0.05, - 0.05, -0.05; - D = - 2000, 1000, 0, - 1000, 2000, 0, - 0, 0, 500; - - K = trans(B) * D * B; - \endcode - - The performance can be sub optimal due to the increasing complexity - of operations. This can be reduced by a user specified temporary: - - \par from examples/hspiess.cc: - \code - // as before - - K = tvmet::Matrix(trans(B) * D) * B; - \endcode - - or - \code - K = prod(tvmet::Matrix(prod(trans(B), D)), B); - \endcode - - At this moment an intelligent cache and pre-evaluating strategy is - missing by %tvmet. - - \sa \ref spec_meta_func - \sa some notes \ref temporaries - - - -*/ - - -// Local Variables: -// mode:c++ -// End: diff --git a/tvmet-1.7.1/doc/projects.dox b/tvmet-1.7.1/doc/projects.dox deleted file mode 100644 index 2b56afbf9..000000000 --- a/tvmet-1.7.1/doc/projects.dox +++ /dev/null @@ -1,21 +0,0 @@ -/* - * $Id: projects.dox,v 1.6 2004/04/09 05:48:16 opetzold Exp $ - */ - -/** - \page projects Projects using tvmet - - - Please write me about projects using tvmet - I'm highly interested in ! - - -# Not really a project but, an interesting application is - here. - -# IPLT, an image processing libary - and toolbox for the electron microscopy community. - -*/ - - -// Local Variables: -// mode:c++ -// End: diff --git a/tvmet-1.7.1/doc/tvmet.css b/tvmet-1.7.1/doc/tvmet.css deleted file mode 100644 index f2a42aeaf..000000000 --- a/tvmet-1.7.1/doc/tvmet.css +++ /dev/null @@ -1,225 +0,0 @@ -BODY { - background: white; - color: black; - margin-right: 20px; - margin-left: 20px; -} - -H1 { - text-align: center; - font-family: Arial, Helvetica, sans-serif; - text-decoration: none; - font-weight: bold; -} - -H2 { - color: white; - font-family: Geneva, Arial, Helvetica, sans-serif; - text-decoration: none; - font-weight: bold; - background-color: black; -} - -H3 { - text-decoration: underline; -} - -CAPTION { - font-weight: bold -} - -DIV.qindex { - width: 100%; - background-color: #eeeeff; - border: 4px solid #eeeeff; - text-align: center; - margin-bottom: 2px -} - -A.qindex { - text-decoration: none; - font-weight: bold; - color: #0000ee -} - -A.qindex:visited { - text-decoration: none; - font-weight: bold; - color: #0000ee -} - -A.qindex:hover { - text-decoration: none; - background-color: #ddddff -} - -A.qindexHL { - text-decoration: none; - font-weight: bold; - background-color: #6666cc; - color: #ffffff -} - -A.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff } -A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } -A.el { text-decoration: none; font-weight: bold } -A.elRef { font-weight: bold } -A.code { text-decoration: none; font-weight: normal; color: #4444ee } -A.codeRef { font-weight: normal; color: #4444ee } -A:hover { text-decoration: none; background-color: #f2f2ff } - -DL.el { margin-left: -1cm } - -DIV.fragment { - width: 98%; - border: 1px solid #CCCCCC; - background-color: #f5f5f5; - padding-left: 4px; - margin: 4px; -} - -DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } - -TD.md { background-color: #f2f2ff; font-weight: bold; } -TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; } -TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; } - -DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold } -DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } - -TD.indexkey { - background-color: #eeeeff; - font-weight: bold; - padding-right : 10px; - padding-top : 2px; - padding-left : 10px; - padding-bottom : 2px; - margin-left : 0px; - margin-right : 0px; - margin-top : 2px; - margin-bottom : 2px -} - -TD.indexvalue { - background-color: #eeeeff; - font-style: italic; - padding-right : 10px; - padding-top : 2px; - padding-left : 10px; - padding-bottom : 2px; - margin-left : 0px; - margin-right : 0px; - margin-top : 2px; - margin-bottom : 2px -} - -TR.memlist { background-color: #f0f0f0;} -P.formulaDsp { text-align: center; } - -IMG.formulaDsp { } -IMG.formulaInl { vertical-align: middle; } - -SPAN.keyword { color: #008000 } -SPAN.keywordtype { color: #604020 } -SPAN.keywordflow { color: #e08000 } -SPAN.comment { color: #800000 } -SPAN.preprocessor { color: #806020 } -SPAN.stringliteral { color: #002080 } -SPAN.charliteral { color: #008080 } - -.mdTable { - border: 1px solid #868686; - background-color: #f2f2ff; -} - -.mdRow { - padding: 8px 20px; -} - -.mdescLeft { - font-size: smaller; - font-family: Arial, Helvetica, sans-serif; - background-color: #FAFAFA; - padding-left: 8px; - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; -} - -.mdescRight { - font-size: smaller; - font-family: Arial, Helvetica, sans-serif; - font-style: italic; - background-color: #FAFAFA; - padding-left: 4px; - border-top: 1px none #E0E0E0; - border-right: 1px none #E0E0E0; - border-bottom: 1px none #E0E0E0; - border-left: 1px none #E0E0E0; - margin: 0px; - padding-bottom: 0px; - padding-right: 8px; -} - -.memItemLeft { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-style: solid; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-family: Geneva, Arial, Helvetica, sans-serif; - font-size: 12px; -} - -.memItemRight { - padding: 1px 0px 0px 8px; - margin: 4px; - border-top-width: 1px; - border-right-width: 1px; - border-bottom-width: 1px; - border-left-width: 1px; - border-top-style: solid; - border-top-color: #E0E0E0; - border-right-color: #E0E0E0; - border-bottom-color: #E0E0E0; - border-left-color: #E0E0E0; - border-right-style: none; - border-bottom-style: none; - border-left-style: none; - background-color: #FAFAFA; - font-family: Geneva, Arial, Helvetica, sans-serif; - font-size: 13px; -} - -.search { - color: #0000ee; - font-weight: bold; -} - -FORM.search { - margin-bottom: 0px; - margin-top: 0px; -} - -INPUT.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #eeeeff; -} - -TD.tiny { - font-size: 75%; -} diff --git a/tvmet-1.7.1/doc/tvmet.sty.in b/tvmet-1.7.1/doc/tvmet.sty.in deleted file mode 100644 index 0379e99b5..000000000 --- a/tvmet-1.7.1/doc/tvmet.sty.in +++ /dev/null @@ -1,111 +0,0 @@ -%% Version: $Id: tvmet.sty.in,v 1.2 2004/03/27 14:00:33 opetzold Exp $ - -\NeedsTeXFormat{LaTeX2e}[1995/12/01] -\def\@rcs@ $#1Date: #2 #3$$#4Revision: #5$ { - \ProvidesPackage{tvmet}[#2 v#5tvmet doxygen latex style]} -\@rcs@ $Date: 2004/03/27 14:00:33 $$Revision: 1.2 $ - -\DeclareOption{}{%%% - } - -%%\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{}} -\ExecuteOptions{} -\ProcessOptions - -% elementary for pdflatex -\newif\ifpdf - \ifx\pdfoutput\undefined - \pdffalse % no pdftex -\else - \pdfoutput=1 % running pdftex - \pdftrue -\fi - -% Postscript fonts -\RequirePackage[scaled=0.92]{helvet} -\RequirePackage{courier} -\RequirePackage{typearea} % from KOMA script - -% doxygen need this; it includes the style for formulas too -\RequirePackage{fancyhdr} - - -%%%%%%%%%%%%%%%%%%%%%%%%% tvmet style %%%%%%%%%%%%%%%%%%%%%%%%% - -%% -%% page borders -%% -\areaset[2cm]% % binding border - {16cm}{26cm} % text width and height - -%% -%% sans serif is default font -%% -\renewcommand{\familydefault}{\sfdefault} - -%% -%% overwrite doxygen's hyperref setup -%% -\ifpdf\hypersetup{ - baseurl={http://tvmet.sourceforge.net}, - pdftitle={@PACKAGE@ @VERSION@ Reference Manual}, - pdfauthor={\textcopyright\,Olaf Petzold}, - pdfsubject={% - This Tiny Vector and Matrix C++ template - libary uses Meta Templates and Expression Templates to evaluate results - at compile time - to make it fast for low order (tiny) systems. - }, - pdfkeywords={% - tiny vector matrix fast C++ STL template library - expression templates meta templates fixed size fixed dimension - matrix-matrix matrix-vector vector-matrix binary unary operations operators - product transpose linear algebra cross product dot product type promotion - exception linux kernel embedded system regression test gcc g++ - blitz blitz++ TinyVector TinyMatrix MTL TNT - gnu compiler suite portland group c++ kai c++ intel compiler LGPL - }, - % - bookmarks={true}, - bookmarksnumbered={true}, - bookmarksopen={true}, - pdfpagelabels={true}, - pdfmenubar={true}, - pdftoolbar={true}, - plainpages={false}, - pdfstartview={FitH}, - pdfpagemode={UseOutlines}, - pdfhighlight={/I} -} -\fi - -%% -%% overwrite fancyheadings -%% -\makeatletter - \def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else - \hbox{}\vspace*{\fill} - \thispagestyle{empty} - \newpage - \if@twocolumn\hbox{}\newpage\fi\fi\fi} -\makeatother -\renewcommand{\sectionmark}[1]{% - \markright{\thesection.\ #1}} -\makeatletter - \lhead[\textbf{@PACKAGE@ @VERSION@}]{\fancyplain{}{\bfseries\rightmark}} - \rhead[\fancyplain{}{\bfseries\leftmark}]{\textbf{@PACKAGE@ @VERSION@}} -\makeatother -\chead{} -\lfoot{} -\cfoot{\bfseries --\ \thepage\ --} -\rfoot{} -\setlength{\headwidth}{0.0cm} -\setlength{\headwidth}{\textwidth} - -\endinput - -%%% Local Variables: -%%% mode: latex -%%% TeX-auto-save: nil -%%% TeX-auto-parse-length: 99999 -%%% ispell-local-dictionary: "american" -%%% End: diff --git a/tvmet-1.7.1/doc/usage.dox b/tvmet-1.7.1/doc/usage.dox deleted file mode 100644 index 4bbc446ff..000000000 --- a/tvmet-1.7.1/doc/usage.dox +++ /dev/null @@ -1,407 +0,0 @@ -/* - * $Id: usage.dox,v 1.14 2004/07/03 17:09:23 opetzold Exp $ - */ - -/** - \page usage Usage - -

Contents:

- -# \ref include - -# \ref construct - -# \ref c_arrays - -# \ref compare - -# \ref pod - -# \ref stl - -# \ref matrix_access - -# \ref expr_print - - - - - \section include Include files - - The Tiny %Vector and %Matrix template library has many include files spread - throughout the %tvmet include directory. As a user, you need only include - <%tvmet/Vector> for vector operations and/or - <%tvmet/Matrix> for matrix operations. - - \par Example: - \code - #include - #include - - using namespace tvmet; - \endcode - - Simple, isn't it? Don't forget to use the namespace tvmet, but keep in mind - that using the using directive inside headers will pollute the namespace. If - you write this in a header file, the namespace for all subsequent header - files (those which include the one you're writing) will also be polluted. - (This is not a %tvmet specific phenomenon.) Therefore, write the using - statement in the C++ file. - - - - - - \section construct Construction and Initializing - - Due to the nature of - - Expression Templates (ET) you can't write code like - - \par Example: - \code - tvmet::Vector v1(1,2,3); // OK - tvmet::Vector v2 = v1; // not possible - \endcode - - The operator= function assigns an expression to the Vector which means that - the object must be constructed before you may assign something to it. The - solution is to write this as: - - \par Example: - \code - using namespace tvmet; - - Vector v1(1,2,3); - Vector v2; // construct the Vector object at first - v2 = v1; // ... and assign the contents of v1 to v2 - Vector v3(v1); // ... or simple use the copy constructor - - std::cout << v3 << std::endl; - \endcode - - since the object v2 needs to be constructed before the object's operator=() - can be called. - - The same rule applies to the Matrix class. You can only assign vectors and - matrices of the same dimension or you will get a compile error. This also - applies to the argument list for the constructor of the classes. - - Initializing can be done as shown above or by using a comma separated list: - - \par Example: - \code - using namespace tvmet; - - Matrix m1; // yes, non-square matrices are possible as well - m1 = 1, 4, - 2, 5, - 3, 6; - \endcode - - Matrix element initialization always performed column wise! If the length - of the comma separated list is longer than the storage size, you will get - a compile time error. (tvmet is designed to prevent this -- it will prevent - you from accidentally overwriting memory which does not belong to the - matrix you are initializing.) You can use a comma separated list to - initialize vectors as well. - - If you want a clean (zero-valued) vector or matrix you can simple write: - - \par Example: - \code - using namespace tvmet; - - Vector v4(0); - Matrix m2(0); - \endcode - - All elements of v4 and m2 are initialized with zero (or whatever value you - provide at construction time). Keep in mind that the uninitialized %Matrix - and %Vector classes will have random data when the are created (since they - use a static array for internal storage) unless you initialize them! - - Another way to initialize a vector or matrix follows: - - \par Example: - \code - using namespace tvmet; - - Vector v5(1,2,3); - Vector v6(v5); - Vector v7(v5+v6); - \endcode - - This is useful for temporary results. The result will be immediately - assigned to the new vector elements using the expression passed to the - constructor. - - Yet another way of initializing a vector or matrix is similar to the above. - We assign an expression to it: - - \par Example: - \code - using namespace tvmet; - - Matrix m3, m4, m5; - m3 = 1, 2, 3, - 4, 5, 6, - 7, 8, 9; - m4 = m3; - m5 = m3 + m4; - \endcode - - If you have your data inside arrays you can use tvmet's iterator interface - to initialize a vector or matrix with it: - - \par Example: - \code - T data[] = { 1,4,7, - 2,5,8, - 3,6,9 }; - - int sz = sizeof(data)/sizeof(T); - T* first = data; - T* last = data + sz; - - tvmet::Matrix m(first, last); - \endcode - - The data will be copied into the matrix itself. When the constructor has - finished, there will be no stored reference to the array pointer. - - Starting with tvmet release 1.6.0 you can create an identity matrix - simply by using the function identity(). Note, we have to specify the - matrix type, since ADL can't work here. - - \par Example: - \code - typedef Matrix matrix_type; - ... - matrix_type E( identity() ); - \endcode - - - - - \section c_arrays Use of C style Arrays with tvmet - - Sometimes you have some data arranged in a C style array for matrices - and vectors. As with tvmet release 1.6.0 you can wrap an expression - around using the functions vector_ref(const T* mem) and - matrix_ref(const T* mem) where mem is the pointer to the C array. - - The returned expressions (XprVector or XprMatrix) can be used - as usual like tvmet's vectors and matrices. This means, you - can use all mathematical functions on it. - - \par Example: - \code - static float lhs[3][3] = { - {-1, 0, 1}, { 1, 0, 1}, {-1, 0, -1} - }; - static float rhs[3][3] = { - { 0, 1, 1}, { 0, 1, -1}, { 0, -1, 1} - }; - ... - - typedef Matrix matrix_type; - - matrix_type M( prod(matrix_ref(&lhs[0][0]), - matrix_ref(&rhs[0][0])) ); - \endcode - - This allows to initialize tvmet's vectors and matrices by - an alternative way as described at \ref construct. - - - \section compare Compare Vectors and Matrices - - If you expect to find global comparison operators for comparing Vectors - and Matrices, you are right -- these are provided. But, the return - value probably isn't what you expect: a boolean value. Instead, the operator - returns an expression (e.g. XprVector<>). The contents of this expression - type is a element wise logical operation (depends on the given operator - like ==, <, >, etc...)! To get a boolean value you need to evaluate the - expression using all_elements() or any_elements(), as follows: - - \par Example: - \code - using namespace tvmet; - using namespace std; - - Vector v1, v2, bv; - - v1 = 1,2,3; - v2 = 1,3,3; - - bv = v1 == v2; - - cout << bv << endl; - cout << "v1 == v2 is " - << ( all_elements( v1 == v2 ) ? "true" : "false" ) - << endl; - \endcode - - This gives - - \par [continued] - \code - Vector[1, 0, 1] - v1 == v2 is false - \endcode - - The reason for this is the element wise operation on all elements (for both - Vectors and Matrices). Comparing two vectors will result in a "boolean Vector" - expression. Using all_elements/any_elements evaluates the result into a - single boolean by repeatedly applying the comparison for each element. - - An other example on comparing is shown below: - - \par Example: - \code - if(all_elements(X == Y)) { cout << "matrices are identical" << endl; } - if(any_elements(X == Y)) { cout << "at least one element is equal" << endl; } - if(any_elements(X != Y)) { cout << "not all elements are equal" << endl; } - \endcode - - %tvmet prior release 1.2.1 did have a boolean version eval for comparing. - The functional and semantic meaning were not clear at all. Therefore I - decided to remove it. - - \sa \ref operators - - - - - - \section pod Data Types like std::complex<> - - As we can see above we can use POD (plain old data) types like double and - int as data type of a %Vector or %Matrix. However, we are not limited to - this - we can use e.g. std::complex<> as well: - - \par Example: - \code - using namespace tvmet; - - Vector,3> v1, v2; - Matrix,3,3> m1; - \endcode - - And operate on these... - - \par [continued] - \code - v1 = 1,2,3; - m1 = 1,4,7, - 2,5,8, - 3,6,9; - v2 = m1 * v1; - \endcode - - Be careful. std::complex<> isn't tested well on regression tests. - - - - - \section stl STL support - - Since version 0.2.0 %tvmet has supported an iterator interface conform to - the STL and since version 0.5.0 reverse STL iterators have been supported, - too. - - With these, you can mix the %tvmet Vector and Matrix containers with the - STL algorithms. - - For example, if you don't like %tvmet's ostream operator, you can create - your own implementation like this: - - \par Example: - \code - tvmet::Vector v(1,2,3,4,5,6); - std::cout << v << std::endl; - - std::cout << "The Vector is:" << std::endl; - std::copy(v.begin(), v.end(), std::ostream_iterator(std::cout, "\n")); - \endcode - - Or, you create a random matrix and print it as shown here: - - \par Example: - \code - tvmet::Matrix m; - - std::generate(m.begin(), m.end(), rand); - std::cout << m << std::endl; - \endcode - - - - - - \section matrix_access Matrix access by rows and columns - - If you need a specific row or column of a given matrix you can get access to - it by using the functions row and col. They will return an XprVector. - Unfortunately, you do not get any write access to the vector elements - only - reading is permitted due to the expression template concept used here. For - write access, you have to use matrix indexing with the parentheses operator. - - \par Example: - \code - using namespace tvmet; - - typedef Matrix matrix_type; - typedef Vector matrix_rowvector; - typedef Vector matrix_colvector; - - matrix_type M; - M = .... - - matrix_rowvector row2 = row(M, 2); - matrix_colvector col3 = col(M, 3); - ... - \endcode - - - - - - \section expr_print Expression printing - - Expression printing is a nice feature for debugging expressions. (For more - about expression templates and expression tree please have a look - here). - - You can write out a simple matrix-vector multiplication of a vector - v1 and a matrix m1 of the dimension of 3 as follows: - - \par Example: - \code - std::cout << m1 * v1 << std::endl; - \endcode - - which will be expanded to: - - \par [continued] - \code - XprVector< - XprMVProduct< - d, 3, 3, 3, 1, d, 1 - > - 3 - > - \endcode - - The "d" is a g++ placeholder for double. (This may vary from compiler to - compiler since it is an implementation detail of runtime type information - [rtti] determined by the compiler's manufacturer). The purpose of this - feature is to check the right evaluation of expressions into the tree on - complicated mathematical expressions. - - A rich source of examples are the regression tests. They show all of the - supported operations and functions (if there is a regression test for this - of course). Some examples are in the examples directory. - - - - -*/ - - -// Local Variables: -// mode:c++ -// End: diff --git a/tvmet-1.7.1/doc/works.dox b/tvmet-1.7.1/doc/works.dox deleted file mode 100644 index 07edf8a18..000000000 --- a/tvmet-1.7.1/doc/works.dox +++ /dev/null @@ -1,40 +0,0 @@ -/* - * $Id: works.dox,v 1.5 2005/03/09 12:33:00 opetzold Exp $ - */ - -/** - \page works Future works - - A good library is never complete. Here are some points which I hope to cover - in the future: - - -# more regression tests (bit operations are missing, not all functions and type - promotion are tested) and examples (temporary the regression test can act - as examples). The problems with the regression tests actually used is, - that they does not follow mathematical, strong logical guide lines to cover all - possible cases. - -# write more examples, the regression test should not act as examples. - -# better support for std::complex type. - -# add functions like - - matrix inverse using LUdecomposition and other matrix vector functions - - meta functions for sin, cos etc. - -# System V math support on linux seems to be incomplete - -# better compiler support - -# Interface to other numerical libraries as uBlas, BLAS, and LAPACK. - - - Maybe, there will be a tvmet2. Some of the features mentioned above will - require a redesign of tvmet. With this new design tvmet can better handle - special matrices, like banded, symmetric or triangular matrices etc. - Furthermore, sparse tiny vectors and matrices are easy to implement, as well - as an allocator concept for re-sizable containers. - - The priority depends on the \ref projects as well as the support from the - community - please support %tvmet. - - */ - - -// Local Variables: -// mode:c++ -// End: diff --git a/tvmet-1.7.1/examples/Makefile.am b/tvmet-1.7.1/examples/Makefile.am deleted file mode 100644 index 6d0c25234..000000000 --- a/tvmet-1.7.1/examples/Makefile.am +++ /dev/null @@ -1,59 +0,0 @@ -# $Id: Makefile.am,v 1.12 2004/04/28 21:59:40 opetzold Exp $ - -AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include - -EXTRA_PROGRAMS = \ - xpr_print_v1 \ - xpr_print_v2 \ - xpr_print_v3 \ - xpr_print_v4 \ - xpr_print_m1 \ - xpr_print_m2 \ - xpr_print_m3 \ - xpr_print_m4 \ - xpr_print_mv1 \ - xpr_print_mv2 \ - mv \ - mm \ - cmv \ - cmm \ - matrix_col \ - diag \ - ray \ - hspiess \ - redwards \ - frob_matrix_norm \ - alias \ - aliasing - -DISTCLEANFILES = $(EXTRA_PROGRAMS) - -xpr_print_v1_SOURCES = xpr_print_v1.cc -xpr_print_v2_SOURCES = xpr_print_v2.cc -xpr_print_v3_SOURCES = xpr_print_v3.cc -xpr_print_v4_SOURCES = xpr_print_v4.cc -xpr_print_m1_SOURCES = xpr_print_m1.cc -xpr_print_m2_SOURCES = xpr_print_m2.cc -xpr_print_m3_SOURCES = xpr_print_m3.cc -xpr_print_m4_SOURCES = xpr_print_m4.cc -xpr_print_mv1_SOURCES = xpr_print_mv1.cc -xpr_print_mv2_SOURCES = xpr_print_mv2.cc - -mv_SOURCES = mv.cc -mm_SOURCES = mm.cc -cmv_SOURCES = cmv.cc -cmm_SOURCES = cmm.cc -matrix_col_SOURCES = matrix_col.cc -diag_SOURCES = diag.cc - -ray_SOURCES = ray.cc - -redwards_SOURCES = redwards.cc -hspiess_SOURCES = hspiess.cc - -frob_matrix_norm_SOURCES = frob_matrix_norm.cc - -alias_SOURCES = alias.cc -aliasing_SOURCES = aliasing.cc - -examples: $(EXTRA_PROGRAMS) diff --git a/tvmet-1.7.1/examples/Makefile.in b/tvmet-1.7.1/examples/Makefile.in deleted file mode 100644 index ce43f3ac7..000000000 --- a/tvmet-1.7.1/examples/Makefile.in +++ /dev/null @@ -1,651 +0,0 @@ -# Makefile.in generated by automake 1.8.3 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# $Id: Makefile.am,v 1.12 2004/04/28 21:59:40 opetzold Exp $ -SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) $(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) $(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) $(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) $(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) $(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) $(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) $(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) $(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_triplet = @host@ -EXTRA_PROGRAMS = xpr_print_v1$(EXEEXT) xpr_print_v2$(EXEEXT) \ - xpr_print_v3$(EXEEXT) xpr_print_v4$(EXEEXT) \ - xpr_print_m1$(EXEEXT) xpr_print_m2$(EXEEXT) \ - xpr_print_m3$(EXEEXT) xpr_print_m4$(EXEEXT) \ - xpr_print_mv1$(EXEEXT) xpr_print_mv2$(EXEEXT) mv$(EXEEXT) \ - mm$(EXEEXT) cmv$(EXEEXT) cmm$(EXEEXT) matrix_col$(EXEEXT) \ - diag$(EXEEXT) ray$(EXEEXT) hspiess$(EXEEXT) redwards$(EXEEXT) \ - frob_matrix_norm$(EXEEXT) alias$(EXEEXT) aliasing$(EXEEXT) -subdir = examples -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \ - $(top_srcdir)/config/ac_create_prefix_config_h.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \ - $(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \ - $(top_srcdir)/config/ac_cxx_have_mutable.m4 \ - $(top_srcdir)/config/ac_cxx_have_namespaces.m4 \ - $(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \ - $(top_srcdir)/config/ac_cxx_partial_specialization.m4 \ - $(top_srcdir)/config/ac_cxx_typename.m4 \ - $(top_srcdir)/config/ac_set_compiler.m4 \ - $(top_srcdir)/config/op_doxygen_doc.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(mkdir_p) -CONFIG_HEADER = $(top_builddir)/config/config.h -CONFIG_CLEAN_FILES = -am_alias_OBJECTS = alias.$(OBJEXT) -alias_OBJECTS = $(am_alias_OBJECTS) -alias_LDADD = $(LDADD) -am_aliasing_OBJECTS = aliasing.$(OBJEXT) -aliasing_OBJECTS = $(am_aliasing_OBJECTS) -aliasing_LDADD = $(LDADD) -am_cmm_OBJECTS = cmm.$(OBJEXT) -cmm_OBJECTS = $(am_cmm_OBJECTS) -cmm_LDADD = $(LDADD) -am_cmv_OBJECTS = cmv.$(OBJEXT) -cmv_OBJECTS = $(am_cmv_OBJECTS) -cmv_LDADD = $(LDADD) -am_diag_OBJECTS = diag.$(OBJEXT) -diag_OBJECTS = $(am_diag_OBJECTS) -diag_LDADD = $(LDADD) -am_frob_matrix_norm_OBJECTS = frob_matrix_norm.$(OBJEXT) -frob_matrix_norm_OBJECTS = $(am_frob_matrix_norm_OBJECTS) -frob_matrix_norm_LDADD = $(LDADD) -am_hspiess_OBJECTS = hspiess.$(OBJEXT) -hspiess_OBJECTS = $(am_hspiess_OBJECTS) -hspiess_LDADD = $(LDADD) -am_matrix_col_OBJECTS = matrix_col.$(OBJEXT) -matrix_col_OBJECTS = $(am_matrix_col_OBJECTS) -matrix_col_LDADD = $(LDADD) -am_mm_OBJECTS = mm.$(OBJEXT) -mm_OBJECTS = $(am_mm_OBJECTS) -mm_LDADD = $(LDADD) -am_mv_OBJECTS = mv.$(OBJEXT) -mv_OBJECTS = $(am_mv_OBJECTS) -mv_LDADD = $(LDADD) -am_ray_OBJECTS = ray.$(OBJEXT) -ray_OBJECTS = $(am_ray_OBJECTS) -ray_LDADD = $(LDADD) -am_redwards_OBJECTS = redwards.$(OBJEXT) -redwards_OBJECTS = $(am_redwards_OBJECTS) -redwards_LDADD = $(LDADD) -am_xpr_print_m1_OBJECTS = xpr_print_m1.$(OBJEXT) -xpr_print_m1_OBJECTS = $(am_xpr_print_m1_OBJECTS) -xpr_print_m1_LDADD = $(LDADD) -am_xpr_print_m2_OBJECTS = xpr_print_m2.$(OBJEXT) -xpr_print_m2_OBJECTS = $(am_xpr_print_m2_OBJECTS) -xpr_print_m2_LDADD = $(LDADD) -am_xpr_print_m3_OBJECTS = xpr_print_m3.$(OBJEXT) -xpr_print_m3_OBJECTS = $(am_xpr_print_m3_OBJECTS) -xpr_print_m3_LDADD = $(LDADD) -am_xpr_print_m4_OBJECTS = xpr_print_m4.$(OBJEXT) -xpr_print_m4_OBJECTS = $(am_xpr_print_m4_OBJECTS) -xpr_print_m4_LDADD = $(LDADD) -am_xpr_print_mv1_OBJECTS = xpr_print_mv1.$(OBJEXT) -xpr_print_mv1_OBJECTS = $(am_xpr_print_mv1_OBJECTS) -xpr_print_mv1_LDADD = $(LDADD) -am_xpr_print_mv2_OBJECTS = xpr_print_mv2.$(OBJEXT) -xpr_print_mv2_OBJECTS = $(am_xpr_print_mv2_OBJECTS) -xpr_print_mv2_LDADD = $(LDADD) -am_xpr_print_v1_OBJECTS = xpr_print_v1.$(OBJEXT) -xpr_print_v1_OBJECTS = $(am_xpr_print_v1_OBJECTS) -xpr_print_v1_LDADD = $(LDADD) -am_xpr_print_v2_OBJECTS = xpr_print_v2.$(OBJEXT) -xpr_print_v2_OBJECTS = $(am_xpr_print_v2_OBJECTS) -xpr_print_v2_LDADD = $(LDADD) -am_xpr_print_v3_OBJECTS = xpr_print_v3.$(OBJEXT) -xpr_print_v3_OBJECTS = $(am_xpr_print_v3_OBJECTS) -xpr_print_v3_LDADD = $(LDADD) -am_xpr_print_v4_OBJECTS = xpr_print_v4.$(OBJEXT) -xpr_print_v4_OBJECTS = $(am_xpr_print_v4_OBJECTS) -xpr_print_v4_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config -depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/alias.Po ./$(DEPDIR)/aliasing.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/cmm.Po ./$(DEPDIR)/cmv.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/diag.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/frob_matrix_norm.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/hspiess.Po ./$(DEPDIR)/matrix_col.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/mm.Po ./$(DEPDIR)/mv.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/ray.Po ./$(DEPDIR)/redwards.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m1.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m2.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m3.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_m4.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_mv1.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_mv2.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v1.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v2.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v3.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/xpr_print_v4.Po -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) \ - $(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) \ - $(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) \ - $(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) \ - $(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) \ - $(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) \ - $(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) \ - $(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) \ - $(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES) -DIST_SOURCES = $(alias_SOURCES) $(aliasing_SOURCES) $(cmm_SOURCES) \ - $(cmv_SOURCES) $(diag_SOURCES) $(frob_matrix_norm_SOURCES) \ - $(hspiess_SOURCES) $(matrix_col_SOURCES) $(mm_SOURCES) \ - $(mv_SOURCES) $(ray_SOURCES) $(redwards_SOURCES) \ - $(xpr_print_m1_SOURCES) $(xpr_print_m2_SOURCES) \ - $(xpr_print_m3_SOURCES) $(xpr_print_m4_SOURCES) \ - $(xpr_print_mv1_SOURCES) $(xpr_print_mv2_SOURCES) \ - $(xpr_print_v1_SOURCES) $(xpr_print_v2_SOURCES) \ - $(xpr_print_v3_SOURCES) $(xpr_print_v4_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@ -CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@ -CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@ -CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@ -CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@ -CXX_WARN_FLAGS = @CXX_WARN_FLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LATEX_BATCHMODE = @LATEX_BATCHMODE@ -LATEX_MODE = @LATEX_MODE@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include -DISTCLEANFILES = $(EXTRA_PROGRAMS) -xpr_print_v1_SOURCES = xpr_print_v1.cc -xpr_print_v2_SOURCES = xpr_print_v2.cc -xpr_print_v3_SOURCES = xpr_print_v3.cc -xpr_print_v4_SOURCES = xpr_print_v4.cc -xpr_print_m1_SOURCES = xpr_print_m1.cc -xpr_print_m2_SOURCES = xpr_print_m2.cc -xpr_print_m3_SOURCES = xpr_print_m3.cc -xpr_print_m4_SOURCES = xpr_print_m4.cc -xpr_print_mv1_SOURCES = xpr_print_mv1.cc -xpr_print_mv2_SOURCES = xpr_print_mv2.cc -mv_SOURCES = mv.cc -mm_SOURCES = mm.cc -cmv_SOURCES = cmv.cc -cmm_SOURCES = cmm.cc -matrix_col_SOURCES = matrix_col.cc -diag_SOURCES = diag.cc -ray_SOURCES = ray.cc -redwards_SOURCES = redwards.cc -hspiess_SOURCES = hspiess.cc -frob_matrix_norm_SOURCES = frob_matrix_norm.cc -alias_SOURCES = alias.cc -aliasing_SOURCES = aliasing.cc -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu examples/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -alias$(EXEEXT): $(alias_OBJECTS) $(alias_DEPENDENCIES) - @rm -f alias$(EXEEXT) - $(CXXLINK) $(alias_LDFLAGS) $(alias_OBJECTS) $(alias_LDADD) $(LIBS) -aliasing$(EXEEXT): $(aliasing_OBJECTS) $(aliasing_DEPENDENCIES) - @rm -f aliasing$(EXEEXT) - $(CXXLINK) $(aliasing_LDFLAGS) $(aliasing_OBJECTS) $(aliasing_LDADD) $(LIBS) -cmm$(EXEEXT): $(cmm_OBJECTS) $(cmm_DEPENDENCIES) - @rm -f cmm$(EXEEXT) - $(CXXLINK) $(cmm_LDFLAGS) $(cmm_OBJECTS) $(cmm_LDADD) $(LIBS) -cmv$(EXEEXT): $(cmv_OBJECTS) $(cmv_DEPENDENCIES) - @rm -f cmv$(EXEEXT) - $(CXXLINK) $(cmv_LDFLAGS) $(cmv_OBJECTS) $(cmv_LDADD) $(LIBS) -diag$(EXEEXT): $(diag_OBJECTS) $(diag_DEPENDENCIES) - @rm -f diag$(EXEEXT) - $(CXXLINK) $(diag_LDFLAGS) $(diag_OBJECTS) $(diag_LDADD) $(LIBS) -frob_matrix_norm$(EXEEXT): $(frob_matrix_norm_OBJECTS) $(frob_matrix_norm_DEPENDENCIES) - @rm -f frob_matrix_norm$(EXEEXT) - $(CXXLINK) $(frob_matrix_norm_LDFLAGS) $(frob_matrix_norm_OBJECTS) $(frob_matrix_norm_LDADD) $(LIBS) -hspiess$(EXEEXT): $(hspiess_OBJECTS) $(hspiess_DEPENDENCIES) - @rm -f hspiess$(EXEEXT) - $(CXXLINK) $(hspiess_LDFLAGS) $(hspiess_OBJECTS) $(hspiess_LDADD) $(LIBS) -matrix_col$(EXEEXT): $(matrix_col_OBJECTS) $(matrix_col_DEPENDENCIES) - @rm -f matrix_col$(EXEEXT) - $(CXXLINK) $(matrix_col_LDFLAGS) $(matrix_col_OBJECTS) $(matrix_col_LDADD) $(LIBS) -mm$(EXEEXT): $(mm_OBJECTS) $(mm_DEPENDENCIES) - @rm -f mm$(EXEEXT) - $(CXXLINK) $(mm_LDFLAGS) $(mm_OBJECTS) $(mm_LDADD) $(LIBS) -mv$(EXEEXT): $(mv_OBJECTS) $(mv_DEPENDENCIES) - @rm -f mv$(EXEEXT) - $(CXXLINK) $(mv_LDFLAGS) $(mv_OBJECTS) $(mv_LDADD) $(LIBS) -ray$(EXEEXT): $(ray_OBJECTS) $(ray_DEPENDENCIES) - @rm -f ray$(EXEEXT) - $(CXXLINK) $(ray_LDFLAGS) $(ray_OBJECTS) $(ray_LDADD) $(LIBS) -redwards$(EXEEXT): $(redwards_OBJECTS) $(redwards_DEPENDENCIES) - @rm -f redwards$(EXEEXT) - $(CXXLINK) $(redwards_LDFLAGS) $(redwards_OBJECTS) $(redwards_LDADD) $(LIBS) -xpr_print_m1$(EXEEXT): $(xpr_print_m1_OBJECTS) $(xpr_print_m1_DEPENDENCIES) - @rm -f xpr_print_m1$(EXEEXT) - $(CXXLINK) $(xpr_print_m1_LDFLAGS) $(xpr_print_m1_OBJECTS) $(xpr_print_m1_LDADD) $(LIBS) -xpr_print_m2$(EXEEXT): $(xpr_print_m2_OBJECTS) $(xpr_print_m2_DEPENDENCIES) - @rm -f xpr_print_m2$(EXEEXT) - $(CXXLINK) $(xpr_print_m2_LDFLAGS) $(xpr_print_m2_OBJECTS) $(xpr_print_m2_LDADD) $(LIBS) -xpr_print_m3$(EXEEXT): $(xpr_print_m3_OBJECTS) $(xpr_print_m3_DEPENDENCIES) - @rm -f xpr_print_m3$(EXEEXT) - $(CXXLINK) $(xpr_print_m3_LDFLAGS) $(xpr_print_m3_OBJECTS) $(xpr_print_m3_LDADD) $(LIBS) -xpr_print_m4$(EXEEXT): $(xpr_print_m4_OBJECTS) $(xpr_print_m4_DEPENDENCIES) - @rm -f xpr_print_m4$(EXEEXT) - $(CXXLINK) $(xpr_print_m4_LDFLAGS) $(xpr_print_m4_OBJECTS) $(xpr_print_m4_LDADD) $(LIBS) -xpr_print_mv1$(EXEEXT): $(xpr_print_mv1_OBJECTS) $(xpr_print_mv1_DEPENDENCIES) - @rm -f xpr_print_mv1$(EXEEXT) - $(CXXLINK) $(xpr_print_mv1_LDFLAGS) $(xpr_print_mv1_OBJECTS) $(xpr_print_mv1_LDADD) $(LIBS) -xpr_print_mv2$(EXEEXT): $(xpr_print_mv2_OBJECTS) $(xpr_print_mv2_DEPENDENCIES) - @rm -f xpr_print_mv2$(EXEEXT) - $(CXXLINK) $(xpr_print_mv2_LDFLAGS) $(xpr_print_mv2_OBJECTS) $(xpr_print_mv2_LDADD) $(LIBS) -xpr_print_v1$(EXEEXT): $(xpr_print_v1_OBJECTS) $(xpr_print_v1_DEPENDENCIES) - @rm -f xpr_print_v1$(EXEEXT) - $(CXXLINK) $(xpr_print_v1_LDFLAGS) $(xpr_print_v1_OBJECTS) $(xpr_print_v1_LDADD) $(LIBS) -xpr_print_v2$(EXEEXT): $(xpr_print_v2_OBJECTS) $(xpr_print_v2_DEPENDENCIES) - @rm -f xpr_print_v2$(EXEEXT) - $(CXXLINK) $(xpr_print_v2_LDFLAGS) $(xpr_print_v2_OBJECTS) $(xpr_print_v2_LDADD) $(LIBS) -xpr_print_v3$(EXEEXT): $(xpr_print_v3_OBJECTS) $(xpr_print_v3_DEPENDENCIES) - @rm -f xpr_print_v3$(EXEEXT) - $(CXXLINK) $(xpr_print_v3_LDFLAGS) $(xpr_print_v3_OBJECTS) $(xpr_print_v3_LDADD) $(LIBS) -xpr_print_v4$(EXEEXT): $(xpr_print_v4_OBJECTS) $(xpr_print_v4_DEPENDENCIES) - @rm -f xpr_print_v4$(EXEEXT) - $(CXXLINK) $(xpr_print_v4_LDFLAGS) $(xpr_print_v4_OBJECTS) $(xpr_print_v4_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alias.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aliasing.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmv.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diag.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frob_matrix_norm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hspiess.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix_col.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mv.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ray.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/redwards.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_m4.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_mv1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_mv2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v1.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v3.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpr_print_v4.Po@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am - - -examples: $(EXTRA_PROGRAMS) -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/tvmet-1.7.1/examples/alias.cc b/tvmet-1.7.1/examples/alias.cc deleted file mode 100644 index 01f02eccc..000000000 --- a/tvmet-1.7.1/examples/alias.cc +++ /dev/null @@ -1,33 +0,0 @@ -/* - * $Id: alias.cc,v 1.1 2004/03/26 07:56:32 opetzold Exp $ - * - * This example shows the solution of the problem with aliasing - * mentioned at - * http://tvmet.sourceforge.net/notes.html#alias - */ - -#include -#include -#include -#include -#include - -using namespace std; - - -int main() -{ - typedef tvmet::Matrix matrix_type; - - matrix_type M; - - std::generate(M.begin(), M.end(), - tvmet::util::Incrementor()); - - std::cout << "M = " << M << std::endl; - - alias(M) = M * trans(M); - - std::cout << M << std::endl; - -} diff --git a/tvmet-1.7.1/examples/aliasing.cc b/tvmet-1.7.1/examples/aliasing.cc deleted file mode 100644 index 4ba87d8d3..000000000 --- a/tvmet-1.7.1/examples/aliasing.cc +++ /dev/null @@ -1,44 +0,0 @@ -/* - * $Id: aliasing.cc,v 1.2 2004/03/26 07:58:06 opetzold Exp $ - * - * This example shows the problem with aliasing mentioned at - * http://tvmet.sourceforge.net/notes.html#alias - */ - -#include -#include -#include -#include - -using std::cout; using std::endl; -using namespace tvmet; - -typedef Matrix matrix_type; - -int main() -{ - matrix_type A, B; - matrix_type C; - - std::generate(A.begin(), A.end(), - tvmet::util::Incrementor()); - std::generate(B.begin(), B.end(), - tvmet::util::Incrementor()); - - cout << "A = " << A << endl; - cout << "B = " << B << endl; - - // matrix prod without aliasing - C = A * B; - cout << "C = A * B = " << C << endl; - - // work around for aliasing - matrix_type temp_A(A); - A = temp_A * B; - cout << "matrix_type temp_A(A);\n" - << "A = temp_A * B = " << A << endl; - - // this shows the aliasing problem - A = A * B; - cout << "A = A * B = " << A << endl; -} diff --git a/tvmet-1.7.1/examples/cmm.cc b/tvmet-1.7.1/examples/cmm.cc deleted file mode 100644 index bd470aacd..000000000 --- a/tvmet-1.7.1/examples/cmm.cc +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include - -#include - -using namespace tvmet; -using std::cout; -using std::endl; - -typedef Matrix,3,3> matrix33d; - -void testMM(matrix33d& res, const matrix33d& m1, const matrix33d& m2) { - res = m1 * m2; -} - -int main() -{ - matrix33d m1, m2, m3; - - m1 = 1,4,7, - 2,5,8, - 3,6,9; - m2 = m1; - - testMM(m3, m1, m2); - - cout << m1 << "\n*\n" << m2 << "\n="; - cout << m3 << endl; -} diff --git a/tvmet-1.7.1/examples/cmv.cc b/tvmet-1.7.1/examples/cmv.cc deleted file mode 100644 index 4ea55ad13..000000000 --- a/tvmet-1.7.1/examples/cmv.cc +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include - -#include -#include - -using namespace tvmet; -using std::cout; -using std::endl; - -typedef Vector,3> vector3d; -typedef Matrix,3,3> matrix33d; - -#if (defined __ICC ) -#pragma warning(disable:1418) // external definition with no prior declaration -#endif - -void testMV(vector3d& res, const matrix33d& m, const vector3d& v) { - res = m * v; -} - -int main() -{ - vector3d v1, vr; - matrix33d m1; - - v1 = 1,2,3; - m1 = 1,4,7, - 2,5,8, - 3,6,9; - - testMV(vr, m1, v1); - - cout << m1 << " * " << v1 << " =\n"; - cout << vr << endl; -} diff --git a/tvmet-1.7.1/examples/diag.cc b/tvmet-1.7.1/examples/diag.cc deleted file mode 100644 index 40a4c1825..000000000 --- a/tvmet-1.7.1/examples/diag.cc +++ /dev/null @@ -1,32 +0,0 @@ -/* Version: $Id: diag.cc,v 1.1 2003/02/12 19:03:48 opetzold Exp $ */ - - -#include -#include -#include - - -using namespace std; -using namespace tvmet; - -typedef Matrix matrix33d; -typedef Vector vector3d; - - -int main() -{ - matrix33d m1, m2(0); - vector3d v1, v2; - - m1 = 1,4,7, - 2,5,8, - 3,6,9; - v1 = diag(m1); - - // not yet, since we need to assign an expression/scalar to an expression - // diag(m2) = 1.0; - - cout << "M1 = " << m1 << endl; - cout << "diag(M1) = " << v1 << endl; - cout << "identity(M2) = " << m2 << endl; -} diff --git a/tvmet-1.7.1/examples/frob_matrix_norm.cc b/tvmet-1.7.1/examples/frob_matrix_norm.cc deleted file mode 100644 index eb26e4161..000000000 --- a/tvmet-1.7.1/examples/frob_matrix_norm.cc +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: frob_matrix_norm.cc,v 1.3 2003/11/30 08:26:25 opetzold Exp $ - */ - -#include -#include -#include - -using namespace std; - -template -double -frob_norm(const tvmet::Matrix& M) { - return std::sqrt(M(0,0)*M(0,0) + M(1,0)*M(1,0) + M(2,0)*M(2,0) - + M(0,1)*M(0,1) + M(1,1)*M(1,1) + M(2,1)*M(2,1) - + M(0,2)*M(0,2) + M(1,2)*M(1,2) + M(2,2)*M(2,2)); -} - -namespace tvmet { - template - typename Traits::float_type - norm(const Matrix& M) { - return std::sqrt( sum( diag( MtM_prod(M,M) ) ) ); - } -} - -int main() -{ - typedef tvmet::Matrix matrix_type; - - matrix_type M; - - M = 1,2,3,4,5,6,7,8,9; - cout << M << endl; - - cout << "handopt norm = " << frob_norm(M) << endl; - cout << "tvmet::norm = " << tvmet::norm(M) << endl; -} - -/* - gcc 3.3 produce for the hand optimized frob_norm: - -_Z9frob_normIdLj3ELj3EEdRKN5tvmet6MatrixIT_XT0_EXT1_EEE: -.LFB3210: - pushl %ebp -.LCFI6: - movl %esp, %ebp -.LCFI7: - subl $8, %esp -.LCFI8: - movl 8(%ebp), %eax - fldl (%eax) - fldl 24(%eax) - fxch %st(1) - fmul %st(0), %st - fxch %st(1) - fmul %st(0), %st - faddp %st, %st(1) - fldl 48(%eax) - fmul %st(0), %st - faddp %st, %st(1) - fldl 8(%eax) - fmul %st(0), %st - faddp %st, %st(1) - fldl 32(%eax) - fmul %st(0), %st - faddp %st, %st(1) - fldl 56(%eax) - fmul %st(0), %st - faddp %st, %st(1) - fldl 16(%eax) - fmul %st(0), %st - faddp %st, %st(1) - fldl 40(%eax) - fmul %st(0), %st - faddp %st, %st(1) - fldl 64(%eax) - fmul %st(0), %st - faddp %st, %st(1) - fld %st(0) - fsqrt - fucom %st(0) - fnstsw %ax - sahf - jp .L189 - jne .L189 - fstp %st(1) -.L186: - leave - ret - -*/ - -/* - gcc 3.3 produce the norm function using tvmet 1.3.0: - -_ZN5tvmet4normIdLj3ELj3EEENS_13TraitsIT_E10float_typeERKNS_6MatrixIS2_XT0_EXT1_EEE: -.LFB3252: -.L194: -.L198: -.L203: -.L207: -.L212: -.L225: -.L238: -.L251: - pushl %ebp -.LCFI9: - movl %esp, %ebp -.LCFI10: - subl $56, %esp -.LCFI11: - movl 8(%ebp), %edx - leal -24(%ebp), %eax - movl %eax, -12(%ebp) - leal -12(%ebp), %eax - fldl 24(%edx) - fldl 48(%edx) - fldl (%edx) - fxch %st(2) - fmul %st(0), %st - fxch %st(1) - movl %eax, -28(%ebp) - fmul %st(0), %st - fxch %st(2) - movl %edx, -24(%ebp) - movl %edx, -20(%ebp) - fmul %st(0), %st - fldl 8(%edx) - fxch %st(2) - faddp %st, %st(3) - fldl 56(%edx) - fxch %st(2) - fmul %st(0), %st - fxch %st(1) - faddp %st, %st(3) - fldl 32(%edx) - fxch %st(2) - fmul %st(0), %st - fxch %st(2) - fmul %st(0), %st - fldl 16(%edx) - fxch %st(1) - faddp %st, %st(3) - fmul %st(0), %st - fldl 64(%edx) - fxch %st(2) - faddp %st, %st(3) - fldl 40(%edx) - fxch %st(2) - fmul %st(0), %st - fxch %st(2) - fmul %st(0), %st - faddp %st, %st(2) - faddp %st, %st(1) - faddp %st, %st(1) - faddp %st, %st(1) - fld %st(0) - fsqrt - fucom %st(0) - fnstsw %ax - sahf - jp .L265 - jne .L265 - fstp %st(1) -.L261: - fstpl -8(%ebp) - fldl -8(%ebp) - leave - ret - -*/ diff --git a/tvmet-1.7.1/examples/hspiess.cc b/tvmet-1.7.1/examples/hspiess.cc deleted file mode 100644 index 129c4f0c0..000000000 --- a/tvmet-1.7.1/examples/hspiess.cc +++ /dev/null @@ -1,37 +0,0 @@ -#include - -#include - -using namespace std; - -int main() -{ - tvmet::Matrix B; - tvmet::Matrix D; - - B = - -0.05, 0, - 0, 0.05, - 0.05, -0.05; - D = - 2000, 1000, 0, - 1000, 2000, 0, - 0, 0, 500; - - cout << "B = " << B << endl; - cout << "D = " << D << endl; - - { - tvmet::Matrix K; - - K = trans(B) * D * B; - cout << "K = " << K << endl; - } - - { - tvmet::Matrix K; - - K = tvmet::Matrix(trans(B) * D) * B; - cout << "K = " << K << endl; - } -} diff --git a/tvmet-1.7.1/examples/matrix_col.cc b/tvmet-1.7.1/examples/matrix_col.cc deleted file mode 100644 index a807dbb5f..000000000 --- a/tvmet-1.7.1/examples/matrix_col.cc +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include - -#include - -#include -#include - -using namespace std; -using namespace tvmet; - -typedef Vector vector3d; -typedef Matrix matrix33d; - -int main() -{ - matrix33d m1; - - std::generate(m1.begin(), m1.end(), std::rand); - - vector3d vc0( col(m1, 0) ); - vector3d vc1( col(m1, 1) ); - vector3d vc2( col(m1, 2) ); - - vector3d vr0( row(m1, 0) ); - vector3d vr1( row(m1, 1) ); - vector3d vr2( row(m1, 2) ); - - - cout << std::setw(12) << m1 << endl; - - cout << "col vectors:" << endl; - cout << vc0 << endl; - cout << vc1 << endl; - cout << vc2 << endl; - - cout << "row vectors:" << endl; - cout << vr0 << endl; - cout << vr1 << endl; - cout << vr2 << endl; - -} - diff --git a/tvmet-1.7.1/examples/mm.cc b/tvmet-1.7.1/examples/mm.cc deleted file mode 100644 index f251e6133..000000000 --- a/tvmet-1.7.1/examples/mm.cc +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -typedef Matrix matrix33d; - -#if (defined __ICC ) -#pragma warning(disable:1418) // external definition with no prior declaration -#endif - -void testMM(matrix33d& res, const matrix33d& m1, const matrix33d& m2) { - res = m1 * m2; -} - -int main() -{ - matrix33d m1, m2, m3; - - m1 = 1,4,7, - 2,5,8, - 3,6,9; - m2 = m1; - - testMM(m3, m1, m2); - - cout << m1 << "\n*\n" << m2 << "\n="; - cout << m3 << endl; -} diff --git a/tvmet-1.7.1/examples/mv.cc b/tvmet-1.7.1/examples/mv.cc deleted file mode 100644 index 9665409e4..000000000 --- a/tvmet-1.7.1/examples/mv.cc +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include -#include - -#include - -#include -#include - -using namespace std; -using namespace tvmet; - -typedef Vector vector3d; -typedef Matrix matrix33d; - -#if (defined __ICC ) -#pragma warning(disable:1418) // external definition with no prior declaration -#endif - -void testMV(vector3d& res, const matrix33d& m, const vector3d& v) { - res = m * v; -} - -int main() -{ - vector3d v1, vr; - matrix33d m1; - - std::generate(v1.begin(), v1.end(), std::rand); - std::generate(m1.begin(), m1.end(), std::rand); - - testMV(vr, m1, v1); - - cout << std::setw(12) << m1 << " * " << std::setw(12) << v1 << " =\n"; - cout << std::setw(12) << vr << endl; -} diff --git a/tvmet-1.7.1/examples/ray.cc b/tvmet-1.7.1/examples/ray.cc deleted file mode 100644 index 6ab07b926..000000000 --- a/tvmet-1.7.1/examples/ray.cc +++ /dev/null @@ -1,103 +0,0 @@ -#include -#include - -#include - -using namespace std; -using namespace tvmet; - -typedef Vector vector3d; - -void reflect(vector3d& reflection, const vector3d& ray, const vector3d& surfaceNormal) -{ - // The surface normal must be unit length to use this equation. - reflection = ray - 2 * dot(ray,surfaceNormal) * surfaceNormal; - - // expression printing - // cout << (ray - 2 * dot(ray,surfaceNormal) * surfaceNormal) << endl; -} - -int main() -{ - vector3d x, y, z; - - // y will be the incident ray - y[0] = 1; - y[1] = 0; - y[2] = -1; - - // z is the surface normal - z[0] = 0; - z[1] = 0; - z[2] = 1; - - reflect(x, y, z); - - cout << "Reflected ray is: [ " << x[0] << " " << x[1] << " " << x[2] - << " ]" << endl; -} - -/***************************************************************************************** -gcc 3.2.0 produce this code (i586) using tvmet 1.3.0: - -_Z7reflectRN5tvmet6VectorIdLj3EEERKS1_S4_: -.LFB2757: -.L8: -.L18: -.L22: -.L28: -.L32: -.L38: -.L44: -.L48: - pushl %ebp -.LCFI0: - movl %esp, %ebp -.LCFI1: - leal -32(%ebp), %eax - pushl %ebx -.LCFI2: - subl $52, %esp -.LCFI3: - movl 16(%ebp), %edx - movl %eax, -24(%ebp) - movl 12(%ebp), %ecx - leal -36(%ebp), %eax - movl %eax, -20(%ebp) - movl 8(%ebp), %ebx - leal -24(%ebp), %eax - fldl 8(%edx) - fldl 16(%edx) - fmull 16(%ecx) - fxch %st(1) - movl %eax, -12(%ebp) - leal -52(%ebp), %eax - fmull 8(%ecx) - movl %eax, -48(%ebp) - leal -12(%ebp), %eax - fldl (%edx) - fmull (%ecx) - fxch %st(1) - movl %eax, -44(%ebp) - faddp %st, %st(2) - faddp %st, %st(1) - fadd %st(0), %st - fld %st(0) - fstl -32(%ebp) - fxch %st(1) - fmull (%edx) - fsubrl (%ecx) - fstpl (%ebx) - fld %st(0) - fmull 8(%edx) - fsubrl 8(%ecx) - fstpl 8(%ebx) - fmull 16(%edx) - fsubrl 16(%ecx) - fstpl 16(%ebx) - addl $52, %esp - popl %ebx - popl %ebp - ret - -*****************************************************************************************/ diff --git a/tvmet-1.7.1/examples/redwards.cc b/tvmet-1.7.1/examples/redwards.cc deleted file mode 100644 index 46a525d6e..000000000 --- a/tvmet-1.7.1/examples/redwards.cc +++ /dev/null @@ -1,25 +0,0 @@ -/* - * This is a reused case study used as example from Rusell Edwards. - * Works only with > release-1-2-0 due to a missed - * product/operator*(Matrix,XprVector) on releases prior. - * It shows a possible use of chained expressions. - */ -#include - -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - Matrix eigenvecs; - Matrix M; - - eigenvecs = 1,2,3,4,5,6,7,8,9; - M = 10,20,30,40,50,60,70,80,90; - - Vector ev0( M * col(eigenvecs, 0)); - - cout << "ev0 = " << ev0 << endl; -} diff --git a/tvmet-1.7.1/examples/xpr_print_m1.cc b/tvmet-1.7.1/examples/xpr_print_m1.cc deleted file mode 100644 index f48fe10fe..000000000 --- a/tvmet-1.7.1/examples/xpr_print_m1.cc +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Matrix stuff I - Matrix m1, m2, m3; - m1 = 1,2,3, - 4,5,6, - 7,8,9; - m2 = trans(m1); - - cout << "Xpr Level printing of " - << m1 << "\n*\n" << m2 <<"\nresults into:\n"; - cout << m1*m2 << endl; - cout << "The result =\n"; - m3 = m1*m2; - cout << m3 << endl << endl; -} diff --git a/tvmet-1.7.1/examples/xpr_print_m2.cc b/tvmet-1.7.1/examples/xpr_print_m2.cc deleted file mode 100644 index c9151fdc3..000000000 --- a/tvmet-1.7.1/examples/xpr_print_m2.cc +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Matrix stuff II (unary functions) - Matrix m1, m2, m3; - m1 = 1,2,3, - 4,5,6, - 7,8,9; - m2 = trans(m1); - - cout << "Xpr Level printing of " - << "sqrt(\n" << m1 <<"):\n"; - cout << sqrt(m1) << endl; - cout << "The result = \n"; - m3 = sqrt(m1); - cout << m3 << endl << endl; -} diff --git a/tvmet-1.7.1/examples/xpr_print_m3.cc b/tvmet-1.7.1/examples/xpr_print_m3.cc deleted file mode 100644 index 69f6451be..000000000 --- a/tvmet-1.7.1/examples/xpr_print_m3.cc +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Matrix stuff III (binary functions) - Matrix m1, m2, m3; - m1 = 1,2,3, - 4,5,6, - 7,8,9; - m2 = trans(m1); - - cout << "Xpr Level printing of " - << "pow(\n" << m1 << ", " << m2 << "):\n"; - cout << pow(m1, m2) << endl; - cout << "The result = \n"; - m3 = pow(m1, m2); - cout << m3 << endl << endl; -} diff --git a/tvmet-1.7.1/examples/xpr_print_m4.cc b/tvmet-1.7.1/examples/xpr_print_m4.cc deleted file mode 100644 index a2499813a..000000000 --- a/tvmet-1.7.1/examples/xpr_print_m4.cc +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Matrix stuff IV (binary functions with pod) - Matrix m1, m2, m3; - m1 = 1,2,3, - 4,5,6, - 7,8,9; - m2 = trans(m1); - - cout << "Xpr Level printing of " - << "pow(\n" << m1 << ", " << 3 << "):\n"; - cout << pow(m1, 3) << endl; - cout << "The result = \n"; - m3 = pow(m1, 3); - cout << m3 << endl << endl; -} diff --git a/tvmet-1.7.1/examples/xpr_print_mv1.cc b/tvmet-1.7.1/examples/xpr_print_mv1.cc deleted file mode 100644 index c48629586..000000000 --- a/tvmet-1.7.1/examples/xpr_print_mv1.cc +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Matrix Vector stuff I - Vector v1(1,2,3), v2(v1); - Vector v3(0); - - Matrix m1, m2, m3; - m1 = 1,2,3, - 4,5,6, - 7,8,9; - m2 = trans(m1); - - cout << "Xpr Level printing of " - << m1 << "\n* " << v1 <<"\nresults into:\n"; - cout << m1*v1 << endl; - cout << "The result =\n"; - v3 = m1*v1; - cout << v3 << endl << endl; - -} diff --git a/tvmet-1.7.1/examples/xpr_print_mv2.cc b/tvmet-1.7.1/examples/xpr_print_mv2.cc deleted file mode 100644 index 4d51e5401..000000000 --- a/tvmet-1.7.1/examples/xpr_print_mv2.cc +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Matrix Vector stuff II - Vector v1(1,2,3), v2(v1); - Vector v3(0); - - Matrix m1, m2, m3; - m1 = 1,2,3, - 4,5,6, - 7,8,9; - m2 = trans(m1); - - cout << "Xpr Level printing of " - << "sqrt(\n" << m1 << "\n* " << v1 << ")\nresults into:\n"; - cout << sqrt(m1*v1) << endl; - cout << "The result =\n"; - v3 = sqrt(m1*v1); - cout << v3 << endl << endl; - -} diff --git a/tvmet-1.7.1/examples/xpr_print_v1.cc b/tvmet-1.7.1/examples/xpr_print_v1.cc deleted file mode 100644 index 98a64b5d1..000000000 --- a/tvmet-1.7.1/examples/xpr_print_v1.cc +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Vector stuff I - Vector v1(1,2,3), v2(v1); - Vector v3(0); - - cout << "Xpr Level printing of " - << v1 << " * " << v2 <<":\n"; - cout << v1*v2 << endl; - cout << "The result = \n"; - v3 = v1*v2; - cout << v3 << endl << endl; -} - diff --git a/tvmet-1.7.1/examples/xpr_print_v2.cc b/tvmet-1.7.1/examples/xpr_print_v2.cc deleted file mode 100644 index f670beb0f..000000000 --- a/tvmet-1.7.1/examples/xpr_print_v2.cc +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Vector stuff II (unary functions) - Vector v1(1,2,3), v2(v1); - Vector v3(0); - - cout << "Xpr Level printing of " - << "sqrt(" << v1 <<"):\n"; - cout << sqrt(v1) << endl; - cout << "The result = \n"; - v3 = sqrt(v1); - cout << v3 << endl << endl; -} - diff --git a/tvmet-1.7.1/examples/xpr_print_v3.cc b/tvmet-1.7.1/examples/xpr_print_v3.cc deleted file mode 100644 index 40167b3e2..000000000 --- a/tvmet-1.7.1/examples/xpr_print_v3.cc +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Vector stuff III (binary functions) - Vector v1(1,2,3), v2(v1); - Vector v3(0); - - cout << "Xpr Level printing of " - << "pow(" << v1 << ", " << v2 << "):\n"; - cout << pow(v1, v2) << endl; - cout << "The result = \n"; - v3 = pow(v1, v2); - cout << v3 << endl << endl; -} - diff --git a/tvmet-1.7.1/examples/xpr_print_v4.cc b/tvmet-1.7.1/examples/xpr_print_v4.cc deleted file mode 100644 index 1253db814..000000000 --- a/tvmet-1.7.1/examples/xpr_print_v4.cc +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -using namespace std; -using namespace tvmet; - -int main() { - // Vector stuff IV (binary functions with pod) - Vector v1(1,2,3), v2(v1); - Vector v3(0); - - cout << "Xpr Level printing of " - << "pow(" << v1 << ", " << 3 << "):\n"; - cout << pow(v1, 3) << endl; - cout << "The result = \n"; - v3 = pow(v1, 3); - cout << v3 << endl << endl; -} - diff --git a/tvmet-1.7.1/include/CMakeLists.txt b/tvmet-1.7.1/include/CMakeLists.txt deleted file mode 100644 index ba566de2e..000000000 --- a/tvmet-1.7.1/include/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -ADD_SUBDIRECTORY(tvmet) \ No newline at end of file diff --git a/tvmet-1.7.1/include/tvmet/AliasProxy.h b/tvmet-1.7.1/include/tvmet/AliasProxy.h deleted file mode 100644 index ff6fa5c4b..000000000 --- a/tvmet-1.7.1/include/tvmet/AliasProxy.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: AliasProxy.h,v 1.4 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_ALIAS_PROXY_H -#define TVMET_ALIAS_PROXY_H - -namespace tvmet { - - -/** forwards */ -template class AliasProxy; - - -/** - * \brief Simplify syntax for alias Matrices and Vectors, - * where aliasing left hand values appear in the - * expression. - * \par Example: - * \code - * typedef tvmet::Matrix matrix_type; - * matrix_type m; - * ... - * alias(m) += trans(m); - * \endcode - * \sa AliasProxy - * \sa Some Notes \ref alias - */ -template -AliasProxy alias(E& expr) { return AliasProxy(expr); } - - -/** - * \class AliasProxy AliasProxy.h "tvmet/AliasProxy.h" - * \brief Assign proxy for alias Matrices and Vectors. - * - * A short lived object to provide simplified alias syntax. - * Only the friend function alias is allowed to create - * such a object. The proxy calls the appropriate member - * alias_xyz() which have to use temporaries to avoid - * overlapping memory regions. - * \sa alias - * \sa Some Notes \ref alias - * \note Thanks to ublas-dev group, where the principle idea - * comes from. - */ -template -class AliasProxy -{ - AliasProxy(const AliasProxy&); - AliasProxy& operator=(const AliasProxy&); - - friend AliasProxy alias<>(E& expr); - -public: - AliasProxy(E& expr) : m_expr(expr) { } - - - template - E& operator=(const E2& expr) { - return m_expr.alias_assign(expr); - } - - template - E& operator+=(const E2& expr) { - return m_expr.alias_add_eq(expr); - } - - template - E& operator-=(const E2& expr) { - return m_expr.alias_sub_eq(expr); - } - - template - E& operator*=(const E2& expr) { - return m_expr.alias_mul_eq(expr); - } - - template - E& operator/=(const E2& expr) { - return m_expr.alias_div_eq(expr); - } - -private: - E& m_expr; -}; - - -#if 0 -namespace element_wise { -// \todo to write -template -E& operator/=(AliasProxy& proxy, const E2& rhs) { - return proxy.div_upd(rhs); -} - -} -#endif - - -} // namespace tvmet - - -#endif /* TVMET_ALIAS_PROXY_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/BinaryFunctionals.h b/tvmet-1.7.1/include/tvmet/BinaryFunctionals.h deleted file mode 100644 index b09cf9045..000000000 --- a/tvmet-1.7.1/include/tvmet/BinaryFunctionals.h +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: BinaryFunctionals.h,v 1.19 2004/10/04 11:40:46 opetzold Exp $ - */ - -#ifndef TVMET_BINARY_FUNCTIONAL_H -#define TVMET_BINARY_FUNCTIONAL_H - -namespace tvmet { - -/** - * \class Fcnl_assign BinaryFunctionals.h "tvmet/BinaryFunctionals.h" - * \brief Binary operator for assign operations. - * - * Unfortunally we have sometimes to cast on assign operations e.g., - * on assign on different POD. So we avoid warnings. - */ -template -struct Fcnl_assign : public BinaryFunctional { - static inline - void apply_on(T1& _tvmet_restrict lhs, T2 rhs) { - lhs = static_cast(rhs); - } - - static - void print_xpr(std::ostream& os, int l=0) { - os << IndentLevel(l) << "fcnl_assign," - << std::endl; - } -}; - - -/** \class Fcnl_add_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */ -/** \class Fcnl_sub_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */ -/** \class Fcnl_mul_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */ -/** \class Fcnl_div_eq BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -struct Fcnl_##NAME : public BinaryFunctional { \ - typedef void value_type; \ - \ - static inline \ - void apply_on(T1& _tvmet_restrict lhs, T2 rhs) { \ - lhs OP rhs; \ - } \ - \ - static \ - void print_xpr(std::ostream& os, int l=0) { \ - os << IndentLevel(l) \ - << "Fcnl_" << #NAME << "," \ - << std::endl; \ - } \ -}; - -TVMET_IMPLEMENT_MACRO(add_eq, +=) -TVMET_IMPLEMENT_MACRO(sub_eq, -=) -TVMET_IMPLEMENT_MACRO(mul_eq, *=) -TVMET_IMPLEMENT_MACRO(div_eq, /=) - -#undef TVMET_IMPLEMENT_MACRO - - -/** \class Fcnl_add BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */ -/** \class Fcnl_sub BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */ -/** \class Fcnl_mul BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */ -/** \class Fcnl_div BinaryFunctionals.h "tvmet/BinaryFunctionals.h" */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -struct Fcnl_##NAME : public BinaryFunctional { \ - typedef typename PromoteTraits::value_type value_type; \ - \ - static inline \ - value_type apply_on(T1 lhs, T2 rhs) { \ - return lhs OP rhs; \ - } \ - \ - static \ - void print_xpr(std::ostream& os, int l=0) { \ - os << IndentLevel(l) \ - << "Fcnl_" << #NAME << "," \ - << std::endl; \ - } \ -}; - -TVMET_IMPLEMENT_MACRO(add, +) -TVMET_IMPLEMENT_MACRO(sub, -) -TVMET_IMPLEMENT_MACRO(mul, *) -TVMET_IMPLEMENT_MACRO(div, /) - -#undef TVMET_IMPLEMENT_MACRO - -#if defined(EIGEN_USE_COMPLEX) -/** - * \class Fcnl_polar BinaryFunctionals.h "tvmet/BinaryFunctionals.h" - * \brief %Functional for polar. - */ -template struct Fcnl_polar : public BinaryFunctional { }; - - -/** - * \class Fcnl_polar BinaryFunctionals.h "tvmet/BinaryFunctionals.h" - * \brief %Functional for polar. - * \note This functional is partialy specialized due to the declaration - * of %polar in namespace std complex polar(T, T). - * This means especially that type promotion isn't avaible here. - */ -template -struct Fcnl_polar : public BinaryFunctional { - typedef std::complex value_type; - - static inline - value_type apply_on(T lhs, T rhs) { - return std::polar(lhs, rhs); - } - - static - void print_xpr(std::ostream& os, int l=0) { - os << IndentLevel(l) << "Fcnl_polar," - << std::endl; - } -}; -#endif // defined(EIGEN_USE_COMPLEX) - - -/** - * \class Fcnl_swap BinaryFunctionals.h "tvmet/BinaryFunctionals.h" - * \brief Binary operator for swapping values using temporaries. - * \todo check for std::swap implementation; todo before LUdecomp - */ -template -struct Fcnl_swap : public BinaryFunctional { - static inline - void apply_on(T1& _tvmet_restrict lhs, T2& _tvmet_restrict rhs) { - typedef typename PromoteTraits::value_type temp_type; - - temp_type temp(lhs); - lhs = static_cast(rhs); - rhs = static_cast(temp); - } - - static - void print_xpr(std::ostream& os, int l=0) { - os << IndentLevel(l) << "Fcnl_swap," - << std::endl; - } -}; - - -} // namespace tvmet - -#endif // TVMET_BINARY_FUNCTIONAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/CMakeLists.txt b/tvmet-1.7.1/include/tvmet/CMakeLists.txt deleted file mode 100644 index fb75aac19..000000000 --- a/tvmet-1.7.1/include/tvmet/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -INCLUDE (CheckIncludeFiles) -INCLUDE (CheckRestrictKeyword) -INCLUDE (CheckAlwaysInline) - -FILE(GLOB tvmet_header_SRCS "*.h") - -CHECK_INCLUDE_FILES (sys/time.h TVMET_HAVE_SYS_TIME_H) -CHECK_INCLUDE_FILES (unistd.h TVMET_HAVE_UNISTD_H) -CHECK_RESTRICT_KEYWORD (TVMET_RESTRICT_KEYWORD) -CHECK_ALWAYS_INLINE (TVMET_ALWAYS_INLINE) - -# the following are directories where stuff will be installed to -SET(INCLUDE_INSTALL_DIR - "${CMAKE_INSTALL_PREFIX}/include/tvmet" - CACHE PATH - "The subdirectory to the header prefix" - FORCE) - -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake - ${INCLUDE_INSTALL_DIR}/config.h) - -INSTALL(FILES - ${tvmet_header_SRCS} - DESTINATION ${INCLUDE_INSTALL_DIR} - ) - -ADD_SUBDIRECTORY(loop) -ADD_SUBDIRECTORY(meta) -ADD_SUBDIRECTORY(xpr) -ADD_SUBDIRECTORY(util) \ No newline at end of file diff --git a/tvmet-1.7.1/include/tvmet/CommaInitializer.h b/tvmet-1.7.1/include/tvmet/CommaInitializer.h deleted file mode 100644 index 6ec605c3b..000000000 --- a/tvmet-1.7.1/include/tvmet/CommaInitializer.h +++ /dev/null @@ -1,130 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * Based on Tvmet source code, http://tvmet.sourceforge.net, - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: CommaInitializer.h,v 1.14 2005/03/02 12:14:22 opetzold Exp $ - */ - -#ifndef TVMET_COMMA_INITIALIZER_H -#define TVMET_COMMA_INITIALIZER_H - -#include - -namespace tvmet { - -/** - * \class CommaInitializer CommaInitializer.h "tvmet/CommaInitializer.h" - * \brief Initialize classes using a comma separated lists. - * - * The comma operator is called when it appears next to an object of - * the type the comma is defined for. However, "operator," is not called - * for function argument lists, only for objects that are out in the open, - * separated by commas (Thinking C++ - * - * Ch.12: Operator comma). - * - * This implementation uses the same technique as described in Todd Veldhuizen - * Techniques for Scientific C++ - * - * chapter 1.11 Comma overloading. - * - * The initializer list is avaible after instanciation of the object, - * therefore use it like: - * \code - * vector3d t; - * t = 1.0, 2.0, 3.0; - * \endcode - * It's evaluated to (((t = 1.0), 2.0), 3.0) - * - * For matrizes the initilization is done row wise. - * - * If the comma separted list of values longer then the size of the vector - * or matrix a compile time error will occour. Otherwise the pending values - * will be written random into the memory. - * - */ -template -class CommaInitializer -{ - typedef typename Obj::value_type value_type; - - /** - * \class Initializer - * \brief Helper fo recursive overloaded comma operator. - */ - template class Initializer - { - Initializer(); - Initializer& operator=(const Initializer&); - - public: - Initializer(Obj& obj, int index) : m_obj(obj), m_index(index) {} - - /** Overloads the comma operator for recursive assign values from comma - separated list. */ - Initializer operator,(value_type rhs) - { - TVMET_CT_CONDITION(N < LEN, CommaInitializerList_is_too_long) - m_obj.commaWrite(m_index, rhs); - return Initializer(m_obj, m_index+1); - } - - private: - Obj& m_obj; - int m_index; - }; - -public: - CommaInitializer(const CommaInitializer& rhs) - : m_object(rhs.m_object), - m_data(rhs.m_data) - {} - - /** Constructor used by Vector or Matrix operator(value_type rhs) */ - CommaInitializer(Obj& obj, value_type x) - : m_object(obj), - m_data(x) - {} - - /** Destructor, does nothing. */ - ~CommaInitializer() {} - - /** Overloaded comma operator, called only once for the first occoured comma. This - means the first value is assigned by %operator=() and the 2nd value after the - comma. Therefore we call the %Initializer::operator,() for the list starting - after the 2nd. */ - Initializer<2> operator,(value_type rhs) - { - m_object.commaWrite(0, m_data); - m_object.commaWrite(1, rhs); - return Initializer<2>(m_object, 2); - } - -private: - Obj& m_object; - value_type m_data; -}; - -} // namespace tvmet - -#endif // TVMET_COMMA_INITIALIZER_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/CompileTimeError.h b/tvmet-1.7.1/include/tvmet/CompileTimeError.h deleted file mode 100644 index 9be1bb12a..000000000 --- a/tvmet-1.7.1/include/tvmet/CompileTimeError.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: CompileTimeError.h,v 1.7 2003/11/30 08:26:25 opetzold Exp $ - */ - -#ifndef TVMET_COMPILE_TIME_ERROR_H -#define TVMET_COMPILE_TIME_ERROR_H - -namespace tvmet { - -/** - * \class CompileTimeError CompileTimeError.h "tvmet/CompileTimeError.h" - * \brief Compile Time Assertation classes. - */ -template struct CompileTimeError; - -/** - * \class CompileTimeError CompileTimeError.h "tvmet/CompileTimeError.h" - * \brief Specialized Compile Time Assertation for successfully condition. - * This results in a compiler pass. - */ -template<> struct CompileTimeError { }; - - -/** - * \def TVMET_CT_CONDITION(XPR, MSG) - * \brief Simplify the Compile Time Assertation by using an expression - * Xpr and an error message MSG. - */ -#define TVMET_CT_CONDITION(XPR, MSG) { \ - CompileTimeError<(XPR)> tvmet_ERROR_##MSG; \ - (void)tvmet_ERROR_##MSG; \ -} - -} // namespace tvmet - -#endif // TVMET_COMPILE_TIME_ERROR_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/Extremum.h b/tvmet-1.7.1/include/tvmet/Extremum.h deleted file mode 100644 index f0b5f05ea..000000000 --- a/tvmet-1.7.1/include/tvmet/Extremum.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Extremum.h,v 1.6 2003/11/30 08:26:25 opetzold Exp $ - */ - -#ifndef TVMET_EXTREMUM_H -#define TVMET_EXTREMUM_H - -namespace tvmet { - - -/** - * \class matrix_tag Extremum.h "tvmet/Extremum.h" - * \brief For use with Extremum to simplify max handling. - * This allows the min/max functions to return an Extremum object. - */ -struct matrix_tag { }; - - -/** - * \class vector_tag Extremum.h "tvmet/Extremum.h" - * \brief For use with Extremum to simplify max handling. - * This allows the min/max functions to return an Extremum object. - */ -struct vector_tag { }; - - -/** - * \class Extremum Extremum.h "tvmet/Extremum.h" - * \brief Generell class for storing extremums determined by min/max. - */ -template -class Extremum { }; - - -/** - * \class Extremum Extremum.h "tvmet/Extremum.h" - * \brief Partial specialzed for vectors to store extremums by value and index. - */ -template -class Extremum -{ -public: - typedef T1 value_type; - typedef T2 index_type; - -public: - Extremum(value_type value, index_type index) - : m_value(value), m_index(index) { } - value_type value() const { return m_value; } - index_type index() const { return m_index; } - -private: - value_type m_value; - index_type m_index; -}; - - -/** - * \class Extremum Extremum.h "tvmet/Extremum.h" - * \brief Partial specialzed for matrix to store extremums by value, row and column. - */ -template -class Extremum -{ -public: - typedef T1 value_type; - typedef T2 index_type; - -public: - Extremum(value_type value, index_type row, index_type col) - : m_value(value), m_row(row), m_col(col) { } - value_type value() const { return m_value; } - index_type row() const { return m_row; } - index_type col() const { return m_col; } - -private: - value_type m_value; - index_type m_row, m_col; -}; - - -} // namespace tvmet - -#endif // TVMET_EXTREMUM_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/Functional.h b/tvmet-1.7.1/include/tvmet/Functional.h deleted file mode 100644 index 3aa7579d2..000000000 --- a/tvmet-1.7.1/include/tvmet/Functional.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Functional.h,v 1.7 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_FUNCTIONAL_H -#define TVMET_FUNCTIONAL_H - -#include - -namespace tvmet { - - -/** - * \class Functional Functional.h "tvmet/Functional.h" - * \brief Base class for all binary und unary functionals. - * - * All functional operators and functions have a static apply - * member function for evaluating the expressions inside. - */ -struct Functional { }; - - -/** - * \class BinaryFunctional Functional.h "tvmet/Functional.h" - * \brief Base class for all binary functions. - * \note Used for collecting classes for doxygen. - */ -struct BinaryFunctional : public Functional { }; - - -/** - * \class UnaryFunctional Functional.h "tvmet/Functional.h" - * \brief Base class for all unary functions. - * \note Used for collecting classes for doxygen. - */ -struct UnaryFunctional : public Functional { }; - - -/* - * some macro magic need below - */ - -/** - * \def TVMET_STD_SCOPE(x) - * \brief Simple macro to allow using macros for namespace std functions. - */ -#define TVMET_STD_SCOPE(x) std::x - - -/** - * \def TVMET_GLOBAL_SCOPE(x) - * \brief Simple macro to allow using macros for global namespace functions. - */ -#define TVMET_GLOBAL_SCOPE(x) ::x - - -} // namespace tvmet - - -#include -#include - - -#endif // TVMET_FUNCTIONAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/Matrix.h b/tvmet-1.7.1/include/tvmet/Matrix.h deleted file mode 100644 index 070bc0c14..000000000 --- a/tvmet-1.7.1/include/tvmet/Matrix.h +++ /dev/null @@ -1,306 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * Based on Tvmet source code, http://tvmet.sourceforge.net, - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Matrix.h,v 1.54 2005/03/02 12:12:51 opetzold Exp $ - */ - -#ifndef TVMET_MATRIX_H -#define TVMET_MATRIX_H - -#include // reverse_iterator -#include - -#include -#include -#include - -#include -#include -#include -#include - -namespace tvmet { - -/* forwards */ -template class Matrix; - -/** - * \class MatrixConstRef Matrix.h "tvmet/Matrix.h" - * \brief value iterator for ET - */ -template -class MatrixConstRef - : public TvmetBase < MatrixConstRef > -{ - -public: - /** Complexity counter. */ - enum { - ops = Rows * Cols - }; - typedef T value_type; - -private: - MatrixConstRef(); - MatrixConstRef& operator=(const MatrixConstRef&); - -public: - /** Constructor. */ - explicit MatrixConstRef(const Matrix& rhs) - : m_array(rhs.array()) - { } - - /** Constructor by a given memory pointer. */ - explicit MatrixConstRef(const T* data) - : m_array(data) - { } - - /** access by index. */ - T operator()(int i, int j) const { - assert(i >= 0 && j >= 0 && i < Rows && j < Cols); - return m_array[i + j * Rows]; - } - - /** debugging Xpr parse tree */ - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l) - << "MatrixConstRef[O=" << ops << "]<" - << "T=" << typeid(T).name() << ">," - << std::endl; - } - -private: - const T* _tvmet_restrict m_array; -}; - - -/** - * \class Matrix Matrix.h "tvmet/Matrix.h" - * \brief A tiny matrix class. - * - * The array syntax A[j][j] isn't supported here. The reason is that - * operator[] always takes exactly one parameter, but operator() can - * take any number of parameters (in the case of a rectangular matrix, - * two paramters are needed). Therefore the cleanest way to do it is - * with operator() rather than with operator[]. \see C++ FAQ Lite 13.8 - */ -template -class Matrix -{ -public: - - typedef T value_type; - - /** Complexity counter. */ - enum { - ops_assign = Rows * Cols, - ops = ops_assign, - use_meta = ops < TVMET_COMPLEXITY_M_ASSIGN_TRIGGER ? true : false - }; - - /** The number of rows of the matrix. */ - static int rows() { return Rows; } - - /** The number of columns of the matrix. */ - static int cols() { return Cols; } - -public: - /** Default Destructor. Does nothing. */ - ~Matrix() {} - - /** Default Constructor. Does nothing. The matrix entries are not initialized. */ - explicit Matrix() {} - - /** Copy Constructor, not explicit! */ - Matrix(const Matrix& rhs) - { - *this = XprMatrix(rhs.constRef()); - } - - explicit Matrix(const value_type* array) - { - for(int i = 0; i < Rows * Cols; i++) m_array[i] = array[i]; - } - - /** Construct a matrix by expression. */ - template - explicit Matrix(const XprMatrix& e) - { - *this = e; - } - - /** assign a T on array, this can be used for a single value - or a comma separeted list of values. */ - CommaInitializer operator=(T rhs) { - return CommaInitializer(*this, rhs); - } - -public: // access operators - T* _tvmet_restrict array() { return m_array; } - const T* _tvmet_restrict array() const { return m_array; } - -public: // index access operators - T& _tvmet_restrict operator()(int i, int j) { - // Note: g++-2.95.3 does have problems on typedef reference - assert(i >= 0 && j >= 0 && i < Rows && j < Cols); - return m_array[i + j * Rows]; - } - - const T& operator()(int i, int j) const { - assert(i >= 0 && j >= 0 && i < Rows && j < Cols); - return m_array[i + j * Rows]; - } - -public: // ET interface - typedef MatrixConstRef ConstRef; - - /** Return a const Reference of the internal data */ - ConstRef constRef() const { return ConstRef(*this); } - - /** Return the matrix as const expression. */ - XprMatrix expr() const { - return XprMatrix(this->constRef()); - } - -private: - /** Wrapper for meta assign. */ - template - static inline - void do_assign(dispatch, Dest& dest, const Src& src, const Assign& assign_fn) { - meta::Matrix::assign(dest, src, assign_fn); - } - - /** Wrapper for loop assign. */ - template - static inline - void do_assign(dispatch, Dest& dest, const Src& src, const Assign& assign_fn) { - loop::Matrix::assign(dest, src, assign_fn); - } - - /** assign *this to a matrix of a different type T2 using - the functional assign_fn. */ - template - void assign_to(Matrix& dest, const Assign& assign_fn) const { - do_assign(dispatch(), dest, *this, assign_fn); - } - -public: // assign operations - /** assign a given matrix of a different type T2 element wise - to this matrix. The operator=(const Matrix&) is compiler - generated. */ - template - Matrix& operator=(const Matrix& rhs) { - rhs.assign_to(*this, Fcnl_assign()); - return *this; - } - - /** assign a given XprMatrix element wise to this matrix. */ - template - Matrix& operator=(const XprMatrix& rhs) { - rhs.assign_to(*this, Fcnl_assign()); - return *this; - } - -private: - template friend class CommaInitializer; - - void commaWrite(int index, T rhs) - { - m_array[(index / Cols) + (index % Cols) * Rows] = rhs; - } - -public: // math operators with scalars - Matrix& operator+=(T) _tvmet_always_inline; - Matrix& operator-=(T) _tvmet_always_inline; - Matrix& operator*=(T) _tvmet_always_inline; - Matrix& operator/=(T) _tvmet_always_inline; - - template Matrix& M_add_eq(const Matrix&) _tvmet_always_inline; - template Matrix& M_sub_eq(const Matrix&) _tvmet_always_inline; - template Matrix& M_mul_eq(const Matrix&) _tvmet_always_inline; - template Matrix& M_div_eq(const Matrix&) _tvmet_always_inline; - -public: // math operators with expressions - template Matrix& M_add_eq(const XprMatrix&) _tvmet_always_inline; - template Matrix& M_sub_eq(const XprMatrix&) _tvmet_always_inline; - template Matrix& M_mul_eq(const XprMatrix&) _tvmet_always_inline; - template Matrix& M_div_eq(const XprMatrix&) _tvmet_always_inline; - -public: // aliased math operators with expressions - template Matrix& alias_assign(const Matrix&) _tvmet_always_inline; - template Matrix& alias_add_eq(const Matrix&) _tvmet_always_inline; - template Matrix& alias_sub_eq(const Matrix&) _tvmet_always_inline; - template Matrix& alias_mul_eq(const Matrix&) _tvmet_always_inline; - template Matrix& alias_div_eq(const Matrix&) _tvmet_always_inline; - - template Matrix& alias_assign(const XprMatrix&) _tvmet_always_inline; - template Matrix& alias_add_eq(const XprMatrix&) _tvmet_always_inline; - template Matrix& alias_sub_eq(const XprMatrix&) _tvmet_always_inline; - template Matrix& alias_mul_eq(const XprMatrix&) _tvmet_always_inline; - template Matrix& alias_div_eq(const XprMatrix&) _tvmet_always_inline; - -public: // io - /** Structure for info printing as Matrix. */ - struct Info : public TvmetBase { - std::ostream& print_xpr(std::ostream& os) const { - os << "Matrix"; - return os; - } - }; - - /** Get an info object of this matrix. */ - static Info info() { return Info(); } - - /** Member function for expression level printing. */ - std::ostream& print_xpr(std::ostream& os, int l=0) const; - - /** Member function for printing internal data. */ - std::ostream& print_on(std::ostream& os) const; - -private: - /** The data of matrix self. */ - T m_array[Rows * Cols]; -}; - -typedef Matrix Matrix2i; -typedef Matrix Matrix3i; -typedef Matrix Matrix4i; -typedef Matrix Matrix2f; -typedef Matrix Matrix3f; -typedef Matrix Matrix4f; -typedef Matrix Matrix2d; -typedef Matrix Matrix3d; -typedef Matrix Matrix4d; - -} // namespace tvmet - -#include -#include -#include -#include -#include -#include - -#endif // TVMET_MATRIX_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/MatrixEval.h b/tvmet-1.7.1/include/tvmet/MatrixEval.h deleted file mode 100644 index fa382a8ba..000000000 --- a/tvmet-1.7.1/include/tvmet/MatrixEval.h +++ /dev/null @@ -1,322 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixEval.h,v 1.14 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_MATRIX_EVAL_H -#define TVMET_MATRIX_EVAL_H - -namespace tvmet { - -/** - * \fn eval(const XprMatrix& e1, const Matrix& m2, const Matrix& m3) - * \brief Evals the matrix expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprMatrix< - XprEval< - XprMatrix, - MatrixConstRef, - MatrixConstRef - >, - Rows, Cols -> -eval(const XprMatrix& e1, - const Matrix& m2, - const Matrix& m3) { - typedef XprEval< - XprMatrix, - MatrixConstRef, - MatrixConstRef - > expr_type; - return XprMatrix( - expr_type(e1, m2.constRef(), m3.constRef())); -} - - -/** - * \fn eval(const XprMatrix& e1, const Matrix& m2, const XprMatrix& e3) - * \brief Evals the matrix expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprMatrix< - XprEval< - XprMatrix, - MatrixConstRef, - XprMatrix - >, - Rows, Cols -> -eval(const XprMatrix& e1, - const Matrix& m2, - const XprMatrix& e3) { - typedef XprEval< - XprMatrix, - MatrixConstRef, - XprMatrix - > expr_type; - return XprMatrix( - expr_type(e1, m2.constRef(), e3)); -} - - -/** - * \fn eval(const XprMatrix& e1, const XprMatrix& e2, const Matrix& m3) - * \brief Evals the matrix expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprMatrix< - XprEval< - XprMatrix, - XprMatrix, - MatrixConstRef - >, - Rows, Cols -> -eval(const XprMatrix& e1, - const XprMatrix& e2, - const Matrix& m3) { - typedef XprEval< - XprMatrix, - XprMatrix, - MatrixConstRef - > expr_type; - return XprMatrix( - expr_type(e1, e2, m3.constRef())); -} - - -/** - * \fn eval(const XprMatrix& e1, const XprMatrix& e2, const XprMatrix& e3) - * \brief Evals the matrix expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprMatrix< - XprEval< - XprMatrix, - XprMatrix, - XprMatrix - >, - Rows, Cols -> -eval(const XprMatrix& e1, - const XprMatrix& e2, - const XprMatrix& e3) { - typedef XprEval< - XprMatrix, - XprMatrix, - XprMatrix - > expr_type; - return XprMatrix(expr_type(e1, e2, e3)); -} - - -/* - * trinary evaluation functions with matrizes, xpr of and POD - * - * XprMatrix ? POD1 : POD2 - * XprMatrix ? POD : XprMatrix - * XprMatrix ? XprMatrix : POD - */ -#define TVMET_IMPLEMENT_MACRO(POD) \ -template \ -inline \ -XprMatrix< \ - XprEval< \ - XprMatrix, \ - XprLiteral< POD >, \ - XprLiteral< POD > \ - >, \ - Rows, Cols \ -> \ -eval(const XprMatrix& e, POD x2, POD x3) { \ - typedef XprEval< \ - XprMatrix, \ - XprLiteral< POD >, \ - XprLiteral< POD > \ - > expr_type; \ - return XprMatrix( \ - expr_type(e, XprLiteral< POD >(x2), XprLiteral< POD >(x3))); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprEval< \ - XprMatrix, \ - XprLiteral< POD >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -eval(const XprMatrix& e1, POD x2, const XprMatrix& e3) { \ - typedef XprEval< \ - XprMatrix, \ - XprLiteral< POD >, \ - XprMatrix \ - > expr_type; \ - return XprMatrix( \ - expr_type(e1, XprLiteral< POD >(x2), e3)); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprEval< \ - XprMatrix, \ - XprMatrix, \ - XprLiteral< POD > \ - >, \ - Rows, Cols \ -> \ -eval(const XprMatrix& e1, const XprMatrix& e2, POD x3) { \ - typedef XprEval< \ - XprMatrix, \ - XprMatrix, \ - XprLiteral< POD > \ - > expr_type; \ - return XprMatrix( \ - expr_type(e1, e2, XprLiteral< POD >(x3))); \ -} - -TVMET_IMPLEMENT_MACRO(int) -TVMET_IMPLEMENT_MACRO(float) -TVMET_IMPLEMENT_MACRO(double) - -#undef TVMET_IMPLEMENT_MACRO - - -/* - * trinary evaluation functions with matrizes, xpr of and complex<> types - * - * XprMatrix e, std::complex z2, std::complex z3 - * XprMatrix e1, std::complex z2, XprMatrix e3 - * XprMatrix e1, XprMatrix e2, std::complex z3 - */ -#if defined(EIGEN_USE_COMPLEX) - -/** - * \fn eval(const XprMatrix& e, const std::complex& x2, const std::complex& x3) - * \brief Evals the matrix expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprMatrix< - XprEval< - XprMatrix, - XprLiteral< std::complex >, - XprLiteral< std::complex > - >, - Rows, Cols -> -eval(const XprMatrix& e, const std::complex& x2, const std::complex& x3) { - typedef XprEval< - XprMatrix, - XprLiteral< std::complex >, - XprLiteral< std::complex > - > expr_type; - return XprMatrix( - expr_type(e, XprLiteral< std::complex >(x2), XprLiteral< std::complex >(x3))); -} - - -/** - * \fn eval(const XprMatrix& e1, const std::complex& x2, const XprMatrix& e3) - * \brief Evals the matrix expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprMatrix< - XprEval< - XprMatrix, - XprLiteral< std::complex >, - XprMatrix - >, - Rows, Cols -> -eval(const XprMatrix& e1, const std::complex& x2, const XprMatrix& e3) { - typedef XprEval< - XprMatrix, - XprLiteral< std::complex >, - XprMatrix - > expr_type; - return XprMatrix( - expr_type(e1, XprLiteral< std::complex >(x2), e3)); -} - - -/** - * \fn eval(const XprMatrix& e1, const XprMatrix& e2, const std::complex& x3) - * \brief Evals the matrix expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprMatrix< - XprEval< - XprMatrix, - XprMatrix, - XprLiteral< std::complex > - >, - Rows, Cols -> -eval(const XprMatrix& e1, const XprMatrix& e2, const std::complex& x3) { - typedef XprEval< - XprMatrix, - XprMatrix, - XprLiteral< std::complex > - > expr_type; - return XprMatrix( - expr_type(e1, e2, XprLiteral< std::complex >(x3))); -} -#endif // defined(EIGEN_USE_COMPLEX) - -} // namespace tvmet - -#endif // TVMET_MATRIX_EVAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/MatrixFunctions.h b/tvmet-1.7.1/include/tvmet/MatrixFunctions.h deleted file mode 100644 index 293c3d4ac..000000000 --- a/tvmet-1.7.1/include/tvmet/MatrixFunctions.h +++ /dev/null @@ -1,1169 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixFunctions.h,v 1.59 2004/11/04 16:21:17 opetzold Exp $ - */ - -#ifndef TVMET_MATRIX_FUNCTIONS_H -#define TVMET_MATRIX_FUNCTIONS_H - -#include - -namespace tvmet { - -/* forwards */ -template class Vector; -template class VectorConstRef; - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic functions add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * function(Matrix, Matrix) - * function(XprMatrix, Matrix) - * function(Matrix, XprMatrix) - */ -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -NAME (const Matrix& lhs, \ - const Matrix& rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -NAME (const XprMatrix& lhs, \ - const Matrix& rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -NAME (const Matrix& lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add) // per se element wise -TVMET_DECLARE_MACRO(sub) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(mul) // not defined for matrizes - TVMET_DECLARE_MACRO(div) // not defined for matrizes -} - -#undef TVMET_DECLARE_MACRO - - -/* - * function(Matrix, POD) - * function(POD, Matrix) - * Note: - operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, POD) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprLiteral \ - >, \ - Rows, Cols \ -> \ -NAME (const Matrix& lhs, \ - POD rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -NAME (POD lhs, \ - const Matrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, int) -TVMET_DECLARE_MACRO(sub, int) -TVMET_DECLARE_MACRO(mul, int) -TVMET_DECLARE_MACRO(div, int) - -TVMET_DECLARE_MACRO(add, float) -TVMET_DECLARE_MACRO(sub, float) -TVMET_DECLARE_MACRO(mul, float) -TVMET_DECLARE_MACRO(div, float) - -TVMET_DECLARE_MACRO(add, double) -TVMET_DECLARE_MACRO(sub, double) -TVMET_DECLARE_MACRO(mul, double) -TVMET_DECLARE_MACRO(div, double) - -#undef TVMET_DECLARE_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * function(Matrix, complex) - * function(complex, Matrix) - * Note: - operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols>, \ - XprLiteral > \ - >, \ - Rows, Cols \ -> \ -NAME (const Matrix< std::complex, Rows, Cols>& lhs, \ - const std::complex& rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols> \ - >, \ - Rows, Cols \ -> \ -NAME (const std::complex& lhs, \ - const Matrix< std::complex, Rows, Cols>& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add) -TVMET_DECLARE_MACRO(sub) -TVMET_DECLARE_MACRO(mul) -TVMET_DECLARE_MACRO(div) - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific prod( ... ) functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprMatrix< - XprMMProduct< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols2 // M2(Cols1, Cols2) - >, - Rows1, Cols2 // return Dim -> -prod(const Matrix& lhs, - const Matrix& rhs) _tvmet_always_inline; - - -template -XprMatrix< - XprMMProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols2 // M2(Cols1, Cols2) - >, - Rows1, Cols2 // return Dim -> -prod(const XprMatrix& lhs, - const Matrix& rhs) _tvmet_always_inline; - - -template -XprMatrix< - XprMMProduct< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 // M2(Cols1, Cols2) - >, - Rows1, Cols2 // return Dim -> -prod(const Matrix& lhs, - const XprMatrix& rhs) _tvmet_always_inline; - - -template -XprMatrix< - XprMMProductTransposed< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols2 // M2(Cols1, Cols2) - >, - Cols2, Rows1 // return Dim -> -trans_prod(const Matrix& lhs, - const Matrix& rhs) _tvmet_always_inline; - - -template // Rows2 = Rows1 -XprMatrix< - XprMtMProduct< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols2 // M2(Rows1, Cols2) - >, - Cols1, Cols2 // return Dim -> -MtM_prod(const Matrix& lhs, - const Matrix& rhs) _tvmet_always_inline; - - -template -XprMatrix< - XprMMtProduct< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols1 // M2(Rows2, Cols1) - >, - Rows1, Rows2 // return Dim -> -MMt_prod(const Matrix& lhs, - const Matrix& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix-vector specific prod( ... ) functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprVector< - XprMVProduct< - MatrixConstRef, Rows, Cols, // M(Rows, Cols) - VectorConstRef // V - >, - Rows -> -prod(const Matrix& lhs, - const Vector& rhs) _tvmet_always_inline; - - -template -XprVector< - XprMVProduct< - MatrixConstRef, Rows, Cols, - XprVector - >, - Rows -> -prod(const Matrix& lhs, - const XprVector& rhs) _tvmet_always_inline; - - -template -XprVector< - XprMVProduct< - XprMatrix, Rows, Cols, // M(Rows, Cols) - VectorConstRef // V - >, - Rows -> -prod(const XprMatrix& lhs, - const Vector& rhs) _tvmet_always_inline; - - -template -XprVector< - XprMtVProduct< - MatrixConstRef, Rows, Cols, // M(Rows, Cols) - VectorConstRef // V - >, - Cols -> -Mtx_prod(const Matrix& lhs, - const Vector& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprMatrix< - XprMatrixTranspose< - MatrixConstRef - >, - Cols, Rows -> -trans(const Matrix& rhs) _tvmet_always_inline; - - -template -typename Traits::sum_type -trace(const Matrix& m) _tvmet_always_inline; - - -template -XprVector< - XprMatrixRow< - MatrixConstRef, - Rows, Cols - >, - Cols -> -row(const Matrix& m, - int no) _tvmet_always_inline; - - -template -XprVector< - XprMatrixCol< - MatrixConstRef, - Rows, Cols - >, - Rows -> -col(const Matrix& m, - int no) _tvmet_always_inline; - - -template -XprVector< - XprMatrixDiag< - MatrixConstRef, - Sz - >, - Sz -> -diag(const Matrix& m) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * min/max unary functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -Extremum -maximum(const XprMatrix& e); // NOT _tvmet_always_inline; - - -template -Extremum -maximum(const Matrix& m) _tvmet_always_inline; - - -template -Extremum -minimum(const XprMatrix& e); // NOT _tvmet_always_inline; - - -template -Extremum -minimum(const Matrix& m) _tvmet_always_inline; - - -template -typename E::value_type -max(const XprMatrix& e); // NOT _tvmet_always_inline; - - -template -T max(const Matrix& m) _tvmet_always_inline; - - -template -typename E::value_type -min(const XprMatrix& e); // NOT _tvmet_always_inline; - - -template -T min(const Matrix& m) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * other unary functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprMatrix< - XprIdentity, - Rows, Cols -> -identity() _tvmet_always_inline; - - -template -XprMatrix< - XprIdentity< - typename M::value_type, - M::Rows, M::Cols>, - M::Rows, M::Cols -> -identity() _tvmet_always_inline; - - -template -XprMatrix< - MatrixConstRef, - Rows, Cols -> -cmatrix_ref(const T* mem) _tvmet_always_inline; - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic functions add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * function(Matrix, Matrix) - * function(XprMatrix, Matrix) - * function(Matrix, XprMatrix) - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -NAME (const Matrix& lhs, const Matrix& rhs) { \ - typedef XprBinOp < \ - Fcnl_##NAME, \ - MatrixConstRef, \ - MatrixConstRef \ - > expr_type; \ - return XprMatrix( \ - expr_type(lhs.constRef(), rhs.constRef())); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -NAME (const XprMatrix& lhs, const Matrix& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - MatrixConstRef \ - > expr_type; \ - return XprMatrix( \ - expr_type(lhs, rhs.constRef())); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -NAME (const Matrix& lhs, const XprMatrix& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprMatrix \ - > expr_type; \ - return XprMatrix( \ - expr_type(lhs.constRef(), rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(add) // per se element wise -TVMET_IMPLEMENT_MACRO(sub) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(mul) // not defined for matrizes - TVMET_IMPLEMENT_MACRO(div) // not defined for matrizes -} - -#undef TVMET_IMPLEMENT_MACRO - - -/* - * function(Matrix, POD) - * function(POD, Matrix) - * Note: - operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, POD) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprLiteral \ - >, \ - Rows, Cols \ -> \ -NAME (const Matrix& lhs, POD rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprLiteral< POD > \ - > expr_type; \ - return XprMatrix( \ - expr_type(lhs.constRef(), XprLiteral< POD >(rhs))); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -NAME (POD lhs, const Matrix& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - MatrixConstRef \ - > expr_type; \ - return XprMatrix( \ - expr_type(XprLiteral< POD >(lhs), rhs.constRef())); \ -} - -TVMET_IMPLEMENT_MACRO(add, int) -TVMET_IMPLEMENT_MACRO(sub, int) -TVMET_IMPLEMENT_MACRO(mul, int) -TVMET_IMPLEMENT_MACRO(div, int) - -TVMET_IMPLEMENT_MACRO(add, float) -TVMET_IMPLEMENT_MACRO(sub, float) -TVMET_IMPLEMENT_MACRO(mul, float) -TVMET_IMPLEMENT_MACRO(div, float) - -TVMET_IMPLEMENT_MACRO(add, double) -TVMET_IMPLEMENT_MACRO(sub, double) -TVMET_IMPLEMENT_MACRO(mul, double) -TVMET_IMPLEMENT_MACRO(div, double) - -#undef TVMET_IMPLEMENT_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * function(Matrix, complex) - * function(complex, Matrix) - * Note: - operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols>, \ - XprLiteral > \ - >, \ - Rows, Cols \ -> \ -NAME (const Matrix< std::complex, Rows, Cols>& lhs, \ - const std::complex& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols>, \ - XprLiteral< std::complex > \ - > expr_type; \ - return XprMatrix( \ - expr_type(lhs.constRef(), XprLiteral< std::complex >(rhs))); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols> \ - >, \ - Rows, Cols \ -> \ -NAME (const std::complex& lhs, \ - const Matrix< std::complex, Rows, Cols>& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - MatrixConstRef \ - > expr_type; \ - return XprMatrix( \ - expr_type(XprLiteral< std::complex >(lhs), rhs.constRef())); \ -} - -TVMET_IMPLEMENT_MACRO(add) -TVMET_IMPLEMENT_MACRO(sub) -TVMET_IMPLEMENT_MACRO(mul) -TVMET_IMPLEMENT_MACRO(div) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific prod( ... ) functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn prod(const Matrix& lhs, const Matrix& rhs) - * \brief Function for the matrix-matrix-product. - * \ingroup _binary_function - * \note The rows2 has to be equal to cols1. - */ -template -inline -XprMatrix< - XprMMProduct< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols2 // M2(Cols1, Cols2) - >, - Rows1, Cols2 // return Dim -> -prod(const Matrix& lhs, const Matrix& rhs) { - typedef XprMMProduct< - MatrixConstRef, Rows1, Cols1, - MatrixConstRef, Cols2 - > expr_type; - return XprMatrix( - expr_type(lhs.constRef(), rhs.constRef())); -} - - -/** - * \fn prod(const XprMatrix& lhs, const Matrix& rhs) - * \brief Evaluate the product of XprMatrix and Matrix. - * \ingroup _binary_function - */ -template -inline -XprMatrix< - XprMMProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols2 // M2(Cols1, Cols2) - >, - Rows1, Cols2 // return Dim -> -prod(const XprMatrix& lhs, const Matrix& rhs) { - typedef XprMMProduct< - XprMatrix, Rows1, Cols1, - MatrixConstRef, Cols2 - > expr_type; - return XprMatrix( - expr_type(lhs, rhs.constRef())); -} - - -/** - * \fn prod(const Matrix& lhs, const XprMatrix& rhs) - * \brief Evaluate the product of Matrix and XprMatrix. - * \ingroup _binary_function - */ -template -inline -XprMatrix< - XprMMProduct< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 // M2(Cols1, Cols2) - >, - Rows1, Cols2 // return Dim -> -prod(const Matrix& lhs, const XprMatrix& rhs) { - typedef XprMMProduct< - MatrixConstRef, Rows1, Cols1, - XprMatrix, Cols2 - > expr_type; - return XprMatrix( - expr_type(lhs.constRef(), rhs)); -} - - -/** - * \fn trans_prod(const Matrix& lhs, const Matrix& rhs) - * \brief Function for the trans(matrix-matrix-product) - * \ingroup _binary_function - * Perform on given Matrix M1 and M2: - * \f[ - * (M_1\,M_2)^T - * \f] - */ -template -inline -XprMatrix< - XprMMProductTransposed< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols2 // M2(Cols1, Cols2) - >, - Cols2, Rows1 // return Dim -> -trans_prod(const Matrix& lhs, const Matrix& rhs) { - typedef XprMMProductTransposed< - MatrixConstRef, Rows1, Cols1, - MatrixConstRef, Cols2 - > expr_type; - return XprMatrix( - expr_type(lhs.constRef(), rhs.constRef())); -} - - -/** - * \fn MtM_prod(const Matrix& lhs, const Matrix& rhs) - * \brief Function for the trans(matrix)-matrix-product. - * \ingroup _binary_function - * using formula - * \f[ - * M_1^{T}\,M_2 - * \f] - * \note The number of cols of matrix 2 have to be equal to number of rows of - * matrix 1, since matrix 1 is trans - the result is a (Cols1 x Cols2) - * matrix. - */ -template // Rows2 = Rows1 -inline -XprMatrix< - XprMtMProduct< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols2 // M2(Rows1, Cols2) - >, - Cols1, Cols2 // return Dim -> -MtM_prod(const Matrix& lhs, const Matrix& rhs) { - typedef XprMtMProduct< - MatrixConstRef, Rows1, Cols1, - MatrixConstRef, Cols2 - > expr_type; - return XprMatrix( - expr_type(lhs.constRef(), rhs.constRef())); -} - - -/** - * \fn MMt_prod(const Matrix& lhs, const Matrix& rhs) - * \brief Function for the matrix-trans(matrix)-product. - * \ingroup _binary_function - * \note The Cols2 has to be equal to Cols1. - */ -template -inline -XprMatrix< - XprMMtProduct< - MatrixConstRef, Rows1, Cols1, // M1(Rows1, Cols1) - MatrixConstRef, Cols1 // M2(Rows2, Cols1) - >, - Rows1, Rows2 // return Dim -> -MMt_prod(const Matrix& lhs, const Matrix& rhs) { - typedef XprMMtProduct< - MatrixConstRef, Rows1, Cols1, - MatrixConstRef, Cols1 - > expr_type; - return XprMatrix( - expr_type(lhs.constRef(), rhs.constRef())); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix-vector specific prod( ... ) functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn prod(const Matrix& lhs, const Vector& rhs) - * \brief Function for the matrix-vector-product - * \ingroup _binary_function - */ -template -inline -XprVector< - XprMVProduct< - MatrixConstRef, Rows, Cols, // M(Rows, Cols) - VectorConstRef // V - >, - Rows -> -prod(const Matrix& lhs, const Vector& rhs) { - typedef XprMVProduct< - MatrixConstRef, Rows, Cols, - VectorConstRef - > expr_type; - return XprVector( - expr_type(lhs.constRef(), rhs.constRef())); -} - - -/** - * \fn prod(const Matrix& lhs, const XprVector& rhs) - * \brief Function for the matrix-vector-product - * \ingroup _binary_function - */ -template -inline -XprVector< - XprMVProduct< - MatrixConstRef, Rows, Cols, - XprVector - >, - Rows -> -prod(const Matrix& lhs, const XprVector& rhs) { - typedef XprMVProduct< - MatrixConstRef, Rows, Cols, - XprVector - > expr_type; - return XprVector( - expr_type(lhs.constRef(), rhs)); -} - - -/* - * \fn prod(const XprMatrix& lhs, const Vector& rhs) - * \brief Compute the product of an XprMatrix with a Vector. - * \ingroup _binary_function - */ -template -inline -XprVector< - XprMVProduct< - XprMatrix, Rows, Cols, // M(Rows, Cols) - VectorConstRef // V - >, - Rows -> -prod(const XprMatrix& lhs, const Vector& rhs) { - typedef XprMVProduct< - XprMatrix, Rows, Cols, - VectorConstRef - > expr_type; - return XprVector( - expr_type(lhs, rhs.constRef())); -} - - -/** - * \fn Mtx_prod(const Matrix& matrix, const Vector& vector) - * \brief Function for the trans(matrix)-vector-product - * \ingroup _binary_function - * Perform on given Matrix M and vector x: - * \f[ - * M^T\, x - * \f] - */ -template -inline -XprVector< - XprMtVProduct< - MatrixConstRef, Rows, Cols, // M(Rows, Cols) - VectorConstRef // V - >, - Cols -> -Mtx_prod(const Matrix& lhs, const Vector& rhs) { - typedef XprMtVProduct< - MatrixConstRef, Rows, Cols, - VectorConstRef - > expr_type; - return XprVector( - expr_type(lhs.constRef(), rhs.constRef())); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn trans(const Matrix& rhs) - * \brief Transpose the matrix - * \ingroup _unary_function - */ -template -inline -XprMatrix< - XprMatrixTranspose< - MatrixConstRef - >, - Cols, Rows -> -trans(const Matrix& rhs) { - typedef XprMatrixTranspose< - MatrixConstRef - > expr_type; - return XprMatrix( - expr_type(rhs.constRef())); -} - - -/* - * \fn trace(const Matrix& m) - * \brief Compute the trace of a square matrix. - * \ingroup _unary_function - * - * Simply compute the trace of the given matrix as: - * \f[ - * \sum_{k = 0}^{Sz-1} m(k, k) - * \f] - */ -template -inline -typename Traits::sum_type -trace(const Matrix& m) { - return meta::Matrix::trace(m); -} - - -/** - * \fn row(const Matrix& m, int no) - * \brief Returns a row vector of the given matrix. - * \ingroup _binary_function - */ -template -inline -XprVector< - XprMatrixRow< - MatrixConstRef, - Rows, Cols - >, - Cols -> -row(const Matrix& m, int no) { - typedef XprMatrixRow< - MatrixConstRef, - Rows, Cols - > expr_type; - return XprVector(expr_type(m.constRef(), no)); -} - - -/** - * \fn col(const Matrix& m, int no) - * \brief Returns a column vector of the given matrix. - * \ingroup _binary_function - */ -template -inline -XprVector< - XprMatrixCol< - MatrixConstRef, - Rows, Cols - >, - Rows -> -col(const Matrix& m, int no) { - typedef XprMatrixCol< - MatrixConstRef, - Rows, Cols - > expr_type; - return XprVector(expr_type(m.constRef(), no)); -} - - -/** - * \fn diag(const Matrix& m) - * \brief Returns the diagonal vector of the given square matrix. - * \ingroup _unary_function - */ -template -inline -XprVector< - XprMatrixDiag< - MatrixConstRef, - Sz - >, - Sz -> -diag(const Matrix& m) { - typedef XprMatrixDiag< - MatrixConstRef, - Sz - > expr_type; - return XprVector(expr_type(m.constRef())); -} - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * other unary functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - -/** - * \fn XprMatrix, M::Rows, M::Cols>identity() - * \brief Fill a matrix to an identity matrix. - * \ingroup _unary_function - * - * \note The matrix doesn't need to be square. Only the elements - * where the current number of rows are equal to columns - * will be set to 1, else to 0. - * - * \par Usage: - * \code - * typedef Matrix matrix_type; - * ... - * matrix_type E( identity() ); - * \endcode - * - * Note, we have to specify the type, number of rows and columns - * since ADL can't work here. - * - * - * - * \since release 1.6.0 - */ -template -inline -XprMatrix< - XprIdentity, - Rows, Cols -> -identity() { - typedef XprIdentity expr_type; - - return XprMatrix(expr_type()); -} - -/** - * \fn XprMatrix, M::Rows, M::Cols>identity() - * \brief Fill a matrix to an identity matrix (convenience wrapper - * for matrix typedefs). - * \ingroup _unary_function - * - * \note The matrix doesn't need to be square. Only the elements - * where the current number of rows are equal to columns - * will be set to 1, else to 0. - * - * \par Usage: - * \code - * typedef Matrix matrix_type; - * ... - * matrix_type E( identity() ); - * \endcode - * - * Note, we have to specify the matrix type, since ADL can't work here. - * - * \since release 1.6.0 - */ -template -inline -XprMatrix< - XprIdentity< - typename M::value_type, - M::Rows, M::Cols>, - M::Rows, M::Cols -> -identity() { - return identity(); -} - - -/** - * \fn cmatrix_ref(const T* mem) - * \brief Creates an expression wrapper for a C like matrices. - * \ingroup _unary_function - * - * This is like creating a matrix of external data, as described - * at \ref construct. With this function you wrap an expression - * around a C style matrix and you can operate directly with it - * as usual. - * - * \par Example: - * \code - * static float lhs[3][3] = { - * {-1, 0, 1}, { 1, 0, 1}, {-1, 0, -1} - * }; - * static float rhs[3][3] = { - * { 0, 1, 1}, { 0, 1, -1}, { 0, -1, 1} - * }; - * ... - * - * typedef Matrix matrix_type; - * - * matrix_type M( cmatrix_ref(&lhs[0][0]) - * * cmatrix_ref(&rhs[0][0]) ); - * \endcode - * - * \since release 1.6.0 - */ -template -inline -XprMatrix< - MatrixConstRef, - Rows, Cols -> -cmatrix_ref(const T* mem) { - typedef MatrixConstRef expr_type; - - return XprMatrix(expr_type(mem)); -}; - - -} // namespace tvmet - -#endif // TVMET_MATRIX_FUNCTIONS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/MatrixImpl.h b/tvmet-1.7.1/include/tvmet/MatrixImpl.h deleted file mode 100644 index 10b9a85f5..000000000 --- a/tvmet-1.7.1/include/tvmet/MatrixImpl.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixImpl.h,v 1.27 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_MATRIX_IMPL_H -#define TVMET_MATRIX_IMPL_H - -#include // setw - -#include - -namespace tvmet { - -/* - * member operators for i/o - */ -template -std::ostream& Matrix::print_xpr(std::ostream& os, int l) const -{ - os << IndentLevel(l++) << "Matrix[" << ops << "]<" - << typeid(T).name() << ", " << Rows << ", " << Cols << ">," - << IndentLevel(--l) - << std::endl; - - return os; -} - - -template -std::ostream& Matrix::print_on(std::ostream& os) const -{ - os << "[\n"; - for(int i = 0; i < Rows; ++i) { - os << " ["; - for(int j = 0; j < (Cols - 1); ++j) { - os << this->operator()(i, j) << ", "; - } - os << this->operator()(i, Cols - 1) - << (i != (Rows-1) ? "],\n" : "]\n"); - } - os << "]"; - return os; -} - -/* - * member operators with scalars, per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -Matrix& \ -Matrix::operator OP (value_type rhs) { \ - typedef XprLiteral expr_type; \ - this->M_##NAME(XprMatrix(expr_type(rhs))); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(add_eq, +=) -TVMET_IMPLEMENT_MACRO(sub_eq, -=) -TVMET_IMPLEMENT_MACRO(mul_eq, *=) -TVMET_IMPLEMENT_MACRO(div_eq, /=) -#undef TVMET_IMPLEMENT_MACRO - -/* - * member functions (operators) with matrizes, for use with +=,-= ... - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -template \ -inline \ -Matrix& \ -Matrix::M_##NAME (const Matrix& rhs) { \ - this->M_##NAME( XprMatrix::ConstRef, Rows, Cols>(rhs.constRef()) ); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(add_eq) -TVMET_IMPLEMENT_MACRO(sub_eq) -TVMET_IMPLEMENT_MACRO(mul_eq) -TVMET_IMPLEMENT_MACRO(div_eq) -#undef TVMET_IMPLEMENT_MACRO - - -/* - * member functions (operators) with expressions, for use with +=,-= ... - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -template \ -inline \ -Matrix& \ -Matrix::M_##NAME (const XprMatrix& rhs) { \ - rhs.assign_to(*this, Fcnl_##NAME()); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(add_eq) -TVMET_IMPLEMENT_MACRO(sub_eq) -TVMET_IMPLEMENT_MACRO(mul_eq) -TVMET_IMPLEMENT_MACRO(div_eq) -#undef TVMET_IMPLEMENT_MACRO - -/* - * aliased member functions (operators) with matrizes, - * for use with +=,-= ... - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -template \ -inline \ -Matrix& \ -Matrix::alias_##NAME (const Matrix& rhs) { \ - this->alias_##NAME( XprMatrix::ConstRef, Rows, Cols>(rhs.constRef()) ); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(assign) -TVMET_IMPLEMENT_MACRO(add_eq) -TVMET_IMPLEMENT_MACRO(sub_eq) -TVMET_IMPLEMENT_MACRO(mul_eq) -TVMET_IMPLEMENT_MACRO(div_eq) -#undef TVMET_IMPLEMENT_MACRO - - -/* - * aliased member functions (operators) with expressions, - * for use with +=,-= ... and aliased(), - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -template \ -inline \ -Matrix& \ -Matrix::alias_##NAME (const XprMatrix& rhs) { \ - typedef Matrix temp_type; \ - temp_type(rhs).assign_to(*this, Fcnl_##NAME()); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(assign) -TVMET_IMPLEMENT_MACRO(add_eq) -TVMET_IMPLEMENT_MACRO(sub_eq) -TVMET_IMPLEMENT_MACRO(mul_eq) -TVMET_IMPLEMENT_MACRO(div_eq) -#undef TVMET_IMPLEMENT_MACRO - - -} // namespace tvmet - -#endif // TVMET_MATRIX_IMPL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/MatrixOperators.h b/tvmet-1.7.1/include/tvmet/MatrixOperators.h deleted file mode 100644 index 958fc0d22..000000000 --- a/tvmet-1.7.1/include/tvmet/MatrixOperators.h +++ /dev/null @@ -1,718 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixOperators.h,v 1.33 2004/06/17 15:53:12 opetzold Exp $ - */ - -#ifndef TVMET_MATRIX_OPERATORS_H -#define TVMET_MATRIX_OPERATORS_H - -namespace tvmet { - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - - -template -std::ostream& operator<<(std::ostream& os, - const Matrix& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Member operators (arithmetic and bit ops) - *++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * update_operator(Matrix, Matrix) - * update_operator(Matrix, XprMatrix rhs) - * Note: per se element wise - * \todo: the operator*= can have element wise mul oder product, decide! - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -Matrix& \ -operator OP (Matrix& lhs, \ - const Matrix& rhs) _tvmet_always_inline; \ - \ -template \ -Matrix& \ -operator OP (Matrix& lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add_eq, +=) // per se element wise -TVMET_DECLARE_MACRO(sub_eq, -=) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(mul_eq, *=) // see note - TVMET_DECLARE_MACRO(div_eq, /=) // not defined for vectors -} - -#undef TVMET_DECLARE_MACRO - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Matrix arithmetic operators implemented by functions - * add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * operator(Matrix, Matrix) - * operator(XprMatrix, Matrix) - * operator(Matrix, XprMatrix) - * Note: per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix& lhs, \ - const Matrix& rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -operator OP (const XprMatrix& lhs, \ - const Matrix& rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix& lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +) // per se element wise -TVMET_DECLARE_MACRO(sub, -) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(mul, *) // see as prod() - TVMET_DECLARE_MACRO(div, /) // not defined for matrizes -} -#undef TVMET_DECLARE_MACRO - - -/* - * operator(Matrix, POD) - * operator(POD, Matrix) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP, POD) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprLiteral \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix& lhs, \ - POD rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -operator OP (POD lhs, \ - const Matrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +, int) -TVMET_DECLARE_MACRO(sub, -, int) -TVMET_DECLARE_MACRO(mul, *, int) -TVMET_DECLARE_MACRO(div, /, int) - -TVMET_DECLARE_MACRO(add, +, float) -TVMET_DECLARE_MACRO(sub, -, float) -TVMET_DECLARE_MACRO(mul, *, float) -TVMET_DECLARE_MACRO(div, /, float) - -TVMET_DECLARE_MACRO(add, +, double) -TVMET_DECLARE_MACRO(sub, -, double) -TVMET_DECLARE_MACRO(mul, *, double) -TVMET_DECLARE_MACRO(div, /, double) - -#undef TVMET_DECLARE_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * operator(Matrix, complex) - * operator(complex, Matrix) - * Note: operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols>, \ - XprLiteral > \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix< std::complex, Rows, Cols>& lhs, \ - const std::complex& rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols> \ - >, \ - Rows, Cols \ -> \ -operator OP (const std::complex& lhs, \ - const Matrix< std::complex, Rows, Cols>& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +) -TVMET_DECLARE_MACRO(sub, -) -TVMET_DECLARE_MACRO(mul, *) -TVMET_DECLARE_MACRO(div, /) - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific operator*() = prod() operations - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprMatrix< - XprMMProduct< - MatrixConstRef, Rows1, Cols1, - MatrixConstRef, Cols2 - >, - Rows1, Cols2 -> -operator*(const Matrix& lhs, - const Matrix& rhs) _tvmet_always_inline; - - -template -XprMatrix< - XprMMProduct< - XprMatrix, Rows1, Cols1, - MatrixConstRef, Cols2 - >, - Rows1, Cols2 -> -operator*(const XprMatrix& lhs, - const Matrix& rhs) _tvmet_always_inline; - - -template -XprMatrix< - XprMMProduct< - MatrixConstRef, Rows1, Cols1, - XprMatrix, Cols2 - >, - Rows1, Cols2 -> -operator*(const Matrix& lhs, - const XprMatrix& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix-vector specific prod( ... ) operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprVector< - XprMVProduct< - MatrixConstRef, Rows, Cols, - VectorConstRef - >, - Rows -> -operator*(const Matrix& lhs, - const Vector& rhs) _tvmet_always_inline; - - -template -XprVector< - XprMVProduct< - MatrixConstRef, Rows, Cols, - XprVector - >, - Rows -> -operator*(const Matrix& lhs, - const XprVector& rhs) _tvmet_always_inline; - - -template -XprVector< - XprMVProduct< - XprMatrix, Rows, Cols, - VectorConstRef - >, - Rows -> -operator*(const XprMatrix& lhs, - const Vector& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * global unary operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * unary_operator(Matrix) - * Note: per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprMatrix< \ - XprUnOp< \ - Fcnl_##NAME, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(neg, -) -#undef TVMET_DECLARE_MACRO - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - -/** - * \fn operator<<(std::ostream& os, const Matrix& rhs) - * \brief Overload operator for i/o - * \ingroup _binary_operator - */ -template -inline -std::ostream& operator<<(std::ostream& os, const Matrix& rhs) { - return rhs.print_on(os); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Member operators (arithmetic and bit ops) - *++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * update_operator(Matrix, Matrix) - * update_operator(Matrix, XprMatrix rhs) - * Note: per se element wise - * \todo: the operator*= can have element wise mul oder product, decide! - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -Matrix& \ -operator OP (Matrix& lhs, const Matrix& rhs) { \ - return lhs.M_##NAME(rhs); \ -} \ - \ -template \ -inline \ -Matrix& \ -operator OP (Matrix& lhs, const XprMatrix& rhs) { \ - return lhs.M_##NAME(rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add_eq, +=) // per se element wise -TVMET_IMPLEMENT_MACRO(sub_eq, -=) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(mul_eq, *=) // see note - TVMET_IMPLEMENT_MACRO(div_eq, /=) // not defined for vectors -} - -#undef TVMET_IMPLEMENT_MACRO - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Matrix arithmetic operators implemented by functions - * add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * operator(Matrix, Matrix) - * operator(XprMatrix, Matrix) - * operator(Matrix, XprMatrix) - * Note: per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix& lhs, const Matrix& rhs) { \ - return NAME(lhs, rhs); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -operator OP (const XprMatrix& lhs, const Matrix& rhs) { \ - return NAME(lhs, rhs); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix& lhs, const XprMatrix& rhs) { \ - return NAME(lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +) // per se element wise -TVMET_IMPLEMENT_MACRO(sub, -) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(mul, *) // see as prod() - TVMET_IMPLEMENT_MACRO(div, /) // not defined for matrizes -} -#undef TVMET_IMPLEMENT_MACRO - - -/* - * operator(Matrix, POD) - * operator(POD, Matrix) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP, POD) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - MatrixConstRef, \ - XprLiteral \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix& lhs, POD rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -operator OP (POD lhs, const Matrix& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +, int) -TVMET_IMPLEMENT_MACRO(sub, -, int) -TVMET_IMPLEMENT_MACRO(mul, *, int) -TVMET_IMPLEMENT_MACRO(div, /, int) - -TVMET_IMPLEMENT_MACRO(add, +, float) -TVMET_IMPLEMENT_MACRO(sub, -, float) -TVMET_IMPLEMENT_MACRO(mul, *, float) -TVMET_IMPLEMENT_MACRO(div, /, float) - -TVMET_IMPLEMENT_MACRO(add, +, double) -TVMET_IMPLEMENT_MACRO(sub, -, double) -TVMET_IMPLEMENT_MACRO(mul, *, double) -TVMET_IMPLEMENT_MACRO(div, /, double) - -#undef TVMET_IMPLEMENT_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * operator(Matrix, complex) - * operator(complex, Matrix) - * Note: operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols>, \ - XprLiteral > \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix< std::complex, Rows, Cols>& lhs, \ - const std::complex& rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - MatrixConstRef< std::complex, Rows, Cols> \ - >, \ - Rows, Cols \ -> \ -operator OP (const std::complex& lhs, \ - const Matrix< std::complex, Rows, Cols>& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +) -TVMET_IMPLEMENT_MACRO(sub, -) -TVMET_IMPLEMENT_MACRO(mul, *) -TVMET_IMPLEMENT_MACRO(div, /) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific operator*() = prod() operations - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn operator*(const Matrix& lhs, const Matrix& rhs) - * \brief multiply two Matrices. - * \ingroup _binary_operator - * \note The rows2 has to be equal to cols1. - * \sa prod(const Matrix& lhs, const Matrix& rhs) - */ -template -inline -XprMatrix< - XprMMProduct< - MatrixConstRef, Rows1, Cols1, - MatrixConstRef, Cols2 - >, - Rows1, Cols2 -> -operator*(const Matrix& lhs, const Matrix& rhs) { - return prod(lhs, rhs); -} - - -/** - * \fn operator*(const XprMatrix& lhs, const Matrix& rhs) - * \brief Evaluate the product of XprMatrix and Matrix. - * \ingroup _binary_operator - * \sa prod(const XprMatrix& lhs, const Matrix& rhs) - */ -template -inline -XprMatrix< - XprMMProduct< - XprMatrix, Rows1, Cols1, - MatrixConstRef, Cols2 - >, - Rows1, Cols2 -> -operator*(const XprMatrix& lhs, const Matrix& rhs) { - return prod(lhs, rhs); -} - - -/** - * \fn operator*(const Matrix& lhs, const XprMatrix& rhs) - * \brief Evaluate the product of Matrix and XprMatrix. - * \ingroup _binary_operator - * \sa prod(const Matrix& lhs, const XprMatrix& rhs) - */ -template -inline -XprMatrix< - XprMMProduct< - MatrixConstRef, Rows1, Cols1, - XprMatrix, Cols2 - >, - Rows1, Cols2 -> -operator*(const Matrix& lhs, const XprMatrix& rhs) { - return prod(lhs, rhs); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix-vector specific prod( ... ) operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn operator*(const Matrix& lhs, const Vector& rhs) - * \brief multiply a Matrix with a Vector. - * \ingroup _binary_operator - * \note The length of the Vector has to be equal to the number of Columns. - * \sa prod(const Matrix& m, const Vector& v) - */ -template -inline -XprVector< - XprMVProduct< - MatrixConstRef, Rows, Cols, - VectorConstRef - >, - Rows -> -operator*(const Matrix& lhs, const Vector& rhs) { - return prod(lhs, rhs); -} - - -/** - * \fn operator*(const Matrix& lhs, const XprVector& rhs) - * \brief Function for the matrix-vector-product - * \ingroup _binary_operator - * \sa prod(const Matrix& lhs, const XprVector& rhs) - */ -template -inline -XprVector< - XprMVProduct< - MatrixConstRef, Rows, Cols, - XprVector - >, - Rows -> -operator*(const Matrix& lhs, const XprVector& rhs) { - return prod(lhs, rhs); -} - - -/** - * \fn operator*(const XprMatrix& lhs, const Vector& rhs) - * \brief Compute the product of an XprMatrix with a Vector. - * \ingroup _binary_operator - * \sa prod(const XprMatrix& lhs, const Vector& rhs) - */ -template -inline -XprVector< - XprMVProduct< - XprMatrix, Rows, Cols, - VectorConstRef - >, - Rows -> -operator*(const XprMatrix& lhs, const Vector& rhs) { - return prod(lhs, rhs); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * global unary operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * unary_operator(Matrix) - * Note: per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprMatrix< \ - XprUnOp< \ - Fcnl_##NAME, \ - MatrixConstRef \ - >, \ - Rows, Cols \ -> \ -operator OP (const Matrix& rhs) { \ - typedef XprUnOp< \ - Fcnl_##NAME, \ - MatrixConstRef \ - > expr_type; \ - return XprMatrix(expr_type(rhs.constRef())); \ -} - -TVMET_IMPLEMENT_MACRO(neg, -) -#undef TVMET_IMPLEMENT_MACRO - - -} // namespace tvmet - -#endif // TVMET_MATRIX_OPERATORS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/MatrixUnaryFunctions.h b/tvmet-1.7.1/include/tvmet/MatrixUnaryFunctions.h deleted file mode 100644 index 7cb09d1d0..000000000 --- a/tvmet-1.7.1/include/tvmet/MatrixUnaryFunctions.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixUnaryFunctions.h,v 1.9 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_MATRIX_UNARY_FUNCTIONS_H -#define TVMET_MATRIX_UNARY_FUNCTIONS_H - -namespace tvmet { - -/* - * unary_function(Matrix, Rows, Cols>) - */ -#if defined(EIGEN_USE_COMPLEX) -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -inline \ -XprMatrix< \ - XprUnOp< \ - Fcnl_##NAME< std::complex >, \ - MatrixConstRef, Rows, Cols> \ - >, \ - Rows, Cols \ -> \ -NAME(const Matrix, Rows, Cols>& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(real) -TVMET_DECLARE_MACRO(imag) -TVMET_DECLARE_MACRO(conj) - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - -/* - * unary_function(Matrix, Rows, Cols>) - */ -#if defined(EIGEN_USE_COMPLEX) -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprMatrix< \ - XprUnOp< \ - Fcnl_##NAME< std::complex >, \ - MatrixConstRef, Rows, Cols> \ - >, \ - Rows, Cols \ -> \ -NAME(const Matrix, Rows, Cols>& rhs) { \ - typedef XprUnOp< \ - Fcnl_##NAME< std::complex >, \ - MatrixConstRef, Rows, Cols> \ - > expr_type; \ - return XprMatrix(expr_type(rhs.constRef())); \ -} - -TVMET_IMPLEMENT_MACRO(real) -TVMET_IMPLEMENT_MACRO(imag) -TVMET_IMPLEMENT_MACRO(conj) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -} // namespace tvmet - -#endif // TVMET_MATRIX_UNARY_FUNCTIONS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/Traits.h b/tvmet-1.7.1/include/tvmet/Traits.h deleted file mode 100644 index ceb4f03eb..000000000 --- a/tvmet-1.7.1/include/tvmet/Traits.h +++ /dev/null @@ -1,122 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * Based on Tvmet source code, http://tvmet.sourceforge.net, - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Traits.h,v 1.11 2004/11/04 18:10:35 opetzold Exp $ - */ - -#ifndef TVMET_NUMERIC_TRAITS_H -#define TVMET_NUMERIC_TRAITS_H - -#if defined(EIGEN_USE_COMPLEX) -# include -#endif - -#include - -#include - -namespace tvmet { - -/** - * \class Traits Traits.h "tvmet/Traits.h" - * \brief Traits for standard types. - * - */ -template -struct Traits : public TraitsBase -{ - typedef TraitsBase Base; - typedef typename Base::value_type value_type; - typedef typename Base::real_type real_type; - typedef typename Base::float_type float_type; - typedef typename Base::argument_type argument_type; - - using Base::isFloat; - using Base::isComplex; - using Base::epsilon; - using Base::abs; - using Base::real; - using Base::imag; - using Base::conj; - using Base::sqrt; - using Base::isLessThan_nonfuzzy; - - static value_type random() - { - value_type x; - pickRandom(x); - return x; - } - /** - * Short version: returns true if the absolute value of \a a is much smaller - * than that of \a b. - * - * Full story: returns(abs(a) <= abs(b) * epsilon()); - */ - static bool isNegligible(argument_type a, argument_type b) - { - if(isFloat()) - return(abs(a) <= abs(b) * epsilon()); - else - return(a==static_cast(0)); - } - - /** - * Short version: returns true if \a a is approximately zero. - * - * Full story: returns isNegligible( a, static_cast(1) ); - */ - static bool isZero(argument_type a) - { - return isNegligible(a, static_cast(1)); - } - - /** - * Short version: returns true if a is very close to b, false otherwise. - * - * Full story: returns abs( a - b ) <= min( abs(a), abs(b) ) * epsilon. - */ - static bool isApprox(argument_type a, argument_type b) - { - if(isFloat()) - return(abs( a - b ) <= std::min(abs(a), abs(b)) * epsilon()); - else - return(a==b); - } - - /** - * Short version: returns true if a is smaller or approximately equalt to b, false otherwise. - * - * Full story: returns a <= b || isApprox(a, b); - */ - static bool isLessThan(argument_type a, argument_type b) - { - if(isFloat()) - return(isLessThan_nonfuzzy(a,b) || isApprox(a, b)); - else - return(isLessThan_nonfuzzy(a,b)); - } - -}; - - -} // namespace tvmet - -#endif // TVMET_NUMERIC_TRAITS_H diff --git a/tvmet-1.7.1/include/tvmet/TraitsBase.h b/tvmet-1.7.1/include/tvmet/TraitsBase.h deleted file mode 100644 index 16c958baf..000000000 --- a/tvmet-1.7.1/include/tvmet/TraitsBase.h +++ /dev/null @@ -1,347 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * Based on Tvmet source code, http://tvmet.sourceforge.net, - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TraitsBase.h,v 1.11 2004/11/04 18:10:35 opetzold Exp $ - */ - -#ifndef TVMET_NUMERIC_TRAITS_BASE_H -#define TVMET_NUMERIC_TRAITS_BASE_H - -#if defined(EIGEN_USE_COMPLEX) -# include -#endif - -#include -#include - -namespace tvmet { - -/** - * \class TraitsBase TraitsBase.h "tvmet/TraitsBase.h" - * \brief Traits for standard types. - * - * In this base class goes the basic stuff that has to be implemented specifically - * for each type. - */ -template -struct TraitsBase { - typedef T real_type; - typedef T value_type; - typedef T float_type; - typedef const T & argument_type; - - static real_type real(argument_type x); - static real_type imag(argument_type x); - static value_type conj(argument_type x); - static real_type abs(argument_type x); - static value_type sqrt(argument_type x); - static real_type epsilon(); - static bool isComplex(); - static bool isFloat(); - - static bool isLessThan_nonfuzzy(argument_type x, argument_type y); -}; - -/* - * numeric traits for built-in types - */ - -/** - * \class TraitsBase TraitsBase.h "tvmet/TraitsBase.h" - * \brief Traits specialized for int. - */ -template<> -struct TraitsBase { - typedef int value_type; - typedef value_type real_type; - typedef double float_type; - typedef value_type argument_type; - - static real_type real(argument_type x) { return x; } - static real_type imag(argument_type x) { TVMET_UNUSED(x); return 0; } - static value_type conj(argument_type x) { return x; } - static value_type sqrt(argument_type x) { - return static_cast(std::sqrt(static_cast(x))); - } - static real_type abs(argument_type x) { - return std::abs(x); - } - static real_type epsilon() { return 0; } - static bool isComplex() { return false; } - static bool isFloat() { return false; } - - /** Complexity on operations. */ - enum { - ops_plus = 1, /**< Complexity on plus/minus ops. */ - ops_muls = 1 /**< Complexity on multiplications. */ - }; - - static bool isLessThan_nonfuzzy(argument_type x, argument_type y) { - return x <= y; - } -}; - -/** - * \class TraitsBase TraitsBase.h "tvmet/TraitsBase.h" - * \brief Traits specialized for float. - */ -template<> -struct TraitsBase { - typedef float value_type; - typedef value_type real_type; - typedef value_type float_type; - typedef value_type argument_type; - - static real_type real(argument_type x) { return x; } - static real_type imag(argument_type x) { TVMET_UNUSED(x); return 0; } - static value_type conj(argument_type x) { return x; } - static value_type sqrt(argument_type x) { - return std::sqrt(x); - } - static real_type abs(argument_type x) { - return std::abs(x); - } - static real_type epsilon() { return 1e-5f; } - static bool isComplex() { return false; } - static bool isFloat() { return true; } - - /** Complexity on operations. */ - enum { - ops_plus = 1, /**< Complexity on plus/minus ops. */ - ops_muls = 1 /**< Complexity on multiplications. */ - }; - - static bool isLessThan_nonfuzzy(argument_type x, argument_type y) { - return x <= y; - } -}; - - -/** - * \class TraitsBase TraitsBase.h "tvmet/TraitsBase.h" - * \brief Traits specialized for double. - */ -template<> -struct TraitsBase { - typedef double value_type; - typedef value_type real_type; - typedef value_type float_type; - typedef value_type argument_type; - - static real_type real(argument_type x) { return x; } - static real_type imag(argument_type x) { TVMET_UNUSED(x); return 0; } - static value_type conj(argument_type x) { return x; } - static value_type sqrt(argument_type x) { - return std::sqrt(x); - } - static real_type abs(argument_type x) { - return std::abs(x); - } - static real_type epsilon() { return 1e-11; } - static bool isComplex() { return false; } - static bool isFloat() { return true; } - - /** Complexity on operations. */ - enum { - ops_plus = 1, /**< Complexity on plus/minus ops. */ - ops_muls = 1 /**< Complexity on multiplications. */ - }; - - static bool isLessThan_nonfuzzy(argument_type x, argument_type y) { - return x <= y; - } - -}; - - -/* - * numeric traits for complex types - */ -#if defined(EIGEN_USE_COMPLEX) - -/** - * \class TraitsBase< std::complex > TraitsBase.h "tvmet/TraitsBase.h" - * \brief Traits specialized for std::complex. - */ -template<> -struct TraitsBase< std::complex > -{ - typedef std::complex value_type; - typedef int real_type; - typedef std::complex float_type; - typedef const value_type& argument_type; - - static real_type real(argument_type z) { return std::real(z); } - static real_type imag(argument_type z) { return std::imag(z); } - static value_type conj(argument_type z) { return std::conj(z); } - static real_type abs(argument_type x) { - // the use of ceil() guarantees e.g. that abs(real(x)) <= abs(x), - // and that abs(x)==0 if and only if x==0. - return static_cast(std::ceil(std::abs(float_type(x.real(),x.imag())))); - } - static value_type sqrt(argument_type x) { - float_type y = std::sqrt(float_type(x.real(), x.imag())); - int r = static_cast(y.real()); - int i = static_cast(y.imag()); - return value_type(r,i); - } - static real_type epsilon() { return 0; } - static bool isComplex() { return true; } - static bool isFloat() { return false; } - - /** Complexity on operations. */ - enum { - ops_plus = 2, /**< Complexity on plus/minus ops. */ - ops_muls = 6 /**< Complexity on multiplications. */ - }; - - static bool isLessThan_nonfuzzy(argument_type x, argument_type y) { - TVMET_UNUSED(x); - TVMET_UNUSED(y); - return false; - } - -}; - - -/** - * \class TraitsBase< std::complex > TraitsBase.h "tvmet/TraitsBase.h" - * \brief Traits specialized for std::complex. - */ -template<> -struct TraitsBase< std::complex > { - typedef std::complex value_type; - typedef float real_type; - typedef value_type float_type; - typedef const value_type& argument_type; - - static real_type real(argument_type z) { return std::real(z); } - static real_type imag(argument_type z) { return std::imag(z); } - static value_type conj(argument_type z) { return std::conj(z); } - static value_type sqrt(argument_type x) { - return std::sqrt(x); - } - static real_type abs(argument_type x) { - return std::abs(x); - } - static real_type epsilon() { return 1e-5f; } - static bool isComplex() { return true; } - static bool isFloat() { return true; } - - /** Complexity on operations. */ - enum { - ops_plus = 2, /**< Complexity on plus/minus ops. */ - ops_muls = 6 /**< Complexity on multiplications. */ - }; - - static bool isLessThan_nonfuzzy(argument_type x, argument_type y) { - TVMET_UNUSED(x); - TVMET_UNUSED(y); - return false; - } - -}; - - -/** - * \class TraitsBase< std::complex > TraitsBase.h "tvmet/TraitsBase.h" - * \brief Traits specialized for std::complex. - */ -template<> -struct TraitsBase< std::complex > { - typedef std::complex value_type; - typedef double real_type; - typedef value_type float_type; - typedef const value_type& argument_type; - - static real_type real(argument_type z) { return std::real(z); } - static real_type imag(argument_type z) { return std::imag(z); } - static value_type conj(argument_type z) { return std::conj(z); } - static value_type sqrt(argument_type x) { - return std::sqrt(x); - } - static real_type abs(argument_type x) { - return std::abs(x); - } - static real_type epsilon() { return 1e-11; } - static bool isComplex() { return true; } - static bool isFloat() { return true; } - - /** Complexity on operations. */ - enum { - ops_plus = 2, /**< Complexity on plus/minus ops. */ - ops_muls = 6 /**< Complexity on multiplications. */ - }; - - static bool isLessThan_nonfuzzy(argument_type x, argument_type y) { - TVMET_UNUSED(x); - TVMET_UNUSED(y); - return false; - } - -}; - -#endif // defined(EIGEN_USE_COMPLEX) - -#ifdef __GNUC__ -# if __GNUC__>=4 -# define EIGEN_WITH_GCC_4_OR_LATER -# endif -#endif - -/** Stores in x a random int between -RAND_MAX/2 and RAND_MAX/2 */ -inline void pickRandom( int & x ) -{ - x = rand() - RAND_MAX / 2; -} - -/** Stores in x a random float between -1.0 and 1.0 */ -inline void pickRandom( float & x ) -{ - x = 2.0f * rand() / RAND_MAX - 1.0f; -} - -/** Stores in x a random double between -1.0 and 1.0 */ -inline void pickRandom( double & x ) -{ - x = 2.0 * rand() / RAND_MAX - 1.0; -} - -#ifdef EIGEN_USE_COMPLEX -/** Stores in the real and imaginary parts of x - * random values between -1.0 and 1.0 */ -template void pickRandom( std::complex & x ) -{ -#ifdef EIGEN_WITH_GCC_4_OR_LATER - pickRandom( x.real() ); - pickRandom( x.imag() ); -#else // workaround by David Faure for MacOS 10.3 and GCC 3.3, commit 630812 - T r = x.real(); - T i = x.imag(); - pickRandom( r ); - pickRandom( i ); - x = std::complex(r,i); -#endif -} -#endif // EIGEN_USE_COMPLEX - -} // namespace tvmet - -#endif // TVMET_NUMERIC_TRAITS_BASE_H diff --git a/tvmet-1.7.1/include/tvmet/TvmetBase.h b/tvmet-1.7.1/include/tvmet/TvmetBase.h deleted file mode 100644 index 262f860d4..000000000 --- a/tvmet-1.7.1/include/tvmet/TvmetBase.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TvmetBase.h,v 1.11 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_BASE_H -#define TVMET_BASE_H - -#include // io streams forward declaration -#include // rtti: used by Xpr.h level printing -#include // unary and binary math -#include // labs - -namespace tvmet { - - -/** - * \class TvmetBase TvmetBase.h "tvmet/TvmetBase.h" - * \brief Base class - * Used for static polymorph call of print_xpr - */ -template class TvmetBase { }; - - -/** - * \class IndentLevel TvmetBase.h "tvmet/TvmetBase.h" - * \brief Prints the level indent. - */ -class IndentLevel : public TvmetBase< IndentLevel > -{ -public: - IndentLevel(int level) : m_level(level) { } - - std::ostream& print_xpr(std::ostream& os) const { - for(int i = 0; i != m_level; ++i) os << " "; - return os; - } - -private: - int m_level; -}; - - -/** - * \fn operator<<(std::ostream& os, const TvmetBase& e) - * \brief overloaded ostream operator using static polymorphic. - * \ingroup _binary_operator - */ -template -inline -std::ostream& operator<<(std::ostream& os, const TvmetBase& e) { - static_cast(e).print_xpr(os); - return os; -} - - -/** - * \class dispatch TvmetBase.h "tvmet/TvmetBase.h" - * \brief Class helper to distuingish between e.g. meta - * and loop strategy used. - */ -template struct dispatch; - -/** - * \class dispatch TvmetBase.h "tvmet/TvmetBase.h" - * \brief specialized. - */ -template<> struct dispatch { }; - -/** - * \class dispatch TvmetBase.h "tvmet/TvmetBase.h" - * \brief specialized. - */ -template<> struct dispatch { }; - - -} // namespace tvmet - -#endif // TVMET_BASE_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/TypePromotion.h b/tvmet-1.7.1/include/tvmet/TypePromotion.h deleted file mode 100644 index 3bed8bf76..000000000 --- a/tvmet-1.7.1/include/tvmet/TypePromotion.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TypePromotion.h,v 1.6 2003/11/30 08:26:25 opetzold Exp $ - */ - -#ifndef TVMET_TYPE_PROMOTION_H -#define TVMET_TYPE_PROMOTION_H - -namespace tvmet { - - -/** - * \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" - * \brief Declaring ranks of types to avoid specializing - * - * All possible promoted types. For example, bool=1, int=2, float=3, double=4, - * etc. We can use a traits class to map from a type such as float onto its - * "precision rank". We will promote to whichever type has a higher - * "precision rank". f there is no "precision rank" for a type, we'll - * promote to whichever type requires more storage space - * (and hopefully more precision). - */ -template -struct PrecisionTraits { - enum { - rank = 0, /**< the rank of type. */ - known = 0 /**< true, if the rank is specialized = known. */ - }; -}; - - -#define TVMET_PRECISION(T,R) \ -template<> \ -struct PrecisionTraits< T > { \ - enum { \ - rank = R, \ - known = 1 \ - }; \ -}; - - -/* - * pod types - */ -TVMET_PRECISION(int, 100) -TVMET_PRECISION(float, 700) -TVMET_PRECISION(double, 800) - -/* - * complex types - */ -#if defined(EIGEN_USE_COMPLEX) -TVMET_PRECISION(std::complex, 1000) -TVMET_PRECISION(std::complex, 1600) -TVMET_PRECISION(std::complex, 1700) -#endif // defined(EIGEN_USE_COMPLEX) - - -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ -/** \class PrecisionTraits< std::complex > TypePromotion.h "tvmet/TypePromotion.h" */ - -#undef TVMET_PRECISION - - -/** - * \class AutopromoteTraits TypePromotion.h "tvmet/TypePromotion.h" - * \brief The promoted types traits. - */ -template -struct AutopromoteTraits { - typedef T value_type; -}; - -/** - * \class promoteTo TypePromotion.h "tvmet/TypePromotion.h" - * \brief Promote to T1. - */ -template -struct promoteTo { - typedef T1 value_type; -}; - - -/** - * \class promoteTo TypePromotion.h "tvmet/TypePromotion.h" - * \brief Promote to T2 - */ -template -struct promoteTo { - typedef T2 value_type; -}; - - -/** - * \class PromoteTraits TypePromotion.h "tvmet/TypePromotion.h" - * \brief Promote type traits - */ -template -class PromoteTraits { - // Handle promotion of small integers to int/unsigned int - typedef typename AutopromoteTraits::value_type T1; - typedef typename AutopromoteTraits::value_type T2; - - enum { - // True if T1 is higher ranked - T1IsBetter = int(PrecisionTraits::rank) > int(PrecisionTraits::rank), - - // True if we know ranks for both T1 and T2 - knowBothRanks = PrecisionTraits::known && PrecisionTraits::known, - - // True if we know T1 but not T2 - knowT1butNotT2 = PrecisionTraits::known && !(PrecisionTraits::known), - - // True if we know T2 but not T1 - knowT2butNotT1 = PrecisionTraits::known && !(PrecisionTraits::known), - - // True if T1 is bigger than T2 - T1IsLarger = sizeof(T1) >= sizeof(T2), - - // We know T1 but not T2: true - // We know T2 but not T1: false - // Otherwise, if T1 is bigger than T2: true - defaultPromotion = knowT1butNotT2 ? false : (knowT2butNotT1 ? true : T1IsLarger), - - // If we have both ranks, then use them. - // If we have only one rank, then use the unknown type. - // If we have neither rank, then promote to the larger type. - promoteToT1 = (knowBothRanks ? T1IsBetter : defaultPromotion) ? 1 : 0 - }; - - public: - typedef typename promoteTo::value_type value_type; -}; - - -} // namespace tvmet - -#endif // TVMET_TYPE_PROMOTION_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/UnaryFunctionals.h b/tvmet-1.7.1/include/tvmet/UnaryFunctionals.h deleted file mode 100644 index 3ba35f2e3..000000000 --- a/tvmet-1.7.1/include/tvmet/UnaryFunctionals.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: UnaryFunctionals.h,v 1.18 2004/10/04 11:44:42 opetzold Exp $ - */ - -#ifndef TVMET_UNARY_FUNCTIONAL_H -#define TVMET_UNARY_FUNCTIONAL_H - -namespace tvmet { - -/** \class Fcnl_compl UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */ -/** \class Fcnl_neg UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -struct Fcnl_##NAME : public UnaryFunctional { \ - typedef T value_type; \ - \ - static inline \ - value_type apply_on(value_type rhs) { \ - return OP rhs; \ - } \ - \ - static \ - void print_xpr(std::ostream& os, int l=0) { \ - os << IndentLevel(l) << "Fcnl_" << #NAME << "," \ - << std::endl; \ - } \ -}; - -TVMET_IMPLEMENT_MACRO(neg, -) -#undef TVMET_IMPLEMENT_MACRO - -/* - * complex support - */ - - -#if defined(EIGEN_USE_COMPLEX) - -/** - * \class Fcnl_conj< std::complex > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" - * \brief %Functional for conj. - */ -template struct Fcnl_conj : public UnaryFunctional { }; - - -/** \class Fcnl_conj< std::complex > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */ -template -struct Fcnl_conj< std::complex > : public UnaryFunctional { - typedef std::complex value_type; - - static inline - value_type apply_on(const std::complex& rhs) { - return std::conj(rhs); - } - - static - void print_xpr(std::ostream& os, int l=0) { - os << IndentLevel(l) << "Fcnl_conj).name() << ">," - << std::endl; - } -}; - - -/** \class Fcnl_real< std::complex > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */ -/** \class Fcnl_imag< std::complex > UnaryFunctionals.h "tvmet/UnaryFunctionals.h" */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template struct Fcnl_##NAME; \ -template \ -struct Fcnl_##NAME< std::complex > : public UnaryFunctional { \ - typedef T value_type; \ - \ - static inline \ - value_type apply_on(const std::complex& rhs) { \ - return TVMET_STD_SCOPE(NAME)(rhs); \ - } \ - \ - static \ - void print_xpr(std::ostream& os, int l=0) { \ - os << IndentLevel(l) << "Fcnl_" << #NAME << ").name() << ">," \ - << std::endl; \ - } \ -}; - -TVMET_IMPLEMENT_MACRO(real) -TVMET_IMPLEMENT_MACRO(imag) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - -} // namespace tvmet - -#endif // TVMET_UNARY_FUNCTIONAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/Vector.h b/tvmet-1.7.1/include/tvmet/Vector.h deleted file mode 100644 index 275355f3e..000000000 --- a/tvmet-1.7.1/include/tvmet/Vector.h +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Vector.h,v 1.44 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_VECTOR_H -#define TVMET_VECTOR_H - -#include // reverse_iterator -#include - -#include -#include -#include - -#include - -namespace tvmet { - - -/* forwards */ -template class Vector; - - -/** - * \class VectorConstRef Vector.h "tvmet/Vector.h" - * \brief Const value iterator for ET - */ -template -class VectorConstRef - : public TvmetBase< VectorConstRef > -{ -public: // types - typedef T value_type; - typedef T* pointer; - typedef const T* const_pointer; - -public: - /** Dimensions. */ - enum { - Size = Sz /**< The size of the vector. */ - }; - -public: - /** Complexity counter. */ - enum { - ops = Size - }; - -private: - VectorConstRef(); - VectorConstRef& operator=(const VectorConstRef&); - -public: - /** Constructor. */ - explicit VectorConstRef(const Vector& rhs) - : m_array(rhs.array()) - { } - - /** Constructor by a given memory pointer. */ - explicit VectorConstRef(const_pointer data) - : m_array(data) - { } - -public: // access operators - /** access by index. */ - value_type operator()(int i) const { - assert(i < Size); - return m_array[i]; - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l) - << "VectorConstRef[O=" << ops << "]<" - << "T=" << typeid(T).name() << ">," - << std::endl; - } - -private: - const_pointer _tvmet_restrict m_array; -}; - - -/** - * \class Vector Vector.h "tvmet/Vector.h" - * \brief Compile time fixed length vector with evaluation on compile time. - */ -template -class Vector -{ -public: - /** Data type of the tvmet::Vector. */ - typedef T value_type; - -public: - /** Complexity counter. */ - enum { - ops_assign = Size, - ops = ops_assign, - use_meta = ops < TVMET_COMPLEXITY_V_ASSIGN_TRIGGER ? true : false - }; - -public: - /** Default Destructor */ - ~Vector() {} - - /** Default Constructor. Does nothing. */ - explicit Vector() {} - - /** Copy Constructor, not explicit! */ - Vector(const Vector& rhs) - { - *this = XprVector(rhs.constRef()); - } - - explicit Vector(const value_type* array) - { - for(int i = 0; i < Size; i++) m_array[i] = array[i]; - } - - /** Construct a vector by expression. */ - template - explicit Vector(const XprVector& e) - { - *this = e; - } - - /** Assign a value_type on array, this can be used for a single value - or a comma separeted list of values. */ - CommaInitializer operator=(value_type rhs) { - return CommaInitializer(*this, rhs); - } - -public: // access operators - value_type* _tvmet_restrict array() { return m_array; } - const value_type* _tvmet_restrict array() const { return m_array; } - -public: // index access operators - value_type& _tvmet_restrict operator()(int i) { - // Note: g++-2.95.3 does have problems on typedef reference - assert(i < Size); - return m_array[i]; - } - - value_type operator()(int i) const { - assert(i < Size); - return m_array[i]; - } - - value_type& _tvmet_restrict operator[](int i) { - // Note: g++-2.95.3 does have problems on typedef reference - return this->operator()(i); - } - - value_type operator[](int i) const { - return this->operator()(i); - } - -public: // ET interface - typedef VectorConstRef ConstRef; - - /** Return a const Reference of the internal data */ - ConstRef constRef() const { return ConstRef(*this); } - - /** Return the vector as const expression. */ - XprVector expr() const { - return XprVector(this->constRef()); - } - -private: - /** Wrapper for meta assign. */ - template - static inline - void do_assign(dispatch, Dest& dest, const Src& src, const Assign& assign_fn) { - meta::Vector::assign(dest, src, assign_fn); - } - - /** Wrapper for loop assign. */ - template - static inline - void do_assign(dispatch, Dest& dest, const Src& src, const Assign& assign_fn) { - loop::Vector::assign(dest, src, assign_fn); - } - -public: - /** assign this to a vector expression using the functional assign_fn. */ - template - void assign_to(Vector& dest, const Assign& assign_fn) const { - do_assign(dispatch(), dest, *this, assign_fn); - } - -public: // assign operations - /** assign a given Vector element wise to this vector. - The operator=(const Vector&) is compiler generated. */ - template - Vector& operator=(const Vector& rhs) { - rhs.assign_to(*this, Fcnl_assign()); - return *this; - } - - /** assign a given XprVector element wise to this vector. */ - template - Vector& operator=(const XprVector& rhs) { - rhs.assign_to(*this, Fcnl_assign()); - return *this; - } - -private: - template friend class CommaInitializer; - - void commaWrite(int index, T rhs) - { - m_array[index] = rhs; - } - -public: // math operators with scalars - // NOTE: this meaning is clear - element wise ops even if not in ns element_wise - Vector& operator+=(value_type) _tvmet_always_inline; - Vector& operator-=(value_type) _tvmet_always_inline; - Vector& operator*=(value_type) _tvmet_always_inline; - Vector& operator/=(value_type) _tvmet_always_inline; - -public: // math assign operators with vectors - // NOTE: access using the operators in ns element_wise, since that's what is does - template Vector& M_add_eq(const Vector&) _tvmet_always_inline; - template Vector& M_sub_eq(const Vector&) _tvmet_always_inline; - template Vector& M_mul_eq(const Vector&) _tvmet_always_inline; - template Vector& M_div_eq(const Vector&) _tvmet_always_inline; - -public: // math operators with expressions - // NOTE: access using the operators in ns element_wise, since that's what is does - template Vector& M_add_eq(const XprVector&) _tvmet_always_inline; - template Vector& M_sub_eq(const XprVector&) _tvmet_always_inline; - template Vector& M_mul_eq(const XprVector&) _tvmet_always_inline; - template Vector& M_div_eq(const XprVector&) _tvmet_always_inline; - -public: // aliased math operators with expressions, used with proxy - template Vector& alias_assign(const Vector&) _tvmet_always_inline; - template Vector& alias_add_eq(const Vector&) _tvmet_always_inline; - template Vector& alias_sub_eq(const Vector&) _tvmet_always_inline; - template Vector& alias_mul_eq(const Vector&) _tvmet_always_inline; - template Vector& alias_div_eq(const Vector&) _tvmet_always_inline; - - template Vector& alias_assign(const XprVector&) _tvmet_always_inline; - template Vector& alias_add_eq(const XprVector&) _tvmet_always_inline; - template Vector& alias_sub_eq(const XprVector&) _tvmet_always_inline; - template Vector& alias_mul_eq(const XprVector&) _tvmet_always_inline; - template Vector& alias_div_eq(const XprVector&) _tvmet_always_inline; - -public: // io - /** Structure for info printing as Vector. */ - struct Info : public TvmetBase { - std::ostream& print_xpr(std::ostream& os) const { - os << "Vector"; - return os; - } - }; - - /** Get an info object of this vector. */ - static Info info() { return Info(); } - - /** Member function for expression level printing. */ - std::ostream& print_xpr(std::ostream& os, int l=0) const; - - /** Member function for printing internal data. */ - std::ostream& print_on(std::ostream& os) const; - -private: - /** The data of vector self. */ - - value_type m_array[Size]; -}; - -typedef Vector Vector2i; -typedef Vector Vector3i; -typedef Vector Vector4i; -typedef Vector Vector2f; -typedef Vector Vector3f; -typedef Vector Vector4f; -typedef Vector Vector2d; -typedef Vector Vector3d; -typedef Vector Vector4d; - -} // namespace tvmet - -#include -#include -#include -#include -#include -#include - -#endif // TVMET_VECTOR_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/VectorEval.h b/tvmet-1.7.1/include/tvmet/VectorEval.h deleted file mode 100644 index 47a7cf6b2..000000000 --- a/tvmet-1.7.1/include/tvmet/VectorEval.h +++ /dev/null @@ -1,373 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: VectorEval.h,v 1.14 2003/11/30 08:26:25 opetzold Exp $ - */ - -#ifndef TVMET_VECTOR_EVAL_H -#define TVMET_VECTOR_EVAL_H - -namespace tvmet { - - -/******************************************************************** - * functions all_elements/any_elements - ********************************************************************/ - - -/** - * \fn bool all_elements(const XprVector& e) - * \brief check on statements for all elements - * \ingroup _unary_function - * This is for use with boolean operators like - * \par Example: - * \code - * all_elements(vector > 0) { - * // true branch - * } else { - * // false branch - * } - * \endcode - * \sa \ref compare - */ -template -inline -bool all_elements(const XprVector& e) { - return meta::Vector::all_elements(e); -} - - -/** - * \fn bool any_elements(const XprVector& e) - * \brief check on statements for any elements - * \ingroup _unary_function - * This is for use with boolean operators like - * \par Example: - * \code - * any_elements(vector > 0) { - * // true branch - * } else { - * // false branch - * } - * \endcode - * \sa \ref compare - */ -template -inline -bool any_elements(const XprVector& e) { - return meta::Vector::any_elements(e); -} - - -/* - * trinary evaluation functions with vectors and xpr of - * XprVector ? Vector : Vector - * XprVector ? Vector : XprVector - * XprVector ? XprVector : Vector - * XprVector ? XprVector : XprVector - */ - -/** - * eval(const XprVector& e1, const Vector& v2, const Vector& v3) - * \brief Evals the vector expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprVector< - XprEval< - XprVector, - VectorConstRef, - VectorConstRef - >, - Sz -> -eval(const XprVector& e1, const Vector& v2, const Vector& v3) { - typedef XprEval< - XprVector, - VectorConstRef, - VectorConstRef - > expr_type; - return XprVector( - expr_type(e1, v2.constRef(), v3.constRef())); -} - - -/** - * eval(const XprVector& e1, const Vector& v2, const XprVector& e3) - * \brief Evals the vector expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprVector< - XprEval< - XprVector, - VectorConstRef, - XprVector - >, - Sz -> -eval(const XprVector& e1, const Vector& v2, const XprVector& e3) { - typedef XprEval< - XprVector, - VectorConstRef, - XprVector - > expr_type; - return XprVector( - expr_type(e1, v2.constRef(), e3)); -} - - -/** - * eval(const XprVector& e1, const XprVector& e2, const Vector& v3) - * \brief Evals the vector expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprVector< - XprEval< - XprVector, - XprVector, - VectorConstRef - >, - Sz -> -eval(const XprVector& e1, const XprVector& e2, const Vector& v3) { - typedef XprEval< - XprVector, - XprVector, - VectorConstRef - > expr_type; - return XprVector( - expr_type(e1, e2, v3.constRef())); -} - - -/** - * eval(const XprVector& e1, const XprVector& e2, const XprVector& e3) - * \brief Evals the vector expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprVector< - XprEval< - XprVector, - XprVector, - XprVector - >, - Sz -> -eval(const XprVector& e1, const XprVector& e2, const XprVector& e3) { - typedef XprEval< - XprVector, - XprVector, - XprVector - > expr_type; - return XprVector(expr_type(e1, e2, e3)); -} - - -/* - * trinary evaluation functions with vectors, xpr of and POD - * - * XprVector ? POD1 : POD2 - * XprVector ? POD : XprVector - * XprVector ? XprVector : POD - */ -#define TVMET_IMPLEMENT_MACRO(POD) \ -template \ -inline \ -XprVector< \ - XprEval< \ - XprVector, \ - XprLiteral< POD >, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -eval(const XprVector& e, POD x2, POD x3) { \ - typedef XprEval< \ - XprVector, \ - XprLiteral< POD >, \ - XprLiteral< POD > \ - > expr_type; \ - return XprVector( \ - expr_type(e, XprLiteral< POD >(x2), XprLiteral< POD >(x3))); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprEval< \ - XprVector, \ - XprLiteral< POD >, \ - XprVector \ - >, \ - Sz \ -> \ -eval(const XprVector& e1, POD x2, const XprVector& e3) { \ - typedef XprEval< \ - XprVector, \ - XprLiteral< POD >, \ - XprVector \ - > expr_type; \ - return XprVector( \ - expr_type(e1, XprLiteral< POD >(x2), e3)); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprEval< \ - XprVector, \ - XprVector, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -eval(const XprVector& e1, const XprVector& e2, POD x3) { \ - typedef XprEval< \ - XprVector, \ - XprVector, \ - XprLiteral< POD > \ - > expr_type; \ - return XprVector( \ - expr_type(e1, e2, XprLiteral< POD >(x3))); \ -} - -TVMET_IMPLEMENT_MACRO(int) - -TVMET_IMPLEMENT_MACRO(float) -TVMET_IMPLEMENT_MACRO(double) - -#undef TVMET_IMPLEMENT_MACRO - - -/* - * trinary evaluation functions with vectors, xpr of and complex<> types - * - * XprVector e, std::complex z2, std::complex z3 - * XprVector e1, std::complex z2, XprVector e3 - * XprVector e1, XprVector e2, std::complex z3 - */ -#if defined(EIGEN_USE_COMPLEX) - - -/** - * eval(const XprVector& e, std::complex z2, std::complex z3) - * \brief Evals the vector expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprVector< - XprEval< - XprVector, - XprLiteral< std::complex >, - XprLiteral< std::complex > - >, - Sz -> -eval(const XprVector& e, std::complex z2, std::complex z3) { - typedef XprEval< - XprVector, - XprLiteral< std::complex >, - XprLiteral< std::complex > - > expr_type; - return XprVector( - expr_type(e, XprLiteral< std::complex >(z2), XprLiteral< std::complex >(z3))); -} - -/** - * eval(const XprVector& e1, std::complex z2, const XprVector& e3) - * \brief Evals the vector expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprVector< - XprEval< - XprVector, - XprLiteral< std::complex >, - XprVector - >, - Sz -> -eval(const XprVector& e1, std::complex z2, const XprVector& e3) { - typedef XprEval< - XprVector, - XprLiteral< std::complex >, - XprVector - > expr_type; - return XprVector( - expr_type(e1, XprLiteral< std::complex >(z2), e3)); -} - -/** - * eval(const XprVector& e1, const XprVector& e2, std::complex z3) - * \brief Evals the vector expressions. - * \ingroup _trinary_function - * This eval is for the a?b:c syntax, since it's not allowed to overload - * these operators. - */ -template -inline -XprVector< - XprEval< - XprVector, - XprVector, - XprLiteral< std::complex > - >, - Sz -> -eval(const XprVector& e1, const XprVector& e2, std::complex z3) { - typedef XprEval< - XprVector, - XprVector, - XprLiteral< std::complex > - > expr_type; - return XprVector( - expr_type(e1, e2, XprLiteral< std::complex >(z3))); -} -#endif // defined(EIGEN_USE_COMPLEX) - - -} // namespace tvmet - -#endif // TVMET_VECTOR_EVAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/VectorFunctions.h b/tvmet-1.7.1/include/tvmet/VectorFunctions.h deleted file mode 100644 index 2e34ab466..000000000 --- a/tvmet-1.7.1/include/tvmet/VectorFunctions.h +++ /dev/null @@ -1,854 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: VectorFunctions.h,v 1.32 2004/07/06 09:45:54 opetzold Exp $ - */ - -#ifndef TVMET_VECTOR_FUNCTIONS_H -#define TVMET_VECTOR_FUNCTIONS_H - -#include - -namespace tvmet { - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic functions add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * function(Vector, Vector) - * function(Vector, XprVector) - * function(XprVector, Vector) - */ -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - VectorConstRef \ - >, \ - Sz \ -> \ -NAME (const Vector& lhs, \ - const Vector& rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - VectorConstRef \ - >, \ - Sz \ -> \ -NAME (const XprVector& lhs, \ - const Vector& rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - XprVector \ - >, \ - Sz \ -> \ -NAME (const Vector& lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add) // per se element wise -TVMET_DECLARE_MACRO(sub) // per se element wise -TVMET_DECLARE_MACRO(mul) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(div) // not defined for vectors -} - -#undef TVMET_DECLARE_MACRO - - -/* - * function(Vector, POD) - * function(POD, Vector) - * Note: - operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, POD) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< T, POD >, \ - VectorConstRef, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -NAME (const Vector& lhs, \ - POD rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - VectorConstRef \ - >, \ - Sz \ -> \ -NAME (POD lhs, \ - const Vector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, int) -TVMET_DECLARE_MACRO(sub, int) -TVMET_DECLARE_MACRO(mul, int) -TVMET_DECLARE_MACRO(div, int) - -TVMET_DECLARE_MACRO(add, float) -TVMET_DECLARE_MACRO(sub, float) -TVMET_DECLARE_MACRO(mul, float) -TVMET_DECLARE_MACRO(div, float) - -TVMET_DECLARE_MACRO(add, double) -TVMET_DECLARE_MACRO(sub, double) -TVMET_DECLARE_MACRO(mul, double) -TVMET_DECLARE_MACRO(div, double) - -#undef TVMET_DECLARE_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * function(Vector, Sz>, std::complex) - * function(std::complex, Vector, Sz>) - * Note: per se element wise - * \todo type promotion - */ -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - VectorConstRef< std::complex, Sz>, \ - XprLiteral< std::complex > \ - >, \ - Sz \ -> \ -NAME (const Vector, Sz>& lhs, \ - const std::complex& rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - VectorConstRef< std::complex, Sz> \ - >, \ - Sz \ -> \ -NAME (const std::complex& lhs, \ - const Vector< std::complex, Sz>& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add) -TVMET_DECLARE_MACRO(sub) -TVMET_DECLARE_MACRO(mul) -TVMET_DECLARE_MACRO(div) - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * vector specific functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -typename Traits::sum_type -sum(const Vector& v) _tvmet_always_inline; - - -template -typename Traits::sum_type -product(const Vector& v) _tvmet_always_inline; - - -template -typename PromoteTraits::value_type -dot(const Vector& lhs, - const Vector& rhs) _tvmet_always_inline; - - -template -Vector::value_type, 3> -cross(const Vector& lhs, - const Vector& rhs) _tvmet_always_inline; - - -template -typename Traits::sum_type -norm1(const Vector& v) _tvmet_always_inline; - - -template -typename Traits::sum_type -norm2(const Vector& v) _tvmet_always_inline; - - -template -XprVector< - XprBinOp< - Fcnl_div, - VectorConstRef, - XprLiteral< T > - >, - Sz -> -normalize(const Vector& v) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * min/max unary functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - -template -Extremum -maximum(const XprVector& e); // NOT _tvmet_always_inline; - - -template -Extremum -maximum(const Vector& v) _tvmet_always_inline; - - -template -Extremum -minimum(const XprVector& e); // NOT _tvmet_always_inline; - - -template -Extremum -minimum(const Vector& v) _tvmet_always_inline; - - -template -typename E::value_type -max(const XprVector& e); // NOT _tvmet_always_inline; - - -template -T max(const Vector& v) _tvmet_always_inline; - - -template -typename E::value_type -min(const XprVector& e); // NOT _tvmet_always_inline; - - -template -T min(const Vector& v) _tvmet_always_inline; - - -template -XprVector< - VectorConstRef, - Sz -> -cvector_ref(const T* mem) _tvmet_always_inline; - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic functions add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * function(Vector, Vector) - * function(Vector, XprVector) - * function(XprVector, Vector) - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - VectorConstRef \ - >, \ - Sz \ -> \ -NAME (const Vector& lhs, const Vector& rhs) { \ - typedef XprBinOp < \ - Fcnl_##NAME, \ - VectorConstRef, \ - VectorConstRef \ - > expr_type; \ - return XprVector( \ - expr_type(lhs.constRef(), rhs.constRef())); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - VectorConstRef \ - >, \ - Sz \ -> \ -NAME (const XprVector& lhs, const Vector& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - VectorConstRef \ - > expr_type; \ - return XprVector( \ - expr_type(lhs, rhs.constRef())); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - XprVector \ - >, \ - Sz \ -> \ -NAME (const Vector& lhs, const XprVector& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - XprVector \ - > expr_type; \ - return XprVector( \ - expr_type(lhs.constRef(), rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(add) // per se element wise -TVMET_IMPLEMENT_MACRO(sub) // per se element wise -TVMET_IMPLEMENT_MACRO(mul) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(div) // not defined for vectors -} - -#undef TVMET_IMPLEMENT_MACRO - - -/* - * function(Vector, POD) - * function(POD, Vector) - * Note: - operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, POD) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< T, POD >, \ - VectorConstRef, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -NAME (const Vector& lhs, POD rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - XprLiteral< POD > \ - > expr_type; \ - return XprVector( \ - expr_type(lhs.constRef(), XprLiteral< POD >(rhs))); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - VectorConstRef \ - >, \ - Sz \ -> \ -NAME (POD lhs, const Vector& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - VectorConstRef \ - > expr_type; \ - return XprVector( \ - expr_type(XprLiteral< POD >(lhs), rhs.constRef())); \ -} - -TVMET_IMPLEMENT_MACRO(add, int) -TVMET_IMPLEMENT_MACRO(sub, int) -TVMET_IMPLEMENT_MACRO(mul, int) -TVMET_IMPLEMENT_MACRO(div, int) - -TVMET_IMPLEMENT_MACRO(add, float) -TVMET_IMPLEMENT_MACRO(sub, float) -TVMET_IMPLEMENT_MACRO(mul, float) -TVMET_IMPLEMENT_MACRO(div, float) - -TVMET_IMPLEMENT_MACRO(add, double) -TVMET_IMPLEMENT_MACRO(sub, double) -TVMET_IMPLEMENT_MACRO(mul, double) -TVMET_IMPLEMENT_MACRO(div, double) - -#undef TVMET_IMPLEMENT_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * function(Vector, Sz>, std::complex) - * function(std::complex, Vector, Sz>) - * Note: per se element wise - * \todo type promotion - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - VectorConstRef< std::complex, Sz>, \ - XprLiteral< std::complex > \ - >, \ - Sz \ -> \ -NAME (const Vector, Sz>& lhs, const std::complex& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - VectorConstRef< std::complex, Sz>, \ - XprLiteral< std::complex > \ - > expr_type; \ - return XprVector( \ - expr_type(lhs.constRef(), XprLiteral< std::complex >(rhs))); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - VectorConstRef< std::complex, Sz> \ - >, \ - Sz \ -> \ -NAME (const std::complex& lhs, const Vector< std::complex, Sz>& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - VectorConstRef< std::complex, Sz> \ - > expr_type; \ - return XprVector( \ - expr_type(XprLiteral< std::complex >(lhs), rhs.constRef())); \ -} - -TVMET_IMPLEMENT_MACRO(add) -TVMET_IMPLEMENT_MACRO(sub) -TVMET_IMPLEMENT_MACRO(mul) -TVMET_IMPLEMENT_MACRO(div) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * vector specific functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn sum(const Vector& v) - * \brief Compute the sum of the vector. - * \ingroup _unary_function - * - * Simply compute the sum of the given vector as: - * \f[ - * \sum_{i = 0}^{Sz-1} v[i] - * \f] - */ -template -inline -typename Traits::sum_type -sum(const Vector& v) { - return meta::Vector::sum(v); -} - - -/** - * \fn product(const Vector& v) - * \brief Compute the product of the vector elements. - * \ingroup _unary_function - * - * Simply computer the product of the given vector as: - * \f[ - * \prod_{i = 0}^{Sz - 1} v[i] - * \f] - */ -template -inline -typename Traits::sum_type -product(const Vector& v) { - return meta::Vector::product(v); -} - - -/** - * \fn dot(const Vector& lhs, const Vector& rhs) - * \brief Compute the dot/inner product - * \ingroup _binary_function - * - * Compute the dot product as: - * \f[ - * \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] ) - * \f] - * where lhs is a column vector and rhs is a row vector, both vectors - * have the same dimension. - */ -template -inline -typename PromoteTraits::value_type -dot(const Vector& lhs, const Vector& rhs) { - return meta::Vector::dot(lhs, rhs); -} - - -/** - * \fn cross(const Vector& lhs, const Vector& rhs) - * \brief Compute the cross/outer product - * \ingroup _binary_function - * \note working only for vectors of size = 3 - * \todo Implement vector outer product as ET and MT, returning a XprVector - */ -template -inline -Vector::value_type, 3> -cross(const Vector& lhs, const Vector& rhs) { - typedef typename PromoteTraits::value_type value_type; - return Vector(lhs(1)*rhs(2) - rhs(1)*lhs(2), - rhs(0)*lhs(2) - lhs(0)*rhs(2), - lhs(0)*rhs(1) - rhs(0)*lhs(1)); -} - - -/** - * \fn norm1(const Vector& v) - * \brief The \f$l_1\f$ norm of a vector v. - * \ingroup _unary_function - * The norm of any vector is just the square root of the dot product of - * a vector with itself, or - * - * \f[ - * |Vector v| = |v| = \sum_{i=0}^{Sz-1}\,|v[i]| - * \f] - */ -template -inline -typename Traits::sum_type -norm1(const Vector& v) { - return sum(abs(v)); -} - - -/** - * \fn norm2(const Vector& v) - * \brief The euklidian norm (or \f$l_2\f$ norm) of a vector v. - * \ingroup _unary_function - * The norm of any vector is just the square root of the dot product of - * a vector with itself, or - * - * \f[ - * |Vector v| = |v| = \sqrt{ \sum_{i=0}^{Sz-1}\,v[i]^2 } - * \f] - * - * \note The internal cast for Vector avoids warnings on sqrt. - */ -template -inline -typename Traits::sum_type -norm2(const Vector& v) { - return static_cast( std::sqrt(static_cast::float_type>(dot(v, v))) ); -} - - -/** - * \fn normalize(const Vector& v) - * \brief Normalize the given vector. - * \ingroup _unary_function - * \sa norm2 - * - * using the equation: - * \f[ - * \frac{Vector v}{\sqrt{ \sum_{i=0}^{Sz-1}\,v[i]^2 }} - * \f] - */ -template -inline -XprVector< - XprBinOp< - Fcnl_div, - VectorConstRef, - XprLiteral< T > - >, - Sz -> -normalize(const Vector& v) { - typedef XprBinOp< - Fcnl_div, - VectorConstRef, - XprLiteral< T > - > expr_type; - return XprVector( - expr_type(v.constRef(), XprLiteral< T >(norm2(v)))); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * min/max unary functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn maximum(const XprVector& e) - * \brief Find the maximum of a vector expression - * \ingroup _unary_function - */ -template -inline -Extremum -maximum(const XprVector& e) { - typedef typename E::value_type value_type; - - value_type m_max(e(0)); - int m_idx(0); - - // this loop is faster than meta templates! - for(int i = 1; i != Sz; ++i) { - if(e(i) > m_max) { - m_max = e(i); - m_idx = i; - } - } - - return Extremum(m_max, m_idx); -} - - -/** - * \fn maximum(const Vector& v) - * \brief Find the maximum of a vector - * \ingroup _unary_function - */ -template -inline -Extremum -maximum(const Vector& v) { return maximum(v.expr()); } - - -/** - * \fn minimum(const XprVector& e) - * \brief Find the minimum of a vector expression - * \ingroup _unary_function - */ -template -inline -Extremum -minimum(const XprVector& e) { - typedef typename E::value_type value_type; - - value_type m_min(e(0)); - int m_idx(0); - - // this loop is faster than meta templates! - for(int i = 1; i != Sz; ++i) { - if(e(i) < m_min) { - m_min = e(i); - m_idx = i; - } - } - - return Extremum(m_min, m_idx); -} - - -/** - * \fn minimum(const Vector& v) - * \brief Find the minimum of a vector - * \ingroup _unary_function - */ -template -inline -Extremum -minimum(const Vector& v) { return minimum(v.expr()); } - - -/** - * \fn max(const XprVector& e) - * \brief Find the maximum of a vector expression - * \ingroup _unary_function - */ -template -inline -typename E::value_type -max(const XprVector& e) { - typedef typename E::value_type value_type; - - value_type m_max(e(0)); - - // this loop is faster than meta templates! - for(int i = 1; i != Sz; ++i) - if(e(i) > m_max) - m_max = e(i); - - return m_max; -} - - -/** - * \fn max(const Vector& v) - * \brief Find the maximum of a vector - * \ingroup _unary_function - */ -template -inline -T max(const Vector& v) { - typedef T value_type; - typedef typename Vector::const_iterator const_iterator; - - const_iterator iter(v.begin()); - const_iterator last(v.end()); - value_type temp(*iter); - - for( ; iter != last; ++iter) - if(*iter > temp) - temp = *iter; - - return temp; -} - - -/** - * \fn min(const XprVector& e) - * \brief Find the minimum of a vector expression - * \ingroup _unary_function - */ -template -inline -typename E::value_type -min(const XprVector& e) { - typedef typename E::value_type value_type; - - value_type m_min(e(0)); - - // this loop is faster than meta templates! - for(int i = 1; i != Sz; ++i) - if(e(i) < m_min) - m_min = e(i); - - return m_min; -} - - -/** - * \fn min(const Vector& v) - * \brief Find the minimum of a vector - * \ingroup _unary_function - */ -template -inline -T min(const Vector& v) { - typedef T value_type; - typedef typename Vector::const_iterator const_iterator; - - const_iterator iter(v.begin()); - const_iterator last(v.end()); - value_type temp(*iter); - - for( ; iter != last; ++iter) - if(*iter < temp) - temp = *iter; - - return temp; -} - - -/** - * \fn cvector_ref(const T* mem) - * \brief Creates an expression wrapper for a C like vector arrays. - * \ingroup _unary_function - * - * This is like creating a vector of external data, as described - * at \ref construct. With this function you wrap an expression - * around a C style vector array and you can operate directly with it - * as usual. - * - * \par Example: - * \code - * static float vertices[N][3] = { - * {-1, 0, 1}, { 1, 0, 1}, ... - * }; - * ... - * typedef Vector vector_type; - * ... - * vector_type V( cross(cvector_ref(&vertices[0][0]), - * cvector_ref(&vertices[1][0])) ); - * \endcode - * - * \since release 1.6.0 - */ -template -inline -XprVector< - VectorConstRef, - Sz -> -cvector_ref(const T* mem) { - typedef VectorConstRef expr_type; - - return XprVector(expr_type(mem)); -}; - - -} // namespace tvmet - -#endif // TVMET_VECTOR_FUNCTIONS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/VectorImpl.h b/tvmet-1.7.1/include/tvmet/VectorImpl.h deleted file mode 100644 index 1eb85d816..000000000 --- a/tvmet-1.7.1/include/tvmet/VectorImpl.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: VectorImpl.h,v 1.27 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_VECTOR_IMPL_H -#define TVMET_VECTOR_IMPL_H - -#include // setw - -#include - -namespace tvmet { - -/* - * member operators for i/o - */ -template -std::ostream& Vector::print_xpr(std::ostream& os, int l) const -{ - os << IndentLevel(l++) << "Vector[" << ops << "]<" - << typeid(T).name() << ", " << Size << ">," - << IndentLevel(--l) - << std::endl; - - return os; -} - - -template -std::ostream& Vector::print_on(std::ostream& os) const -{ - os << "[\n "; - for(int i = 0; i < (Size - 1); ++i) { - os << m_array[i] << ", "; - } - os << m_array[Size - 1] << "\n]"; - return os; -} - - -/* - * member operators with scalars, per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -Vector& Vector::operator OP (value_type rhs) { \ - typedef XprLiteral expr_type; \ - this->M_##NAME(XprVector(expr_type(rhs))); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(add_eq, +=) -TVMET_IMPLEMENT_MACRO(sub_eq, -=) -TVMET_IMPLEMENT_MACRO(mul_eq, *=) -TVMET_IMPLEMENT_MACRO(div_eq, /=) -#undef TVMET_IMPLEMENT_MACRO - - -/* - * member functions (operators) with vectors, for use with +=,-= ... <<= - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -template \ -inline Vector& \ -Vector::M_##NAME (const Vector& rhs) { \ - this->M_##NAME( XprVector::ConstRef, Size>(rhs.constRef()) ); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(add_eq) -TVMET_IMPLEMENT_MACRO(sub_eq) -TVMET_IMPLEMENT_MACRO(mul_eq) -TVMET_IMPLEMENT_MACRO(div_eq) -#undef TVMET_IMPLEMENT_MACRO - - -/* - * member functions (operators) with expressions, for use with +=,-= ... <<= - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -template \ -inline \ -Vector& \ -Vector::M_##NAME (const XprVector& rhs) { \ - rhs.assign_to(*this, Fcnl_##NAME()); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(add_eq) -TVMET_IMPLEMENT_MACRO(sub_eq) -TVMET_IMPLEMENT_MACRO(mul_eq) -TVMET_IMPLEMENT_MACRO(div_eq) -#undef TVMET_IMPLEMENT_MACRO - - -/* - * aliased member functions (operators) with vectors, - * for use with +=,-= ... <<= - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -template \ -inline \ -Vector& \ -Vector::alias_##NAME (const Vector& rhs) { \ - this->alias_##NAME( XprVector::ConstRef, Size>(rhs.constRef()) ); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(assign) -TVMET_IMPLEMENT_MACRO(add_eq) -TVMET_IMPLEMENT_MACRO(sub_eq) -TVMET_IMPLEMENT_MACRO(mul_eq) -TVMET_IMPLEMENT_MACRO(div_eq) -#undef TVMET_IMPLEMENT_MACRO - - -/* - * aliased member functions (operators) with expressions, - * for use with +=,-= ... <<= - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -template \ -inline \ -Vector& \ -Vector::alias_##NAME (const XprVector& rhs) { \ - typedef Vector temp_type; \ - temp_type(rhs).assign_to(*this, Fcnl_##NAME()); \ - return *this; \ -} - -TVMET_IMPLEMENT_MACRO(assign) -TVMET_IMPLEMENT_MACRO(add_eq) -TVMET_IMPLEMENT_MACRO(sub_eq) -TVMET_IMPLEMENT_MACRO(mul_eq) -TVMET_IMPLEMENT_MACRO(div_eq) -#undef TVMET_IMPLEMENT_MACRO - - -} // namespace tvmet - -#endif // TVMET_VECTOR_IMPL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/VectorOperators.h b/tvmet-1.7.1/include/tvmet/VectorOperators.h deleted file mode 100644 index f513bb19a..000000000 --- a/tvmet-1.7.1/include/tvmet/VectorOperators.h +++ /dev/null @@ -1,496 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: VectorOperators.h,v 1.14 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_VECTOR_OPERATORS_H -#define TVMET_VECTOR_OPERATORS_H - -namespace tvmet { - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - - -template -inline -std::ostream& operator<<(std::ostream& os, - const Vector& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Member operators (arithmetic and bit ops) - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * update_operator(Vector, Vector) - * update_operator(Vector, XprVector) - * Note: per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -Vector& \ -operator OP (Vector& lhs, \ - const Vector& rhs) _tvmet_always_inline; \ - \ -template \ -Vector& \ -operator OP (Vector& lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add_eq, +=) // per se element wise -TVMET_DECLARE_MACRO(sub_eq, -=) // per se element wise -TVMET_DECLARE_MACRO(mul_eq, *=) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(div_eq, /=) // not defined for vectors -} - -#undef TVMET_DECLARE_MACRO - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic operators implemented by functions - * add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * operator(Vector, Vector) - * operator(Vector, XprVector) - * operator(XprVector, Vector) - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - VectorConstRef \ - >, \ - Sz \ -> \ -operator OP (const Vector& lhs, \ - const Vector& rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - VectorConstRef \ - >, \ - Sz \ -> \ -operator OP (const XprVector& lhs, \ - const Vector& rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - XprVector \ - >, \ - Sz \ -> \ -operator OP (const Vector& lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +) // per se element wise -TVMET_DECLARE_MACRO(sub, -) // per se element wise -TVMET_DECLARE_MACRO(mul, *) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(div, /) // not defined for vectors -} - -#undef TVMET_DECLARE_MACRO - - -/* - * operator(Vector, POD) - * operator(POD, Vector) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP, POD) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< T, POD >, \ - VectorConstRef, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -operator OP (const Vector& lhs, \ - POD rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - VectorConstRef \ - >, \ - Sz \ -> \ -operator OP (POD lhs, \ - const Vector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +, int) -TVMET_DECLARE_MACRO(sub, -, int) -TVMET_DECLARE_MACRO(mul, *, int) -TVMET_DECLARE_MACRO(div, /, int) - -TVMET_DECLARE_MACRO(add, +, float) -TVMET_DECLARE_MACRO(sub, -, float) -TVMET_DECLARE_MACRO(mul, *, float) -TVMET_DECLARE_MACRO(div, /, float) - -TVMET_DECLARE_MACRO(add, +, double) -TVMET_DECLARE_MACRO(sub, -, double) -TVMET_DECLARE_MACRO(mul, *, double) -TVMET_DECLARE_MACRO(div, /, double) - -#undef TVMET_DECLARE_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * operator(Vector, Sz>, std::complex) - * operator(std::complex, Vector, Sz>) - * Note: operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - VectorConstRef< std::complex, Sz>, \ - XprLiteral< std::complex > \ - >, \ - Sz \ -> \ -operator OP (const Vector, Sz>& lhs, \ - const std::complex& rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - VectorConstRef< std::complex, Sz> \ - >, \ - Sz \ -> \ -operator OP (const std::complex& lhs, \ - const Vector< std::complex, Sz>& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +) // per se element wise -TVMET_DECLARE_MACRO(sub, -) // per se element wise -TVMET_DECLARE_MACRO(mul, *) // per se element wise -TVMET_DECLARE_MACRO(div, /) // per se element wise -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * global unary operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * unary_operator(Vector) - * Note: per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprVector< \ - XprUnOp< \ - Fcnl_##NAME, \ - VectorConstRef \ - >, \ - Sz \ -> \ -operator OP (const Vector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(neg, -) -#undef TVMET_DECLARE_MACRO - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - -/** - * \fn operator<<(std::ostream& os, const Vector& rhs) - * \brief Overload operator for i/o - * \ingroup _binary_operator - */ -template -inline -std::ostream& operator<<(std::ostream& os, const Vector& rhs) { - return rhs.print_on(os); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Member operators (arithmetic and bit ops) - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * update_operator(Vector, Vector) - * update_operator(Vector, XprVector) - * Note: per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline Vector& \ -operator OP (Vector& lhs, const Vector& rhs) { \ - return lhs.M_##NAME(rhs); \ -} \ - \ -template \ -inline Vector& \ -operator OP (Vector& lhs, const XprVector& rhs) { \ - return lhs.M_##NAME(rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add_eq, +=) // per se element wise -TVMET_IMPLEMENT_MACRO(sub_eq, -=) // per se element wise -TVMET_IMPLEMENT_MACRO(mul_eq, *=) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(div_eq, /=) // not defined for vectors -} - -#undef TVMET_IMPLEMENT_MACRO - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic operators implemented by functions - * add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * operator(Vector, Vector) - * operator(Vector, XprVector) - * operator(XprVector, Vector) - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - VectorConstRef \ - >, \ - Sz \ -> \ -operator OP (const Vector& lhs, const Vector& rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - VectorConstRef \ - >, \ - Sz \ -> \ -operator OP (const XprVector& lhs, const Vector& rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - VectorConstRef, \ - XprVector \ - >, \ - Sz \ -> \ -operator OP (const Vector& lhs, const XprVector& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +) // per se element wise -TVMET_IMPLEMENT_MACRO(sub, -) // per se element wise -TVMET_IMPLEMENT_MACRO(mul, *) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(div, /) // not defined for vectors -} - -#undef TVMET_IMPLEMENT_MACRO - - -/* - * operator(Vector, POD) - * operator(POD, Vector) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP, POD) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< T, POD >, \ - VectorConstRef, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -operator OP (const Vector& lhs, POD rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< POD, T>, \ - XprLiteral< POD >, \ - VectorConstRef \ - >, \ - Sz \ -> \ -operator OP (POD lhs, const Vector& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +, int) -TVMET_IMPLEMENT_MACRO(sub, -, int) -TVMET_IMPLEMENT_MACRO(mul, *, int) -TVMET_IMPLEMENT_MACRO(div, /, int) - -TVMET_IMPLEMENT_MACRO(add, +, float) -TVMET_IMPLEMENT_MACRO(sub, -, float) -TVMET_IMPLEMENT_MACRO(mul, *, float) -TVMET_IMPLEMENT_MACRO(div, /, float) - -TVMET_IMPLEMENT_MACRO(add, +, double) -TVMET_IMPLEMENT_MACRO(sub, -, double) -TVMET_IMPLEMENT_MACRO(mul, *, double) -TVMET_IMPLEMENT_MACRO(div, /, double) - -#undef TVMET_IMPLEMENT_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * operator(Vector, Sz>, std::complex) - * operator(std::complex, Vector, Sz>) - * Note: operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - VectorConstRef< std::complex, Sz>, \ - XprLiteral< std::complex > \ - >, \ - Sz \ -> \ -operator OP (const Vector, Sz>& lhs, \ - const std::complex& rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, std::complex >, \ - XprLiteral< std::complex >, \ - VectorConstRef< std::complex, Sz> \ - >, \ - Sz \ -> \ -operator OP (const std::complex& lhs, \ - const Vector< std::complex, Sz>& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +) // per se element wise -TVMET_IMPLEMENT_MACRO(sub, -) // per se element wise -TVMET_IMPLEMENT_MACRO(mul, *) // per se element wise -TVMET_IMPLEMENT_MACRO(div, /) // per se element wise - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * global unary operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * unary_operator(Vector) - * Note: per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprUnOp< \ - Fcnl_##NAME, \ - VectorConstRef \ - >, \ - Sz \ -> \ -operator OP (const Vector& rhs) { \ - typedef XprUnOp< \ - Fcnl_##NAME, \ - VectorConstRef \ - > expr_type; \ - return XprVector(expr_type(rhs.constRef())); \ -} - -TVMET_IMPLEMENT_MACRO(neg, -) - -#undef TVMET_IMPLEMENT_MACRO - - -} // namespace tvmet - -#endif // TVMET_VECTOR_OPERATORS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/VectorUnaryFunctions.h b/tvmet-1.7.1/include/tvmet/VectorUnaryFunctions.h deleted file mode 100644 index dbe1a2c59..000000000 --- a/tvmet-1.7.1/include/tvmet/VectorUnaryFunctions.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: VectorUnaryFunctions.h,v 1.9 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_VECTOR_UNARY_FUNCTIONS_H -#define TVMET_VECTOR_UNARY_FUNCTIONS_H - -namespace tvmet { - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - -/* - * unary_function(Vector, Sz>) - */ -#if defined(EIGEN_USE_COMPLEX) -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprVector< \ - XprUnOp< \ - Fcnl_##NAME< std::complex >, \ - VectorConstRef, Sz> \ - >, \ - Sz \ -> \ -NAME(const Vector, Sz>& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(real) -TVMET_DECLARE_MACRO(imag) -TVMET_DECLARE_MACRO(conj) - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - -/* - * unary_function(Vector, Sz>) - */ -#if defined(EIGEN_USE_COMPLEX) -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprVector< \ - XprUnOp< \ - Fcnl_##NAME< std::complex >, \ - VectorConstRef, Sz> \ - >, \ - Sz \ -> \ -NAME(const Vector, Sz>& rhs) { \ - typedef XprUnOp< \ - Fcnl_##NAME< std::complex >, \ - VectorConstRef, Sz> \ - > expr_type; \ - return XprVector(expr_type(rhs.constRef())); \ -} - -TVMET_IMPLEMENT_MACRO(real) -TVMET_IMPLEMENT_MACRO(imag) -TVMET_IMPLEMENT_MACRO(conj) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -} // namespace tvmet - -#endif // TVMET_VECTOR_UNARY_FUNCTIONS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/config.h.cmake b/tvmet-1.7.1/include/tvmet/config.h.cmake deleted file mode 100644 index 707370c45..000000000 --- a/tvmet-1.7.1/include/tvmet/config.h.cmake +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _INCLUDE_TVMET_CONFIG_H -#define _INCLUDE_TVMET_CONFIG_H - -/* Define to 1 if you have the header file. */ -#cmakedefine TVMET_HAVE_SYS_TIME_H 1 - -/* Define to 1 if you have the header file. */ -#cmakedefine TVMET_HAVE_UNISTD_H 1 - -#define _tvmet_restrict @TVMET_RESTRICT_KEYWORD@ - -#define _tvmet_always_inline @TVMET_ALWAYS_INLINE@ - -/* _INCLUDE_TVMET_CONFIG_H */ -#endif diff --git a/tvmet-1.7.1/include/tvmet/loop/CMakeLists.txt b/tvmet-1.7.1/include/tvmet/loop/CMakeLists.txt deleted file mode 100644 index db60d4ce1..000000000 --- a/tvmet-1.7.1/include/tvmet/loop/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -FILE(GLOB tvmet_loop_header_SRCS "*.h") - -INSTALL(FILES - ${tvmet_loop_header_SRCS} - DESTINATION ${INCLUDE_INSTALL_DIR}/loop - ) diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemm.h b/tvmet-1.7.1/include/tvmet/loop/Gemm.h deleted file mode 100644 index 41ec66a64..000000000 --- a/tvmet-1.7.1/include/tvmet/loop/Gemm.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemm.h,v 1.8 2004/06/16 09:30:07 opetzold Exp $ - */ - -#ifndef TVMET_LOOP_GEMM_H -#define TVMET_LOOP_GEMM_H - -namespace tvmet { - -namespace loop { - - -/** - * \class gemm Gemm.h "tvmet/loop/Gemm.h" - * \brief class for matrix-matrix product using loop unrolling. - * using formula - * \f[ - * M_1\,M_2 - * \f] - * \par Example: - * \code - * template - * inline - * void - * prod(const Matrix& lhs, const Matrix& rhs, - * Matrix& dest) - * { - * for (int i = 0; i != Rows1; ++i) { - * for (int j = 0; j != Cols2; ++j) { - * dest(i, j) = tvmet::loop::gemm().prod(lhs, rhs, i, j); - * } - * } - * } - * \endcode - * \note The number of rows of rhs matrix have to be equal to cols of lhs matrix. - * The result is a (Rows1 x Cols2) matrix. - */ -template -class gemm -{ - gemm(const gemm&); - gemm& operator=(const gemm&); - -private: - enum { - count = Cols1, - N = (count+7)/8 - }; - -public: - gemm() { } - -public: - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i, int j) { - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type sum(0); - int k(0); - int n(N); - - // Duff's device - switch(count % 8) { - case 0: do { sum += lhs(i, k) * rhs(k, j); ++k; - case 7: sum += lhs(i, k) * rhs(k, j); ++k; - case 6: sum += lhs(i, k) * rhs(k, j); ++k; - case 5: sum += lhs(i, k) * rhs(k, j); ++k; - case 4: sum += lhs(i, k) * rhs(k, j); ++k; - case 3: sum += lhs(i, k) * rhs(k, j); ++k; - case 2: sum += lhs(i, k) * rhs(k, j); ++k; - case 1: sum += lhs(i, k) * rhs(k, j); ++k; - } while(--n != 0); - } - - return sum; - } -}; - - -} // namespace loop - -} // namespace tvmet - -#endif /* TVMET_LOOP_GEMM_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemmt.h b/tvmet-1.7.1/include/tvmet/loop/Gemmt.h deleted file mode 100644 index 045773072..000000000 --- a/tvmet-1.7.1/include/tvmet/loop/Gemmt.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemmt.h,v 1.5 2004/06/16 09:30:07 opetzold Exp $ - */ - -#ifndef TVMET_LOOP_GEMMT_H -#define TVMET_LOOP_GEMMT_H - -namespace tvmet { - -namespace loop { - - -/** - * \class gemmt Gemmt.h "tvmet/loop/Gemmt.h" - * \brief class for for product matrix-transpose(matrix) operations. - * using formula - * \f[ - * M_1\,M_2^{T} - * \f] - * \par Example: - * \code - * template - * inline - * void - * prod(const Matrix& lhs, const Matrix& rhs, - * Matrix& dest) - * { - * for (int i = 0; i != Rows1; ++i) { - * for (int j = 0; j != Rows2; ++j) { - * dest(i, j) = tvmet::loop::gemmt().prod(lhs, rhs, i, j); - * } - * } - * } - * \endcode - * \note The number of cols of rhs matrix have to be equal to cols of rhs matrix. - * The result is a (Rows1 x Rows2) matrix. - */ -template -class gemmt -{ - gemmt(const gemmt&); - gemmt& operator=(const gemmt&); - -private: - enum { - count = Cols1, - N = (count+7)/8 - }; - -public: - gemmt() { } - -public: - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i, int j) { - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type sum(0); - int k(0); - int n(N); - - // Duff's device - switch(count % 8) { - case 0: do { sum += lhs(i, k) * rhs(j, k); ++k; - case 7: sum += lhs(i, k) * rhs(j, k); ++k; - case 6: sum += lhs(i, k) * rhs(j, k); ++k; - case 5: sum += lhs(i, k) * rhs(j, k); ++k; - case 4: sum += lhs(i, k) * rhs(j, k); ++k; - case 3: sum += lhs(i, k) * rhs(j, k); ++k; - case 2: sum += lhs(i, k) * rhs(j, k); ++k; - case 1: sum += lhs(i, k) * rhs(j, k); ++k; - } while(--n != 0); - } - - return sum; - } -}; - - -} // namespace loop - -} // namespace tvmet - -#endif /* TVMET_LOOP_GEMMT_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemtm.h b/tvmet-1.7.1/include/tvmet/loop/Gemtm.h deleted file mode 100644 index a91caa011..000000000 --- a/tvmet-1.7.1/include/tvmet/loop/Gemtm.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemtm.h,v 1.5 2004/06/16 09:30:07 opetzold Exp $ - */ - -#ifndef TVMET_LOOP_GEMTM_H -#define TVMET_LOOP_GEMTM_H - -namespace tvmet { - -namespace loop { - - -/** - * \class gemtm Gemtm.h "tvmet/loop/Gemtm.h" - * \brief class for matrix-matrix product using loop unrolling. - * using formula - * \f[ - * M_1^{T}\,M_2 - * \f] - * \par Example: - * \code - * template - * inline - * void - * prod(const Matrix& lhs, const Matrix& rhs, - * Matrix& dest) - * { - * for (int i = 0; i != Cols1; ++i) { - * for (int j = 0; j != Cols2; ++j) { - * dest(i, j) = tvmet::loop::gemtm::prod(lhs, rhs, i, j); - * } - * } - * } - * \endcode - * \note The number of rows of rhs matrix have to be equal rows of rhs matrix, - * since lhs matrix 1 is transposed. - * The result is a (Cols1 x Cols2) matrix. - */ -template -class gemtm -{ - gemtm(const gemtm&); - gemtm& operator=(const gemtm&); - -private: - enum { - count = Cols1, - N = (count+7)/8 - }; - -public: - gemtm() { } - -public: - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i, int j) { - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type sum(0); - int k(0); - int n(N); - - // Duff's device - switch(count % 8) { - case 0: do { sum += lhs(k, i) * rhs(k, j); ++k; - case 7: sum += lhs(k, i) * rhs(k, j); ++k; - case 6: sum += lhs(k, i) * rhs(k, j); ++k; - case 5: sum += lhs(k, i) * rhs(k, j); ++k; - case 4: sum += lhs(k, i) * rhs(k, j); ++k; - case 3: sum += lhs(k, i) * rhs(k, j); ++k; - case 2: sum += lhs(k, i) * rhs(k, j); ++k; - case 1: sum += lhs(k, i) * rhs(k, j); ++k; - } while(--n != 0); - } - - return sum; - } -}; - - -} // namespace loop - -} // namespace tvmet - -#endif /* TVMET_LOOP_GEMTM_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemtv.h b/tvmet-1.7.1/include/tvmet/loop/Gemtv.h deleted file mode 100644 index 1584ab6a3..000000000 --- a/tvmet-1.7.1/include/tvmet/loop/Gemtv.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemtv.h,v 1.3 2004/06/16 09:30:07 opetzold Exp $ - */ - -#ifndef TVMET_LOOP_GEMTV_H -#define TVMET_LOOP_GEMTV_H - -namespace tvmet { - -namespace loop { - - -/** - * \class gemtv Gemtv.h "tvmet/loop/Gemtv.h" - * \brief class for transposed(matrix)-vector product using loop unrolling. - * using formula - * \f[ - * M^T\,v - * \f] - * \par Example: - * \code - * template - * inline - * void - * prod(const Matrix& lhs, const Vector& rhs, - * Vector& dest) - * { - * for (int i = 0; i != Cols; ++i) { - * dest(i) = tvmet::loop::gemtv().prod(lhs, rhs, i); - * } - * } - * \endcode - */ -template -class gemtv -{ - gemtv(const gemtv&); - gemtv& operator=(const gemtv&); - -private: - enum { - count = Rows, - N = (count+7)/8 - }; - -public: - gemtv() { } - -public: - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i) { - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type sum(0); - int j(0); - int n(N); - - // Duff's device - switch(count % 8) { - case 0: do { sum += lhs(j, i) * rhs(j); ++j; - case 7: sum += lhs(j, i) * rhs(j); ++j; - case 6: sum += lhs(j, i) * rhs(j); ++j; - case 5: sum += lhs(j, i) * rhs(j); ++j; - case 4: sum += lhs(j, i) * rhs(j); ++j; - case 3: sum += lhs(j, i) * rhs(j); ++j; - case 2: sum += lhs(j, i) * rhs(j); ++j; - case 1: sum += lhs(j, i) * rhs(j); ++j; - } while(--n != 0); - } - - return sum; - } -}; - - -} // namespace loop - -} // namespace tvmet - -#endif /* TVMET_LOOP_GEMTV_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/loop/Gemv.h b/tvmet-1.7.1/include/tvmet/loop/Gemv.h deleted file mode 100644 index 01118a93d..000000000 --- a/tvmet-1.7.1/include/tvmet/loop/Gemv.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemv.h,v 1.3 2004/06/16 09:30:07 opetzold Exp $ - */ - -#ifndef TVMET_LOOP_GEMV_H -#define TVMET_LOOP_GEMV_H - -namespace tvmet { - -namespace loop { - - -/** - * \class gemv Gemv.h "tvmet/loop/Gemv.h" - * \brief class for matrix-vector product using loop unrolling. - * using formula - * \f[ - * M\,v - * \f] - * \par Example: - * \code - * template - * inline - * void - * prod(const Matrix& lhs, const Vector& rhs, - * Vector& dest) - * { - * for (int i = 0; i != Rows; ++i) { - * dest(i) = tvmet::loop::gemv().prod(lhs, rhs, i); - * } - * } - * \endcode - */ -template -class gemv -{ - gemv(const gemv&); - gemv& operator=(const gemv&); - -private: - enum { - count = Cols, - N = (count+7)/8 - }; - -public: - gemv() { } - -public: - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i) { - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type sum(0); - int j(0); - int n(N); - - // Duff's device - switch(count % 8) { - case 0: do { sum += lhs(i, j) * rhs(j); ++j; - case 7: sum += lhs(i, j) * rhs(j); ++j; - case 6: sum += lhs(i, j) * rhs(j); ++j; - case 5: sum += lhs(i, j) * rhs(j); ++j; - case 4: sum += lhs(i, j) * rhs(j); ++j; - case 3: sum += lhs(i, j) * rhs(j); ++j; - case 2: sum += lhs(i, j) * rhs(j); ++j; - case 1: sum += lhs(i, j) * rhs(j); ++j; - } while(--n != 0); - } - - return sum; - } -}; - - -} // namespace loop - -} // namespace tvmet - -#endif /* TVMET_LOOP_GEMV_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/loop/Matrix.h b/tvmet-1.7.1/include/tvmet/loop/Matrix.h deleted file mode 100644 index beea9f5fe..000000000 --- a/tvmet-1.7.1/include/tvmet/loop/Matrix.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Matrix.h,v 1.7 2004/06/27 20:32:55 opetzold Exp $ - */ - -#ifndef TVMET_LOOP_MATRIX_H -#define TVMET_LOOP_MATRIX_H - -namespace tvmet { - -namespace loop { - - -/** - * \class Matrix Matrix.h "tvmet/loop/Matrix.h" - * \brief Loop %Matrix class using expression and loop templates. - */ -template -class Matrix -{ - Matrix(const Matrix&); - Matrix& operator=(const Matrix&); - -public: - Matrix() { } - -public: - /** assign an expression on columns on given row using the functional fn. */ - template - static inline - void assign(E1& lhs, const E2& rhs, const Assign& assign_fn) { - for(int i = 0; i != Rows; ++i) - for(int j = 0; j != Cols; ++j) - assign_fn.apply_on(lhs(i, j), rhs(i, j)); - } -}; - - -} // namespace loop - -} // namespace tvmet - -#endif /* TVMET_LOOP_MATRIX_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/loop/Vector.h b/tvmet-1.7.1/include/tvmet/loop/Vector.h deleted file mode 100644 index 5462ad7a1..000000000 --- a/tvmet-1.7.1/include/tvmet/loop/Vector.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Vector.h,v 1.5 2004/06/27 20:32:55 opetzold Exp $ - */ - -#ifndef TVMET_LOOP_VECTOR_H -#define TVMET_LOOP_VECTOR_H - -namespace tvmet { - -namespace loop { - - -/** - * \class Vector Vector.h "tvmet/loop/Vector.h" - * \brief Loop %Vector class using expression and loop templates. - */ -template -class Vector -{ - Vector(const Vector&); - Vector& operator=(const Vector&); - -public: - Vector() { } - -public: - /** assign an expression on columns on given row using the functional fn. */ - template - static inline - void assign(E1& lhs, const E2& rhs, const Assign& assign_fn) { - for(int i = 0; i != Sz; ++i) - assign_fn.apply_on(lhs(i), rhs(i)); - } -}; - - -} // namespace loop - -} // namespace tvmet - -#endif /* TVMET_LOOP_VECTOR_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/meta/CMakeLists.txt b/tvmet-1.7.1/include/tvmet/meta/CMakeLists.txt deleted file mode 100644 index 0f65437c3..000000000 --- a/tvmet-1.7.1/include/tvmet/meta/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -FILE(GLOB tvmet_meta_header_SRCS "*.h") - -INSTALL(FILES - ${tvmet_meta_header_SRCS} - DESTINATION ${INCLUDE_INSTALL_DIR}/meta - ) diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemm.h b/tvmet-1.7.1/include/tvmet/meta/Gemm.h deleted file mode 100644 index 7aad8e354..000000000 --- a/tvmet-1.7.1/include/tvmet/meta/Gemm.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemm.h,v 1.11 2004/06/17 15:53:12 opetzold Exp $ - */ - -#ifndef TVMET_META_GEMM_H -#define TVMET_META_GEMM_H - -#include - -namespace tvmet { - -namespace meta { - - -/** - * \class gemm Gemm.h "tvmet/meta/Gemm.h" - * \brief Meta class for matrix-matrix operations, like product - * using formula - * \f[ - * M_1\,M_2 - * \f] - * \note The rows of matrix 2 have to be equal to cols of matrix 1. - */ -template -class gemm -{ - gemm(); - gemm(const gemm&); - gemm& operator=(const gemm&); - -private: - enum { - doIt = (K != Cols1 - 1) /**< recursive counter */ - }; - -public: - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i, int j) { - return lhs(i, K) * rhs(K, j) - + gemm::prod(lhs, rhs, i, j); - } -}; - - -/** - * \class gemm<0,0,0,0> Gemm.h "tvmet/meta/Gemm.h" - * \brief gemm Specialized for recursion. - */ -template<> -class gemm<0,0,0,0> -{ - gemm(); - gemm(const gemm&); - gemm& operator=(const gemm&); - -public: - template - static inline - XprNull prod(const E1&, const E2&, int, int) { - return XprNull(); - } -}; - - -} // namespace meta - -} // namespace tvmet - -#endif /* TVMET_META_GEMM_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemmt.h b/tvmet-1.7.1/include/tvmet/meta/Gemmt.h deleted file mode 100644 index a3669be5c..000000000 --- a/tvmet-1.7.1/include/tvmet/meta/Gemmt.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemmt.h,v 1.9 2004/06/17 15:53:12 opetzold Exp $ - */ - -#ifndef TVMET_META_GEMMT_H -#define TVMET_META_GEMMT_H - -#include - -namespace tvmet { - -namespace meta { - - -/** - * \class gemmt Gemmt.h "tvmet/meta/Gemmt.h" - * \brief Meta class for product matrix-transpose(matrix) operations. - * using formula - * \f[ - * M_1\,M_2^{T} - * \f] - * \note The rows of matrix 2 have to be equal to cols of matrix 1. The result - * is a rows1 * cols2 matrix. - */ -template -class gemmt -{ - gemmt(); - gemmt(const gemmt&); - gemmt& operator=(const gemmt&); - -private: - enum { - doIt = (K != Cols2 - 1) /**< recursive counter */ - }; - -public: - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i, int j) { - return lhs(i, K) * rhs(j, K) - + gemmt::prod(lhs, rhs, i, j); - } -}; - - -/** - * \class gemmt<0,0,0,0> Gemmt.h "tvmet/meta/Gemmt.h" - * \brief gemmt Specialized for recursion. - */ -template<> -class gemmt<0,0,0,0> -{ - gemmt(); - gemmt(const gemmt&); - gemmt& operator=(const gemmt&); - -public: - template - static inline - XprNull prod(const E1&, const E2&, int, int) { - return XprNull(); - } -}; - - -} // namespace meta - -} // namespace tvmet - -#endif /* TVMET_META_GEMMT_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemtm.h b/tvmet-1.7.1/include/tvmet/meta/Gemtm.h deleted file mode 100644 index 815175d43..000000000 --- a/tvmet-1.7.1/include/tvmet/meta/Gemtm.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemtm.h,v 1.8 2004/06/17 15:53:12 opetzold Exp $ - */ - -#ifndef TVMET_META_GEMTM_H -#define TVMET_META_GEMTM_H - -#include - -namespace tvmet { - -namespace meta { - - -/** - * \class gemtm Gemtm.h "tvmet/meta/Gemtm.h" - * \brief Meta class for trans(matrix)-matrix operations, like product. - * using formula - * \f[ - * M_1^{T}\,M_2 - * \f] - * \note The number of cols of matrix 2 have to be equal to number of rows of - * matrix 1, since matrix 1 is transposed - the result is a (Cols1 x Cols2) - * matrix. - */ - -template -class gemtm -{ -private: - gemtm(); - gemtm(const gemtm&); - gemtm& operator=(const gemtm&); - -private: - enum { - doIt = (K != Rows1 - 1) /**< recursive counter */ - }; - -public: - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i, int j) { - return lhs(K, i) * rhs(K, j) - + gemtm::prod(lhs, rhs, i, j); - } -}; - - -/** - * \class gemtm<0,0,0,0> Gemtm.h "tvmet/meta/Gemtm.h" - * \brief gemtm Specialized for recursion. - */ -template<> -class gemtm<0,0,0,0> -{ - gemtm(); - gemtm(const gemtm&); - gemtm& operator=(const gemtm&); - -public: - template - static inline - XprNull prod(const E1&, const E2&, int, int) { - return XprNull(); - } -}; - - -} // namespace meta - -} // namespace tvmet - -#endif /* TVMET_META_GEMTM_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemtv.h b/tvmet-1.7.1/include/tvmet/meta/Gemtv.h deleted file mode 100644 index 93c333687..000000000 --- a/tvmet-1.7.1/include/tvmet/meta/Gemtv.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemtv.h,v 1.4 2004/06/17 15:53:12 opetzold Exp $ - */ - -#ifndef TVMET_META_GEMTV_H -#define TVMET_META_GEMTV_H - -#include - -namespace tvmet { - -namespace meta { - - -/** - * \class gemtv Gemtv.h "tvmet/meta/Gemtv.h" - * \brief Meta class for matrix-transpose-vector operations. - * using formula - * \f[ - * M^T\,v - * \f] - */ -template -class gemtv -{ - gemtv(); - gemtv(const gemtv&); - gemtv& operator=(const gemtv&); - -private: - enum { - doIt = I < (Rows-1) /**< recursive counter */ - }; - -public: - /** Meta template for %Matrix lhs %Vector rhs product. */ - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int j) { - return lhs(I, j) * rhs(I) - + gemtv::prod(lhs, rhs, j); - } -}; - - -/** - * \class gemtv<0,0,0> Gemtv.h "tvmet/meta/Gemtv.h" - * \brief gemtv Specialized for recursion - */ -template<> -class gemtv<0,0,0> -{ - gemtv(); - gemtv(const gemtv&); - gemtv& operator=(const gemtv&); - -public: - template - static inline - XprNull prod(const E1&, const E2&, int) { - return XprNull(); - } -}; - - -} // namespace meta - -} // namespace tvmet - -#endif /* TVMET_META_GEMTV_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/meta/Gemv.h b/tvmet-1.7.1/include/tvmet/meta/Gemv.h deleted file mode 100644 index fda045f71..000000000 --- a/tvmet-1.7.1/include/tvmet/meta/Gemv.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Gemv.h,v 1.9 2004/06/17 15:53:12 opetzold Exp $ - */ - -#ifndef TVMET_META_GEMV_H -#define TVMET_META_GEMV_H - -#include - -namespace tvmet { - -namespace meta { - - -/** - * \class gemv Gemv.h "tvmet/meta/Gemv.h" - * \brief Meta class for matrix-vector operations. - * using formula - * \f[ - * M\,v - * \f] - */ -template -class gemv -{ - gemv(); - gemv(const gemv&); - gemv& operator=(const gemv&); - -private: - enum { - doIt = J < (Cols-1) /**< recursive counter */ - }; - -public: - /** Meta template for %Matrix lhs %Vector rhs product. */ - template - static inline - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type - prod(const E1& lhs, const E2& rhs, int i) { - return lhs(i, J) * rhs(J) - + gemv::prod(lhs, rhs, i); - } -}; - - -/** - * \class gemv<0,0,0> Gemv.h "tvmet/meta/Gemv.h" - * \brief gemv Specialized for recursion - */ -template<> -class gemv<0,0,0> -{ - gemv(); - gemv(const gemv&); - gemv& operator=(const gemv&); - -public: - template - static inline - XprNull prod(const E1&, const E2&, int) { - return XprNull(); - } -}; - - -} // namespace meta - -} // namespace tvmet - -#endif /* TVMET_META_GEMV_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/meta/Matrix.h b/tvmet-1.7.1/include/tvmet/meta/Matrix.h deleted file mode 100644 index b6b4014dc..000000000 --- a/tvmet-1.7.1/include/tvmet/meta/Matrix.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Matrix.h,v 1.15 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_META_MATRIX_H -#define TVMET_META_MATRIX_H - -#include -#include - -namespace tvmet { - -namespace meta { - - -/** - * \class Matrix Matrix.h "tvmet/meta/Matrix.h" - * \brief Meta %Matrix class using expression and meta templates. - */ -template -class Matrix -{ - Matrix(); - Matrix(const Matrix&); - Matrix& operator=(const Matrix&); - -private: - enum { - doRows = (M < Rows - 1) ? 1 : 0, /**< recursive counter Rows. */ - doCols = (N < Cols - 1) ? 1 : 0 /**< recursive counter Cols. */ - }; - -public: - /** assign an expression on columns on given row using the functional assign_fn. */ - template - static inline - void assign2(Dest& lhs, const Src& rhs, const Assign& assign_fn) { - assign_fn.apply_on(lhs(M, N), rhs(M, N)); - Matrix::assign2(lhs, rhs, assign_fn); - } - - /** assign an expression on row-wise using the functional assign_fn. */ - template - static inline - void assign(Dest& lhs, const Src& rhs, const Assign& assign_fn) { - Matrix::assign2(lhs, rhs, assign_fn); - Matrix::assign(lhs, rhs, assign_fn); - } - - /** evaluate a given matrix expression, column wise. */ - template - static inline - bool all_elements2(const E& e) { - if(!e(M, N)) return false; - return Matrix::all_elements2(e); - } - - /** evaluate a given matrix expression, row wise. */ - template - static inline - bool all_elements(const E& e) { - if(!Matrix::all_elements2(e) ) return false; - return Matrix::all_elements(e); - } - - /** evaluate a given matrix expression, column wise. */ - template - static inline - bool any_elements2(const E& e) { - if(e(M, N)) return true; - return Matrix::any_elements2(e); - } - - /** evaluate a given matrix expression, row wise. */ - template - static inline - bool any_elements(const E& e) { - if(Matrix::any_elements2(e) ) return true; - return Matrix::any_elements(e); - } - - /** trace a given matrix expression. */ - template - static inline - typename E::value_type - trace(const E& e) { - return e(M, N) - + Matrix::trace(e); - } - -}; - - -/** - * \class Matrix<0, 0, 0, 0> Matrix.h "tvmet/meta/Matrix.h" - * \brief Meta %Matrix specialized for recursion. - */ -template<> -class Matrix<0, 0, 0, 0> -{ - Matrix(); - Matrix(const Matrix&); - Matrix& operator=(const Matrix&); - -public: - template - static inline void assign2(Dest&, const Src&, const Assign&) { } - - template - static inline void assign(Dest&, const Src&, const Assign&) { } - - template - static inline bool all_elements2(const E&) { return true; } - - template - static inline bool all_elements(const E&) { return true; } - - template - static inline bool any_elements2(const E&) { return false; } - - template - static inline bool any_elements(const E&) { return false; } - - template - static inline XprNull trace(const E&) { return XprNull(); } -}; - - -} // namespace meta - -} // namespace tvmet - -#endif /* TVMET_META_MATRIX_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/meta/Vector.h b/tvmet-1.7.1/include/tvmet/meta/Vector.h deleted file mode 100644 index 02888c4cb..000000000 --- a/tvmet-1.7.1/include/tvmet/meta/Vector.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Vector.h,v 1.20 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_META_VECTOR_H -#define TVMET_META_VECTOR_H - -#include -#include - -namespace tvmet { - -/* forwards */ -template class Vector; - - -namespace meta { - - -/** - * \class Vector Vector.h "tvmet/meta/Vector.h" - * \brief Meta %Vector class using expression templates - */ -template -class Vector -{ - Vector(); - Vector(const Vector&); - Vector& operator=(const Vector&); - -private: - enum { - doIt = (K < (Sz-1)) ? 1 : 0 /**< recursive counter */ - }; - -public: - /** assign an expression expr using the functional assign_fn. */ - template - static inline - void assign(Dest& lhs, const Src& rhs, const Assign& assign_fn) { - assign_fn.apply_on(lhs(K), rhs(K)); - meta::Vector::assign(lhs, rhs, assign_fn); - } - - /** build the sum of the vector. */ - template - static inline - typename E::value_type - sum(const E& e) { - return e(K) + meta::Vector::sum(e); - } - - /** build the product of the vector. */ - template - static inline - typename Traits< - typename E::value_type - >::sum_type - product(const E& e) { - return e(K) * meta::Vector::product(e); - } - - /** build the dot product of the vector. */ - template - static inline - typename PromoteTraits< - typename Dest::value_type, - typename Src::value_type - >::value_type - dot(const Dest& lhs, const Src& rhs) { - return lhs(K) * rhs(K) - + meta::Vector::dot(lhs, rhs); - } - - /** check for all elements */ - template - static inline - bool - all_elements(const E& e) { - if(!e(K)) return false; - return meta::Vector::all_elements(e); - } - - /** check for any elements */ - template - static inline - bool - any_elements(const E& e) { - if(e(K)) return true; - return meta::Vector::any_elements(e); - } -}; - - -/** - * \class Vector<0,0> Vector.h "tvmet/meta/Vector.h" - * \brief Meta %Vector Specialized for recursion - */ -template<> -class Vector<0,0> -{ - Vector(); - Vector(const Vector&); - Vector& operator=(const Vector&); - -public: - template - static inline void assign(Dest&, const Src&, const Assign&) { } - - template - static inline XprNull sum(const E&) { return XprNull(); } - - template - static inline XprNull product(const E&) { return XprNull(); } - - template - static inline XprNull dot(const Dest&, const Src&) { return XprNull(); } - - template - static inline bool all_elements(const E&) { return true; } - - template - static inline bool any_elements(const E&) { return false; } -}; - - -} // namespace meta - -} // namespace tvmet - -#endif /* TVMET_META_VECTOR_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/tvmet.h b/tvmet-1.7.1/include/tvmet/tvmet.h deleted file mode 100644 index 9af49498a..000000000 --- a/tvmet-1.7.1/include/tvmet/tvmet.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: tvmet.h,v 1.17 2004/11/04 16:28:32 opetzold Exp $ - */ - -#ifndef TVMET_H -#define TVMET_H - -#include - -// this might not work on all platforms. Specifically, Qt uses a -// slightly different solution in the case when compiler==intel && -// os != windows. See in Qt's source code, the definition of Q_UNUSED -// in src/corelib/global/qglobal.h -#define TVMET_UNUSED(x) (void)x - -/* - * Complexity triggers, compiler and architecture specific. - * If not defined, use defaults. - */ - -/** - * \def TVMET_COMPLEXITY_DEFAULT_TRIGGER - * \brief Trigger for changing the matrix-product strategy. - */ -#if !defined(TVMET_COMPLEXITY_DEFAULT_TRIGGER) -# define TVMET_COMPLEXITY_DEFAULT_TRIGGER 1000 -#endif - -/** - * \def TVMET_COMPLEXITY_M_ASSIGN_TRIGGER - * \brief Trigger for changing the matrix assign strategy. - */ -#if !defined(TVMET_COMPLEXITY_M_ASSIGN_TRIGGER) -# define TVMET_COMPLEXITY_M_ASSIGN_TRIGGER 8*8 -#endif - -/** - * \def TVMET_COMPLEXITY_MM_TRIGGER - * \brief Trigger for changing the matrix-matrix-product strategy. - * One strategy to build the matrix-matrix-product is to use - * meta templates. The other to use looping. - */ -#if !defined(TVMET_COMPLEXITY_MM_TRIGGER) -# define TVMET_COMPLEXITY_MM_TRIGGER 8*8 -#endif - -/** - * \def TVMET_COMPLEXITY_V_ASSIGN_TRIGGER - * \brief Trigger for changing the vector assign strategy. - */ -#if !defined(TVMET_COMPLEXITY_V_ASSIGN_TRIGGER) -# define TVMET_COMPLEXITY_V_ASSIGN_TRIGGER 8 -#endif - -/** - * \def TVMET_COMPLEXITY_MV_TRIGGER - * \brief Trigger for changing the matrix-vector strategy. - * One strategy to build the matrix-vector-product is to use - * meta templates. The other to use looping. - */ -#if !defined(TVMET_COMPLEXITY_MV_TRIGGER) -# define TVMET_COMPLEXITY_MV_TRIGGER 8*8 -#endif - -/*********************************************************************** - * Namespaces - ***********************************************************************/ - -/** - * \namespace std - * \brief Imported ISO/IEC 14882:1998 functions from std namespace. - */ - -/** - * \namespace tvmet - * \brief The namespace for the Tiny %Vector %Matrix using Expression Templates Libary. - */ - -/** - * \namespace tvmet::meta - * \brief Meta stuff inside here. - */ - -/** - * \namespace tvmet::loop - * \brief Loop stuff inside here. - */ - -/** - * \namespace tvmet::element_wise - * \brief Operators inside this namespace does elementwise operations. - */ - -/** - * \namespace tvmet::util - * \brief Miscellaneous utility functions used. - */ - - -/*********************************************************************** - * forwards - ***********************************************************************/ -#if defined(EIGEN_USE_COMPLEX) -namespace std { - template class complex; -} -#endif - - -/*********************************************************************** - * other stuff - ***********************************************************************/ -#include - - -#endif // TVMET_H - -// Local Variables: -// mode:C++ -// End: -// LocalWords: gnuc gcc's icc's std diff --git a/tvmet-1.7.1/include/tvmet/util/General.h b/tvmet-1.7.1/include/tvmet/util/General.h deleted file mode 100644 index f6247d4b8..000000000 --- a/tvmet-1.7.1/include/tvmet/util/General.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: General.h,v 1.9 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_UTIL_GENERAL_H -#define TVMET_UTIL_GENERAL_H - - -/** forward */ -namespace tvmet { -template class Matrix; -template class Vector; -} - -namespace tvmet { - -namespace util { - -/* - * \defgroup _util_function - * \brief Usefull utility functions - */ - -/** - * \fn Gemm(const Matrix& m1, const Matrix& m2, Matrix& m3) - * \brief General matrix matrix multiplication using loops. - * \ingroup _util_function - */ -template -inline -void -Gemm(const Matrix& m1, const Matrix& m2, - Matrix& m3) -{ - for (int i = 0; i < Rows; ++i) { - for (int j = 0; j < Cols; ++j) { - T sum(0); - for (int k = 0; k < Cols; ++k) { - sum += m1(i,k) * m2(k,j); - } - m3(i,j) = sum; - } - } -} - - -/** - * \fn Gemv(const Matrix& m, const Vector& v, Vector& v2) - * \brief General matrix vector multiplication using loops. - * \ingroup _util_function - */ -template -inline -void -Gemv(const Matrix& m, const Vector& v, - Vector& v2) -{ - for (int i = 0; i < Rows; ++i){ - v2(i) = T(0); // clean up before use - for (int j = 0; j < Cols; ++j) { - v2(i) += m(i,j) * v(j); - } - } -} - - -/** - * \fn Gevvmul(const Vector& v1, const Vector& v2, Vector& v3) - * \brief General vector vector elementwise multiplication using loop. - * \ingroup _util_function - */ -template -inline -void -Gevvmul(const Vector& v1, const Vector& v2, - Vector& v3) -{ - for(int i = 0; i < Sz; ++i) - v3(i) = v1(i) * v2(i); -} - - -/** - * \fn Gevvadd(const Vector& v1, const Vector& v2, Vector& v3) - * \brief General vector vector elementwise multiplication using loop. - * \ingroup _util_function - */ -template -inline -void -Gevvadd(const Vector& v1, const Vector& v2, - Vector& v3) -{ - for(int i = 0; i < Sz; ++i) - v3(i) = v1(i) + v2(i); -} - -} // namespace util - -} // namespace tvmet - -#endif // TVMET_UTIL_GENERAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/util/Incrementor.h b/tvmet-1.7.1/include/tvmet/util/Incrementor.h deleted file mode 100644 index 809865de7..000000000 --- a/tvmet-1.7.1/include/tvmet/util/Incrementor.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Incrementor.h,v 1.3 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_UTIL_INCREMENTOR_H -#define TVMET_UTIL_INCREMENTOR_H - -namespace tvmet { - -namespace util { - - -/** - * \class Incrementor Incrementor.h "tvmet/util/Incrementor.h" - * \brief A simple incrementor class. - * The start value is given at construction time. After - * each access the class increments the internal counter. - * \ingroup _util_function - * - * \par Example: - * \code - * #include - * - * using namespace tvmet; - * - * ... - * - * std::generate(m1.begin(), m1.end(), - * util::Incrementor()); - * \endcode - */ -template -struct Incrementor -{ - Incrementor(T start=0) : m_inc(start) { } - T operator()() { m_inc+=1; return m_inc; } - -private: - T m_inc; -}; - - -#if defined(EIGEN_USE_COMPLEX) -/** - * \class Incrementor< std::complex > Incrementor.h "tvmet/util/Incrementor.h" - * \brief Specialized Incrementor class. - * \ingroup _util_function - */ -template -struct Incrementor< std::complex > { - Incrementor(const std::complex& start=0) - : m_inc(start) { } - std::complex operator()() { - m_inc += std::complex(1,1); - return m_inc; - } -private: - std::complex m_inc; -}; -#endif // defined(EIGEN_USE_COMPLEX) - - -} // namespace util - -} // namespace tvmet - -#endif // TVMET_UTIL_INCREMENTOR_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/BinOperator.h b/tvmet-1.7.1/include/tvmet/xpr/BinOperator.h deleted file mode 100644 index 11ade5eb3..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/BinOperator.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: BinOperator.h,v 1.15 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_BINOPERATOR_H -#define TVMET_XPR_BINOPERATOR_H - -#include - -namespace tvmet { - - -/** - * \class XprBinOp BinOperator.h "tvmet/xpr/BinOperator.h" - * \brief Binary operators working on two sub expressions. - * - * On acessing using the index operator() the binary operation will be - * evaluated at compile time. - */ -template -class XprBinOp - : public TvmetBase< XprBinOp > -{ - XprBinOp(); - XprBinOp& operator=(const XprBinOp&); - -public: - typedef typename BinOp::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_lhs = E1::ops, - ops_rhs = E2::ops, - ops = 2 * (ops_lhs + ops_rhs) // lhs op rhs - }; - -public: - /** Constructor for two expressions. */ - explicit XprBinOp(const E1& lhs, const E2& rhs) - : m_lhs(lhs), m_rhs(rhs) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprBinOp(const XprBinOp& e) - : m_lhs(e.m_lhs), m_rhs(e.m_rhs) - { } -#endif - - /** Index operator, evaluates the expression inside. */ - value_type operator()(int i) const { - return BinOp::apply_on(m_lhs(i), m_rhs(i)); - } - - /** Index operator for arrays/matrices */ - value_type operator()(int i, int j) const { - return BinOp::apply_on(m_lhs(i, j), m_rhs(i, j)); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprBinOp[O="<< ops << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<" - << std::endl; - BinOp::print_xpr(os, l); - m_lhs.print_xpr(os, l); - m_rhs.print_xpr(os, l); - os << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E1 m_lhs; - const E2 m_rhs; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_BINOPERATOR_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/CMakeLists.txt b/tvmet-1.7.1/include/tvmet/xpr/CMakeLists.txt deleted file mode 100644 index 06cf78c0c..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -FILE(GLOB tvmet_xpr_header_SRCS "*.h") - -INSTALL(FILES - ${tvmet_xpr_header_SRCS} - DESTINATION ${INCLUDE_INSTALL_DIR}/xpr - ) diff --git a/tvmet-1.7.1/include/tvmet/xpr/Eval.h b/tvmet-1.7.1/include/tvmet/xpr/Eval.h deleted file mode 100644 index 7ed92161b..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/Eval.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Eval.h,v 1.9 2003/11/30 18:35:17 opetzold Exp $ - */ - -#ifndef TVMET_XPR_EVAL_H -#define TVMET_XPR_EVAL_H - -namespace tvmet { - - -/** - * \class XprEval Eval.h "tvmet/xpr/Eval.h" - * \brief evaluate the expression - * - * Since we can't overwrite the ? operator we have to write a wrapper - * for expression like return v1>v2 ? true : false - */ -template -class XprEval - : public TvmetBase< XprEval > -{ -public: - typedef E1 expr1_type; - typedef E2 expr2_type; - typedef E3 expr3_type; - - typedef typename expr2_type::value_type value2_type; - typedef typename expr3_type::value_type value3_type; - - typedef typename - PromoteTraits::value_type value_type; - -public: - /** Complexity Counter */ - enum { - ops_expr1 = E1::ops, - ops_expr2 = E2::ops, - ops_expr3 = E3::ops, - ops = ops_expr1 // only (e1 op e2) are evaluated - }; - -private: - XprEval(); - XprEval& operator=(const XprEval&); - -public: - /** Constructor */ - explicit XprEval(const expr1_type& e1, const expr2_type& e2, const expr3_type& e3) - : m_expr1(e1), m_expr2(e2), m_expr3(e3) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprEval(const XprEval& rhs) - : m_expr1(rhs.m_expr1), m_expr2(rhs.m_expr2), m_expr3(rhs.m_expr3) - { } -#endif - -public: //access - /** index operator for vectors. */ - value_type operator()(int i) const { - return m_expr1(i) ? m_expr2(i) : m_expr3(i); - } - - /** index operator for matrizes. */ - value_type operator()(int i, int j) const { - return m_expr1(i, j) ? m_expr2(i, j) : m_expr3(i, j); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprEval[" << ops << ", (" - << ops_expr1 << ", " << ops_expr2 << ", " << ops_expr3 << ")]<" - << std::endl; - m_expr1.print_xpr(os, l); - m_expr2.print_xpr(os, l); - m_expr3.print_xpr(os, l); - os << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const expr1_type m_expr1; - const expr2_type m_expr2; - const expr3_type m_expr3; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_EVAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/Identity.h b/tvmet-1.7.1/include/tvmet/xpr/Identity.h deleted file mode 100644 index 7b13fa6b6..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/Identity.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * $Id: Identity.h,v 1.3 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_IDENTITY_H -#define TVMET_XPR_IDENTITY_H - - -namespace tvmet { - - -/** - * \class XprIdentity Identity.h "tvmet/xpr/Identity.h" - * \brief Expression for the identity matrix. - * - * This expression doesn't hold any other expression, it - * simply returns 1 or 0 depends where the row and column - * element excess is done. - * - * \since release 1.6.0 - * \sa identity - */ -template -struct XprIdentity - : public TvmetBase< XprIdentity > -{ - XprIdentity& operator=(const XprIdentity&); - -public: - typedef T value_type; - -public: - /** Complexity counter. */ - enum { - ops_assign = Rows * Cols, - ops = ops_assign - }; - -public: - /** access by index. */ - value_type operator()(int i, int j) const { - return i==j ? 1 : 0; - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprIdentity[O="<< ops << ")]<" - << std::endl; - os << IndentLevel(l) - << typeid(T).name() << "," - << "R=" << Rows << ", C=" << Cols << std::endl; - os << IndentLevel(--l) << ">" - << ((l != 0) ? "," : "") << std::endl; - } -}; - - -} // namespace tvmet - - -#endif // TVMET_XPR_IDENTITY_H - - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/Literal.h b/tvmet-1.7.1/include/tvmet/xpr/Literal.h deleted file mode 100644 index 85d9c79c0..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/Literal.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Literal.h,v 1.9 2003/11/30 18:35:17 opetzold Exp $ - */ - -#ifndef TVMET_XPR_LITERAL_H -#define TVMET_XPR_LITERAL_H - -namespace tvmet { - - -/** - * \class XprLiteral Literal.h "tvmet/xpr/Literal.h" - * \brief Specify literals like scalars into the expression. - * This expression is used for vectors and matrices - the - * decision is done by the access operator. - */ -template -class XprLiteral - : public TvmetBase< XprLiteral > -{ - XprLiteral(); - XprLiteral& operator=(const XprLiteral&); - -public: - typedef T value_type; - -public: - /** Complexity counter. */ - enum { - ops = 1 - }; - -public: - /** Constructor by value for literals . */ - explicit XprLiteral(value_type value) - : m_data(value) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprLiteral(const XprLiteral& e) - : m_data(e.m_data) - { } -#endif - - /** Index operator, gives the value for vectors. */ - value_type operator()(int) const { return m_data; } - - /** Index operator for arrays/matrices. */ - value_type operator()(int, int) const { return m_data; } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) << "XprLiteral[O=" << ops << "]," << std::endl; - } - -private: - const value_type m_data; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_LITERAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MMProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MMProduct.h deleted file mode 100644 index 0d165ea8c..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MMProduct.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MMProduct.h,v 1.20 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MMPRODUCT_H -#define TVMET_XPR_MMPRODUCT_H - -#include - -#include -#include - -namespace tvmet { - - -/** - * \class XprMMProduct MMProduct.h "tvmet/xpr/MMProduct.h" - * \brief Expression for matrix-matrix product. - * Using formula: - * \f[ - * M_1\,M_2 - * \f] - * \note The Rows2 has to be equal to Cols1. - */ -template -class XprMMProduct - : public TvmetBase< XprMMProduct > -{ -private: - XprMMProduct(); - XprMMProduct& operator=(const XprMMProduct&); - -public: - typedef typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_lhs = E1::ops, - ops_rhs = E2::ops, - M = Rows1 * Cols1 * Cols2, - N = Rows1 * (Cols1 - 1) * Cols2, - ops_plus = M * Traits::ops_plus, - ops_muls = N * Traits::ops_muls, - ops = ops_plus + ops_muls, - use_meta = Rows1*Cols2 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false - }; - -public: - /** Constructor. */ - explicit XprMMProduct(const E1& lhs, const E2& rhs) - : m_lhs(lhs), m_rhs(rhs) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMMProduct(const XprMMProduct& e) - : m_lhs(e.m_lhs), m_rhs(e.m_rhs) - { } -#endif - -private: - /** Wrapper for meta gemm. */ - static inline - value_type do_gemm(dispatch, const E1& lhs, const E2& rhs, int i, int j) { - return meta::gemm::prod(lhs, rhs, i, j); - } - - /** Wrapper for loop gemm. */ - static inline - value_type do_gemm(dispatch, const E1& lhs, const E2& rhs, int i, int j) { - return loop::gemm::prod(lhs, rhs, i, j); - } - -public: - /** index operator for arrays/matrices */ - value_type operator()(int i, int j) const { - assert((i < Rows1) && (j < Cols2)); - return do_gemm(dispatch(), m_lhs, m_rhs, i, j); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMMProduct[" - << (use_meta ? "M" : "L") << ", O=" << ops - << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<" - << std::endl; - m_lhs.print_xpr(os, l); - os << IndentLevel(l) - << "R1=" << Rows1 << ", C1=" << Cols1 << ",\n"; - m_rhs.print_xpr(os, l); - os << IndentLevel(l) - << "C2=" << Cols2 << ",\n"; - os << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E1 m_lhs; - const E2 m_rhs; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_MMPRODUCT_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MMProductTransposed.h b/tvmet-1.7.1/include/tvmet/xpr/MMProductTransposed.h deleted file mode 100644 index d869e3af8..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MMProductTransposed.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MMProductTransposed.h,v 1.16 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MMPRODUCT_TRANSPOSED_H -#define TVMET_XPR_MMPRODUCT_TRANSPOSED_H - -#include - -#include -#include - -namespace tvmet { - - -/** - * \class XprMMProductTransposed MMProductTransposed.h "tvmet/xpr/MMProductTransposed.h" - * \brief Expression for transpose(matrix-matrix product). - * Using formula: - * \f[ - * (M_1\,M_2)^T - * \f] - * \note The Rows2 has to be equal to Cols1. - * The result is a (Cols2 x Rows1) matrix. - */ -template -class XprMMProductTransposed - : public TvmetBase< XprMMProductTransposed > -{ -private: - XprMMProductTransposed(); - XprMMProductTransposed& operator=(const XprMMProductTransposed&); - -public: - typedef typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_lhs = E1::ops, - ops_rhs = E2::ops, - M = Rows1 * Cols1 * Cols2, - N = Rows1 * (Cols1-1) * Cols2, - ops_plus = M * Traits::ops_plus, - ops_muls = N * Traits::ops_muls, - ops = ops_plus + ops_muls, - use_meta = Cols2*Rows1 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false - }; - -public: - /** Constructor. */ - explicit XprMMProductTransposed(const E1& lhs, const E2& rhs) - : m_lhs(lhs), m_rhs(rhs) { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMMProductTransposed(const XprMMProductTransposed& e) - : m_lhs(e.m_lhs), m_rhs(e.m_rhs) - { } -#endif - -private: - /** Wrapper for meta gemm. */ - static inline - value_type do_gemm(dispatch, const E1& lhs, const E2& rhs, int i, int j) { - return meta::gemm::prod(lhs, rhs, i, j); - } - - /** Wrapper for loop gemm. */ - static inline - value_type do_gemm(dispatch, const E1& lhs, const E2& rhs, int i, int j) { - return loop::gemm::prod(lhs, rhs, i, j); - } - -public: - /** index operator for arrays/matrices */ - value_type operator()(int i, int j) const { - assert((i < Cols2) && (j < Rows1)); - return do_gemm(dispatch(), m_lhs, m_rhs, j, i); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMMProductTransposed[" - << (use_meta ? "M" : "L") << ", O=" << ops - << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<" - << std::endl; - m_lhs.print_xpr(os, l); - os << IndentLevel(l) - << "R1=" << Rows1 << ", C1=" << Cols1 << ",\n"; - m_rhs.print_xpr(os, l); - os << IndentLevel(l) - << "C2=" << Cols2 << ",\n" - << IndentLevel(l) - << "\n" - << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E1 m_lhs; - const E2 m_rhs; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_MMPRODUCT_TRANSPOSED_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MMtProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MMtProduct.h deleted file mode 100644 index 71c6dda63..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MMtProduct.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MMtProduct.h,v 1.16 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MMTPRODUCT_H -#define TVMET_XPR_MMTPRODUCT_H - -#include - -#include -#include - -namespace tvmet { - - -/** - * \class XprMMtProduct MMtProduct.h "tvmet/xpr/MMtProduct.h" - * \brief Expression for matrix-matrix product. - * Using formula: - * \f[ - * M_1\,M_2^T - * \f] - * \note The number of cols of rhs matrix have to be equal to cols of rhs matrix. - * The result is a (Rows1 x Rows2) matrix. - */ -template -class XprMMtProduct - : public TvmetBase< XprMMtProduct > -{ -private: - XprMMtProduct(); - XprMMtProduct& operator=(const XprMMtProduct&); - -public: - typedef typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_lhs = E1::ops, - ops_rhs = E2::ops, - Rows2 = Cols1, - M = Rows1 * Cols1 * Rows1, - N = Rows1 * (Cols1 - 1) * Rows2, - ops_plus = M * Traits::ops_plus, - ops_muls = N * Traits::ops_muls, - ops = ops_plus + ops_muls, - use_meta = Rows1*Rows2 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false - }; - -public: - /** Constructor. */ - explicit XprMMtProduct(const E1& lhs, const E2& rhs) - : m_lhs(lhs), m_rhs(rhs) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMMtProduct(const XprMMtProduct& e) - : m_lhs(e.m_lhs), m_rhs(e.m_rhs) - { } -#endif - -private: - /** Wrapper for meta gemm. */ - static inline - value_type do_gemmt(dispatch, const E1& lhs, const E2& rhs, int i, int j) { - return meta::gemmt::prod(lhs, rhs, i, j); - } - - /** Wrapper for loop gemm. */ - static inline - value_type do_gemmt(dispatch, const E1& lhs, const E2& rhs, int i, int j) { - return loop::gemmt::prod(lhs, rhs, i, j); - } - -public: - /** index operator for arrays/matrices */ - value_type operator()(int i, int j) const { - assert((i < Rows1) && (j < Rows2)); - return do_gemmt(dispatch(), m_lhs, m_rhs, i, j); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMMtProduct[" - << (use_meta ? "M" : "L") << ", O=" << ops - << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<" - << std::endl; - m_lhs.print_xpr(os, l); - os << IndentLevel(l) - << "R1=" << Rows1 << ", C1=" << Cols1 << ",\n"; - m_rhs.print_xpr(os, l); - os << IndentLevel(l) - << "C2=" << Cols2 << ",\n" - << "\n" - << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E1 m_lhs; - const E2 m_rhs; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_MMTPRODUCT_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MVProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MVProduct.h deleted file mode 100644 index 0b9202f15..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MVProduct.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MVProduct.h,v 1.17 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MVPRODUCT_H -#define TVMET_XPR_MVPRODUCT_H - -#include - -#include -#include - -namespace tvmet { - - -/** - * \class XprMVProduct MVProduct.h "tvmet/xpr/MVProduct.h" - * \brief Expression for matrix-vector product - * using formula - * \f[ - * M\,v - * \f] - */ -template -class XprMVProduct - : public TvmetBase< XprMVProduct > -{ - XprMVProduct(); - XprMVProduct& operator=(const XprMVProduct&); - -public: - typedef typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_lhs = E1::ops, - ops_rhs = E2::ops, - M = Rows * Cols, - N = Rows * (Cols - 1), - ops_plus = M * Traits::ops_plus, - ops_muls = N * Traits::ops_muls, - ops = ops_plus + ops_muls, - use_meta = Rows*Cols < TVMET_COMPLEXITY_MV_TRIGGER ? true : false - }; - -public: - /** Constructor. */ - explicit XprMVProduct(const E1& lhs, const E2& rhs) - : m_lhs(lhs), m_rhs(rhs) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMVProduct(const XprMVProduct& e) - : m_lhs(e.m_lhs), m_rhs(e.m_rhs) - { } -#endif - -private: - /** Wrapper for meta gemm. */ - static inline - value_type do_gemv(dispatch, const E1& lhs, const E2& rhs, int j) { - return meta::gemv::prod(lhs, rhs, j); - } - - /** Wrapper for loop gemm. */ - static inline - value_type do_gemv(dispatch, const E1& lhs, const E2& rhs, int j) { - return loop::gemv::prod(lhs, rhs, j); - } - -public: - /** index operator, returns the expression by index. This is the vector - style since a matrix*vector gives a vector. */ - value_type operator()(int j) const { - assert(j < Rows); - return do_gemv(dispatch(), m_lhs, m_rhs, j); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMVProduct[" - << (use_meta ? "M" : "L") << ", O=" << ops - << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<" - << std::endl; - m_lhs.print_xpr(os, l); - os << IndentLevel(l) - << "R=" << Rows << ", C=" << Cols << ",\n"; - m_rhs.print_xpr(os, l); - os << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E1 m_lhs; - const E2 m_rhs; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_MVPRODUCT_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/Matrix.h b/tvmet-1.7.1/include/tvmet/xpr/Matrix.h deleted file mode 100644 index d10176f89..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/Matrix.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Matrix.h,v 1.22 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MATRIX_H -#define TVMET_XPR_MATRIX_H - -#include - -#include -#include - -namespace tvmet { - - -/* forwards */ -template class Matrix; - -/** - * \class XprMatrix Matrix.h "tvmet/xpr/Matrix.h" - * \brief Represents the expression for vectors at any node in the parse tree. - * - * Specifically, XprMatrix is the class that wraps the expression, and the - * expression itself is represented by the template parameter E. The - * class XprMatrix is known as an anonymizing expression wrapper because - * it can hold any subexpression of arbitrary complexity, allowing - * clients to work with any expression by holding on to it via the - * wrapper, without having to know the name of the type object that - * actually implements the expression. - * \note leave the CCtors non-explicit to allow implicit type conversation. - */ -template -class XprMatrix - : public TvmetBase< XprMatrix > -{ - XprMatrix(); - XprMatrix& operator=(const XprMatrix&); - -public: - /** Complexity counter. */ - enum { - ops_assign = Rows * Cols, - ops = E::ops, - use_meta = ops_assign < TVMET_COMPLEXITY_M_ASSIGN_TRIGGER ? true : false - }; - -public: - typedef typename E::value_type value_type; - -public: - /** Constructor. */ - explicit XprMatrix(const E& e) - : m_expr(e) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMatrix(const XprMatrix& rhs) - : m_expr(rhs.m_expr) - { } -#endif - - /** access by index. */ - value_type operator()(int i, int j) const { - assert((i < Rows) && (j < Cols)); - return m_expr(i, j); - } - -private: - /** Wrapper for meta assign. */ - template - static inline - void do_assign(dispatch, Dest& dest, const Src& src, const Assign& assign_fn) { - meta::Matrix::assign(dest, src, assign_fn); - } - - /** Wrapper for loop assign. */ - template - static inline - void do_assign(dispatch, Dest& dest, const Src& src, const Assign& assign_fn) { - loop::Matrix::assign(dest, src, assign_fn); - } - -public: - /** assign this expression to Matrix dest. */ - template - void assign_to(Dest& dest, const Assign& assign_fn) const { - /* here is a way for caching, since each complex 'Node' - is of type XprMatrix. */ - do_assign(dispatch(), dest, *this, assign_fn); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMatrix[" - << (use_meta ? "M" : "L") << ", O=" << ops << "]<" - << std::endl; - m_expr.print_xpr(os, l); - os << IndentLevel(l) - << "R=" << Rows << ", C=" << Cols << std::endl; - os << IndentLevel(--l) << ">" - << ((l != 0) ? "," : "") << std::endl; - } - -private: - const E m_expr; -}; - - -} // namespace tvmet - -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#endif // TVMET_XPR_MATRIX_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixCol.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixCol.h deleted file mode 100644 index 47e2554b8..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MatrixCol.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixCol.h,v 1.15 2004/09/16 09:14:18 opetzold Exp $ - */ - -#include - -#ifndef TVMET_XPR_MATRIX_COL_H -#define TVMET_XPR_MATRIX_COL_H - -namespace tvmet { - - -/** - * \class XprMatrixCol MatrixCol.h "tvmet/xpr/MatrixCol.h" - * \brief Expression on matrix used for access on the column vector. - */ -template -class XprMatrixCol - : public TvmetBase< XprMatrixCol > -{ - XprMatrixCol(); - XprMatrixCol& operator=(const XprMatrixCol&); - -public: - typedef typename E::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_expr = E::ops, - ops = ops_expr/Cols // equal Row accesses - }; - -public: - /** Constructor. */ - explicit XprMatrixCol(const E& e, int no) - : m_expr(e), m_col(no) - { - assert(no < Cols); - } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMatrixCol(const XprMatrixCol& e) - : m_expr(e.m_expr), m_col(e.m_col) - { } -#endif - - value_type operator()(int i) const { - assert(i < Rows); - return m_expr(i, m_col); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMatrixCol[O=" << ops << ", (O=" << ops_expr << ")]<" - << std::endl; - m_expr.print_xpr(os, l); - os << IndentLevel(l) - << "R=" << Rows << ", C=" << Cols << std::endl - << IndentLevel(--l) << ">" - << ((l != 0) ? "," : "") << std::endl; - } - -private: - const E m_expr; - const int m_col; -}; - - -} - -#endif // TVMET_XPR_MATRIX_COL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixDiag.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixDiag.h deleted file mode 100644 index 4a8a080ac..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MatrixDiag.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixDiag.h,v 1.13 2004/09/16 09:14:18 opetzold Exp $ - */ - -#include - -#ifndef TVMET_XPR_MATRIX_DIAG_H -#define TVMET_XPR_MATRIX_DIAG_H - -namespace tvmet { - - -/** - * \class XprMatrixDiag MatrixDiag.h "tvmet/xpr/MatrixDiag.h" - * \brief Expression on matrix used for access on the diagonal vector. - */ -template -class XprMatrixDiag - : public TvmetBase< XprMatrixDiag > -{ - XprMatrixDiag(); - XprMatrixDiag& operator=(const XprMatrixDiag&); - -public: - typedef typename E::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_expr = E::ops, - ops = ops_expr/Sz - }; - -public: - /** Constructor. */ - explicit XprMatrixDiag(const E& e) - : m_expr(e) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMatrixDiag(const XprMatrixDiag& e) - : m_expr(e.m_expr) - { } -#endif - - /** index operator for arrays/matrizes */ - value_type operator()(int i) const { - assert(i < Sz); - return m_expr(i, i); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMatrixDiag[O=" << ops << ", (O=" << ops_expr << ")]<" - << std::endl; - m_expr.print_xpr(os, l); - os << IndentLevel(l) - << "Sz=" << Sz << std::endl - << IndentLevel(--l) << ">" - << ((l != 0) ? "," : "") << std::endl; - } - -private: - const E m_expr; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_MATRIX_DIAG_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixFunctions.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixFunctions.h deleted file mode 100644 index 54f02c08d..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MatrixFunctions.h +++ /dev/null @@ -1,736 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixFunctions.h,v 1.39 2004/07/06 05:49:22 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MATRIX_FUNCTIONS_H -#define TVMET_XPR_MATRIX_FUNCTIONS_H - -namespace tvmet { - - -/* forwards */ -template class Matrix; -template class Vector; -template class XprVector; -template class XprMatrixTranspose; -template class XprMatrixDiag; -template class XprMatrixRow; -template class XprMatrixCol; - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Matrix arithmetic functions add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * function(XprMatrix, XprMatrix) - */ -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -NAME (const XprMatrix& lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add) // per se element wise -TVMET_DECLARE_MACRO(sub) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(mul) // not defined for matrizes - TVMET_DECLARE_MACRO(div) // not defined for matrizes -} - -#undef TVMET_DECLARE_MACRO - - -/* - * function(XprMatrix, POD) - * function(POD, XprMatrix) - * Note: - operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, POD) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprLiteral< POD > \ - >, \ - Rows, Cols \ -> \ -NAME (const XprMatrix& lhs, \ - POD rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< POD, typename E::value_type>, \ - XprLiteral< POD >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -NAME (POD lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, int) -TVMET_DECLARE_MACRO(sub, int) -TVMET_DECLARE_MACRO(mul, int) -TVMET_DECLARE_MACRO(div, int) - -TVMET_DECLARE_MACRO(add, float) -TVMET_DECLARE_MACRO(sub, float) -TVMET_DECLARE_MACRO(mul, float) -TVMET_DECLARE_MACRO(div, float) - -TVMET_DECLARE_MACRO(add, double) -TVMET_DECLARE_MACRO(sub, double) -TVMET_DECLARE_MACRO(mul, double) -TVMET_DECLARE_MACRO(div, double) - -#undef TVMET_DECLARE_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * function(XprMatrix, complex) - * function(complex, XprMatrix) - * Note: - operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME >, \ - XprMatrix, \ - XprLiteral< std::complex > \ - >, \ - Rows, Cols \ -> \ -NAME (const XprMatrix& lhs, \ - const std::complex& rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, typename E::value_type>, \ - XprLiteral< std::complex >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -NAME (const std::complex& lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add) -TVMET_DECLARE_MACRO(sub) -TVMET_DECLARE_MACRO(mul) -TVMET_DECLARE_MACRO(div) - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix prod( ... ) functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprMatrix< - XprMMProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 - >, - Rows1, Cols2 // return Dim -> -prod(const XprMatrix& lhs, - const XprMatrix& rhs) _tvmet_always_inline; - - -template -XprMatrix< - XprMMProductTransposed< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 // M2(Cols1, Cols2) - >, - Cols2, Rows1 // return Dim -> -trans_prod(const XprMatrix& lhs, - const XprMatrix& rhs) _tvmet_always_inline; - - -template // Rows2 = Rows1 -XprMatrix< - XprMtMProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 // M2(Rows1, Cols2) - >, - Cols1, Cols2 // return Dim -> -MtM_prod(const XprMatrix& lhs, - const XprMatrix& rhs) _tvmet_always_inline; - - -template // Cols2 = Cols1 -XprMatrix< - XprMMtProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols1 // M2(Rows2, Cols1) - >, - Rows1, Rows2 // return Dim -> -MMt_prod(const XprMatrix& lhs, - const XprMatrix& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix-vector specific prod( ... ) functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprVector< - XprMVProduct< - XprMatrix, Rows, Cols, - XprVector - >, - Rows -> -prod(const XprMatrix& lhs, - const XprVector& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -XprMatrix< - XprMatrixTranspose< - XprMatrix - >, - Cols, Rows -> -trans(const XprMatrix& rhs) _tvmet_always_inline; - - -#if 0 // XXX needs declaration of meta::Matrix::trace -template -typename Traits::sum_type -trace(const XprMatrix& m)_tvmet_always_inline; -#endif - - -template -XprVector< - XprMatrixRow< - XprMatrix, - Rows, Cols - >, - Cols -> -row(const XprMatrix& m, - int no) _tvmet_always_inline; - - -template -XprVector< - XprMatrixCol< - XprMatrix, - Rows, Cols - >, - Rows -> -col(const XprMatrix& m, int no) _tvmet_always_inline; - - -template -XprVector< - XprMatrixDiag< - XprMatrix, - Sz - >, - Sz -> -diag(const XprMatrix& m) _tvmet_always_inline; - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Matrix arithmetic functions add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * function(XprMatrix, XprMatrix) - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -NAME (const XprMatrix& lhs, \ - const XprMatrix& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprMatrix \ - > expr_type; \ - return XprMatrix(expr_type(lhs, rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(add) // per se element wise -TVMET_IMPLEMENT_MACRO(sub) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(mul) // not defined for matrizes - TVMET_IMPLEMENT_MACRO(div) // not defined for matrizes -} - -#undef TVMET_IMPLEMENT_MACRO - - -/* - * function(XprMatrix, POD) - * function(POD, XprMatrix) - * Note: - operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, POD) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprLiteral< POD > \ - >, \ - Rows, Cols \ -> \ -NAME (const XprMatrix& lhs, POD rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprLiteral< POD > \ - > expr_type; \ - return XprMatrix( \ - expr_type(lhs, XprLiteral< POD >(rhs))); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< POD, typename E::value_type>, \ - XprLiteral< POD >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -NAME (POD lhs, const XprMatrix& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< POD, typename E::value_type>, \ - XprLiteral< POD >, \ - XprMatrix \ - > expr_type; \ - return XprMatrix( \ - expr_type(XprLiteral< POD >(lhs), rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(add, int) -TVMET_IMPLEMENT_MACRO(sub, int) -TVMET_IMPLEMENT_MACRO(mul, int) -TVMET_IMPLEMENT_MACRO(div, int) - -TVMET_IMPLEMENT_MACRO(add, float) -TVMET_IMPLEMENT_MACRO(sub, float) -TVMET_IMPLEMENT_MACRO(mul, float) -TVMET_IMPLEMENT_MACRO(div, float) - -TVMET_IMPLEMENT_MACRO(add, double) -TVMET_IMPLEMENT_MACRO(sub, double) -TVMET_IMPLEMENT_MACRO(mul, double) -TVMET_IMPLEMENT_MACRO(div, double) - -#undef TVMET_IMPLEMENT_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * function(XprMatrix, complex) - * function(complex, XprMatrix) - * Note: - operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME >, \ - XprMatrix, \ - XprLiteral< std::complex > \ - >, \ - Rows, Cols \ -> \ -NAME (const XprMatrix& lhs, \ - const std::complex& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME >, \ - XprMatrix, \ - XprLiteral< std::complex > \ - > expr_type; \ - return XprMatrix( \ - expr_type(lhs, XprLiteral< std::complex >(rhs))); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, typename E::value_type>, \ - XprLiteral< std::complex >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -NAME (const std::complex& lhs, \ - const XprMatrix& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< std::complex, typename E::value_type>, \ - XprLiteral< std::complex >, \ - XprMatrix \ - > expr_type; \ - return XprMatrix( \ - expr_type(XprLiteral< std::complex >(lhs), rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(add) -TVMET_IMPLEMENT_MACRO(sub) -TVMET_IMPLEMENT_MACRO(mul) -TVMET_IMPLEMENT_MACRO(div) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix prod( ... ) functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn prod(const XprMatrix& lhs, const XprMatrix& rhs) - * \brief Evaluate the product of two XprMatrix. - * Perform on given Matrix M1 and M2: - * \f[ - * M_1\,M_2 - * \f] - * \note The numer of Rows2 has to be equal to Cols1. - * \ingroup _binary_function - */ -template -inline -XprMatrix< - XprMMProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 - >, - Rows1, Cols2 // return Dim -> -prod(const XprMatrix& lhs, const XprMatrix& rhs) { - typedef XprMMProduct< - XprMatrix, Rows1, Cols1, - XprMatrix, Cols2 - > expr_type; - return XprMatrix(expr_type(lhs, rhs)); -} - - -/** - * \fn trans_prod(const XprMatrix& lhs, const XprMatrix& rhs) - * \brief Function for the trans(matrix-matrix-product) - * Perform on given Matrix M1 and M2: - * \f[ - * (M_1\,M_2)^T - * \f] - * \note The numer of Rows2 has to be equal to Cols1. - * \ingroup _binary_function - */ -template -inline -XprMatrix< - XprMMProductTransposed< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 // M2(Cols1, Cols2) - >, - Cols2, Rows1 // return Dim -> -trans_prod(const XprMatrix& lhs, const XprMatrix& rhs) { - typedef XprMMProductTransposed< - XprMatrix, Rows1, Cols1, - XprMatrix, Cols2 - > expr_type; - return XprMatrix(expr_type(lhs, rhs)); -} - - -/** - * \fn MtM_prod(const XprMatrix& lhs, const XprMatrix& rhs) - * \brief Function for the trans(matrix)-matrix-product. - * using formula - * \f[ - * M_1^{T}\,M_2 - * \f] - * \note The number of cols of matrix 2 have to be equal to number of rows of - * matrix 1, since matrix 1 is trans - the result is a (Cols1 x Cols2) - * matrix. - * \ingroup _binary_function - */ -template // Rows2 = Rows1 -inline -XprMatrix< - XprMtMProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 // M2(Rows1, Cols2) - >, - Cols1, Cols2 // return Dim -> -MtM_prod(const XprMatrix& lhs, const XprMatrix& rhs) { - typedef XprMtMProduct< - XprMatrix, Rows1, Cols1, - XprMatrix, Cols2 - > expr_type; - return XprMatrix(expr_type(lhs, rhs)); -} - - -/** - * \fn MMt_prod(const XprMatrix& lhs, const XprMatrix& rhs) - * \brief Function for the matrix-trans(matrix)-product. - * \ingroup _binary_function - * \note The cols2 has to be equal to cols1. - */ -template // Cols2 = Cols1 -inline -XprMatrix< - XprMMtProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols1 // M2(Rows2, Cols1) - >, - Rows1, Rows2 // return Dim -> -MMt_prod(const XprMatrix& lhs, const XprMatrix& rhs) { - typedef XprMMtProduct< - XprMatrix, Rows1, Cols1, - XprMatrix, Cols1 - > expr_type; - return XprMatrix(expr_type(lhs, rhs)); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix-vector specific prod( ... ) functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn prod(const XprMatrix& lhs, const XprVector& rhs) - * \brief Evaluate the product of XprMatrix and XprVector. - * \ingroup _binary_function - */ -template -inline -XprVector< - XprMVProduct< - XprMatrix, Rows, Cols, - XprVector - >, - Rows -> -prod(const XprMatrix& lhs, const XprVector& rhs) { - typedef XprMVProduct< - XprMatrix, Rows, Cols, - XprVector - > expr_type; - return XprVector(expr_type(lhs, rhs)); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn trans(const XprMatrix& rhs) - * \brief Transpose an expression matrix. - * \ingroup _unary_function - */ -template -inline -XprMatrix< - XprMatrixTranspose< - XprMatrix - >, - Cols, Rows -> -trans(const XprMatrix& rhs) { - typedef XprMatrixTranspose< - XprMatrix - > expr_type; - return XprMatrix(expr_type(rhs)); -} - - -#if 0 // XXX needs declaration of meta::Matrix::trace -/* - * \fn trace(const XprMatrix& m) - * \brief Compute the trace of a square matrix. - * \ingroup _unary_function - * - * Simply compute the trace of the given matrix as: - * \f[ - * \sum_{k = 0}^{Sz-1} m(k, k) - * \f] - */ -template -inline -typename Traits::sum_type -trace(const XprMatrix& m) { - return meta::Matrix::trace(m); -} -#endif - - -/** - * \fn row(const XprMatrix& m, int no) - * \brief Returns a row vector of the given matrix. - * \ingroup _binary_function - */ -template -inline -XprVector< - XprMatrixRow< - XprMatrix, - Rows, Cols - >, - Cols -> -row(const XprMatrix& m, int no) { - typedef XprMatrixRow< - XprMatrix, - Rows, Cols - > expr_type; - - return XprVector(expr_type(m, no)); -} - - -/** - * \fn col(const XprMatrix& m, int no) - * \brief Returns a column vector of the given matrix. - * \ingroup _binary_function - */ -template -inline -XprVector< - XprMatrixCol< - XprMatrix, - Rows, Cols - >, - Rows -> -col(const XprMatrix& m, int no) { - typedef XprMatrixCol< - XprMatrix, - Rows, Cols - > expr_type; - - return XprVector(expr_type(m, no)); -} - - -/** - * \fn diag(const XprMatrix& m) - * \brief Returns the diagonal vector of the given square matrix. - * \ingroup _unary_function - */ -template -inline -XprVector< - XprMatrixDiag< - XprMatrix, - Sz - >, - Sz -> -diag(const XprMatrix& m) { - typedef XprMatrixDiag< - XprMatrix, - Sz> expr_type; - - return XprVector(expr_type(m)); -} - - -} // namespace tvmet - -#endif // TVMET_XPR_MATRIX_FUNCTIONS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixOperators.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixOperators.h deleted file mode 100644 index 6f31d88f4..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MatrixOperators.h +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixOperators.h,v 1.19 2005/03/09 09:48:03 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MATRIX_OPERATORS_H -#define TVMET_XPR_MATRIX_OPERATORS_H - -namespace tvmet { - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Matrix arithmetic operators implemented by functions - * add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * operator(const XprMatrix& lhs, const XprMatrix& rhs) - * - * Note: operations +,-,*,/ are per se element wise. Further more, - * element wise operations make sense only for matrices of the same - * size [varg]. - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprMatrix \ - >, \ - Rows1, Cols1 \ -> \ -operator OP (const XprMatrix& lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +) // per se element wise -TVMET_DECLARE_MACRO(sub, -) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(mul, *) // see as prod() - TVMET_DECLARE_MACRO(div, /) // not defined for matrizes, must be element_wise -} -#undef TVMET_DECLARE_MACRO - - -/* - * operator(XprMatrix, POD) - * operator(POD, XprMatrix) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP, POD) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprLiteral< POD > \ - >, \ - Rows, Cols \ -> \ -operator OP (const XprMatrix& lhs, \ - POD rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprLiteral< POD >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -operator OP (POD lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +, int) -TVMET_DECLARE_MACRO(sub, -, int) -TVMET_DECLARE_MACRO(mul, *, int) -TVMET_DECLARE_MACRO(div, /, int) - -TVMET_DECLARE_MACRO(add, +, float) -TVMET_DECLARE_MACRO(sub, -, float) -TVMET_DECLARE_MACRO(mul, *, float) -TVMET_DECLARE_MACRO(div, /, float) - -TVMET_DECLARE_MACRO(add, +, double) -TVMET_DECLARE_MACRO(sub, -, double) -TVMET_DECLARE_MACRO(mul, *, double) -TVMET_DECLARE_MACRO(div, /, double) - -#undef TVMET_DECLARE_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * operator(XprMatrix, complex<>) - * operator(complex<>, XprMatrix) - * Note: operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME >, \ - XprMatrix, \ - XprLiteral< std::complex > \ - >, \ - Rows, Cols \ -> \ -operator OP (const XprMatrix& lhs, \ - const std::complex& rhs) _tvmet_always_inline; \ - \ -template \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, typename E::value_type>, \ - XprLiteral< std::complex >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -operator OP (const std::complex& lhs, \ - const XprMatrix& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +) -TVMET_DECLARE_MACRO(sub, -) -TVMET_DECLARE_MACRO(mul, *) -TVMET_DECLARE_MACRO(div, /) - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific operator*() = prod() operations - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn operator*(const XprMatrix& lhs, const XprMatrix& rhs) - * \brief Evaluate the product of two XprMatrix. - * \ingroup _binary_operator - * \sa prod(XprMatrix lhs, XprMatrix rhs) - */ -template -XprMatrix< - XprMMProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 // M2(Cols1, Cols2) - >, - Rows1, Cols2 -> -operator*(const XprMatrix& lhs, - const XprMatrix& rhs) _tvmet_always_inline; - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix-vector specific prod( ... ) operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn operator*(const XprMatrix& lhs, const XprVector& rhs) - * \brief Evaluate the product of XprMatrix and XprVector. - * \ingroup _binary_operator - * \sa prod(XprMatrix lhs, XprVector rhs) - */ -template -XprVector< - XprMVProduct< - XprMatrix, Rows, Cols, - XprVector - >, - Rows -> -operator*(const XprMatrix& lhs, - const XprVector& rhs) _tvmet_always_inline; - - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * global unary operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * unary_operator(const XprMatrix& m) - * Note: per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -XprMatrix< \ - XprUnOp< \ - Fcnl_##NAME, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -operator OP (const XprMatrix& m) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(neg, -) - -#undef TVMET_DECLARE_MACRO - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Matrix arithmetic operators implemented by functions - * add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * operator(const XprMatrix& lhs, const XprMatrix& rhs) - * - * Note: operations +,-,*,/ are per se element wise. Further more, - * element wise operations make sense only for matrices of the same - * size [varg]. - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprMatrix \ - >, \ - Rows1, Cols1 \ -> \ -operator OP (const XprMatrix& lhs, \ - const XprMatrix& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +) // per se element wise -TVMET_IMPLEMENT_MACRO(sub, -) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(mul, *) // see as prod() - TVMET_IMPLEMENT_MACRO(div, /) // not defined for matrizes, must be element_wise -} -#undef TVMET_IMPLEMENT_MACRO - - -/* - * operator(XprMatrix, POD) - * operator(POD, XprMatrix) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP, POD) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprMatrix, \ - XprLiteral< POD > \ - >, \ - Rows, Cols \ -> \ -operator OP (const XprMatrix& lhs, POD rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprLiteral< POD >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -operator OP (POD lhs, const XprMatrix& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +, int) -TVMET_IMPLEMENT_MACRO(sub, -, int) -TVMET_IMPLEMENT_MACRO(mul, *, int) -TVMET_IMPLEMENT_MACRO(div, /, int) - -TVMET_IMPLEMENT_MACRO(add, +, float) -TVMET_IMPLEMENT_MACRO(sub, -, float) -TVMET_IMPLEMENT_MACRO(mul, *, float) -TVMET_IMPLEMENT_MACRO(div, /, float) - -TVMET_IMPLEMENT_MACRO(add, +, double) -TVMET_IMPLEMENT_MACRO(sub, -, double) -TVMET_IMPLEMENT_MACRO(mul, *, double) -TVMET_IMPLEMENT_MACRO(div, /, double) - -#undef TVMET_IMPLEMENT_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * operator(XprMatrix, complex<>) - * operator(complex<>, XprMatrix) - * Note: operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME >, \ - XprMatrix, \ - XprLiteral< std::complex > \ - >, \ - Rows, Cols \ -> \ -operator OP (const XprMatrix& lhs, \ - const std::complex& rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprMatrix< \ - XprBinOp< \ - Fcnl_##NAME, typename E::value_type>, \ - XprLiteral< std::complex >, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -operator OP (const std::complex& lhs, \ - const XprMatrix& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +) -TVMET_IMPLEMENT_MACRO(sub, -) -TVMET_IMPLEMENT_MACRO(mul, *) -TVMET_IMPLEMENT_MACRO(div, /) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix specific operator*() = prod() operations - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn operator*(const XprMatrix& lhs, const XprMatrix& rhs) - * \brief Evaluate the product of two XprMatrix. - * \ingroup _binary_operator - * \sa prod(XprMatrix lhs, XprMatrix rhs) - */ -template -inline -XprMatrix< - XprMMProduct< - XprMatrix, Rows1, Cols1, // M1(Rows1, Cols1) - XprMatrix, Cols2 // M2(Cols1, Cols2) - >, - Rows1, Cols2 -> -operator*(const XprMatrix& lhs, const XprMatrix& rhs) { - return prod(lhs, rhs); -} - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * matrix-vector specific prod( ... ) operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn operator*(const XprMatrix& lhs, const XprVector& rhs) - * \brief Evaluate the product of XprMatrix and XprVector. - * \ingroup _binary_operator - * \sa prod(XprMatrix lhs, XprVector rhs) - */ -template -inline -XprVector< - XprMVProduct< - XprMatrix, Rows, Cols, - XprVector - >, - Rows -> -operator*(const XprMatrix& lhs, const XprVector& rhs) { - return prod(lhs, rhs); -} - - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * global unary operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * unary_operator(const XprMatrix& m) - * Note: per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprMatrix< \ - XprUnOp< \ - Fcnl_##NAME, \ - XprMatrix \ - >, \ - Rows, Cols \ -> \ -operator OP (const XprMatrix& m) { \ - typedef XprUnOp< \ - Fcnl_##NAME, \ - XprMatrix \ - > expr_type; \ - return XprMatrix(expr_type(m)); \ -} - -TVMET_IMPLEMENT_MACRO(neg, -) - -#undef TVMET_IMPLEMENT_MACRO - - -} // namespace tvmet - -#endif // TVMET_XPR_MATRIX_OPERATORS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixRow.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixRow.h deleted file mode 100644 index d8a796858..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MatrixRow.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixRow.h,v 1.14 2004/09/16 09:14:18 opetzold Exp $ - */ - -#include - -#ifndef TVMET_XPR_MATRIX_ROW_H -#define TVMET_XPR_MATRIX_ROW_H - -namespace tvmet { - - -/** - * \class XprMatrixRow MatrixRow.h "tvmet/xpr/MatrixRow.h" - * \brief Expression on matrix used for access on the row vector. - */ -template -class XprMatrixRow - : public TvmetBase< XprMatrixRow > -{ - XprMatrixRow(); - XprMatrixRow& operator=(const XprMatrixRow&); - -public: - typedef typename E::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_expr = E::ops, - ops = ops_expr/Rows // equal Col accesses - }; - -public: - /** Constructor. */ - explicit XprMatrixRow(const E& e, int no) - : m_expr(e), m_row(no) - { - assert(no < Rows); - } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMatrixRow(const XprMatrixRow& rhs) - : m_expr(rhs.m_expr), m_row(rhs.m_row) - { } -#endif - - value_type operator()(int j) const { - assert(j < Cols); - return m_expr(m_row, j); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMatrixRow[O=" << ops << ", (O=" << ops_expr << ")]<" - << std::endl; - m_expr.print_xpr(os, l); - os << IndentLevel(l) - << "R=" << Rows << ", C=" << Cols << std::endl - << IndentLevel(--l) << ">" - << ((l != 0) ? "," : "") << std::endl; - } - -private: - const E m_expr; - const int m_row; -}; - - -} - -#endif // TVMET_XPR_MATRIX_ROW_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MatrixTranspose.h b/tvmet-1.7.1/include/tvmet/xpr/MatrixTranspose.h deleted file mode 100644 index c51df513e..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MatrixTranspose.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MatrixTranspose.h,v 1.11 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MATRIX_TRANSPOSE_H -#define TVMET_XPR_MATRIX_TRANSPOSE_H - -namespace tvmet { - - -/** - * \class XprMatrixTranspose MatrixTranspose.h "tvmet/xpr/MatrixTranspose.h" - * \brief Expression for transpose matrix - */ -template -class XprMatrixTranspose - : public TvmetBase< XprMatrixTranspose > -{ - XprMatrixTranspose(); - XprMatrixTranspose& operator=(const XprMatrixTranspose&); - -public: - typedef typename E::value_type value_type; - - /** Complexity counter. */ - enum { - ops_expr = E::ops, - ops = 1 * ops_expr - }; - -public: - /** Constructor. */ - explicit XprMatrixTranspose(const E& e) - : m_expr(e) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMatrixTranspose(const XprMatrixTranspose& e) - : m_expr(e.m_expr) - { } -#endif - - /** index operator for arrays/matrices. This simple swap the index - access for transpose. */ - value_type operator()(int i, int j) const { return m_expr(j, i); } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMatrixTranspose[O=" << ops << ", (O=" << ops_expr << ")]<" - << std::endl; - m_expr.print_xpr(os, l); - os << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E m_expr; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_MATRIX_TRANSPOSE_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MtMProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MtMProduct.h deleted file mode 100644 index 6d657d086..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MtMProduct.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MtMProduct.h,v 1.15 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MTMPRODUCT_H -#define TVMET_XPR_MTMPRODUCT_H - -#include - -#include -#include - -namespace tvmet { - - -/** - * \class XprMtMProduct MtMProduct.h "tvmet/xpr/MtMProduct.h" - * \brief Expression for product of transposed(matrix)-matrix product. - * using formula - * \f[ - * M_1^{T}\,M_2 - * \f] - * \note The number of rows of rhs matrix have to be equal rows of rhs matrix, - * since lhs matrix 1 is transposed. - * The result is a (Cols1 x Cols2) matrix. - */ -template -class XprMtMProduct - : public TvmetBase< XprMtMProduct > -{ -private: - XprMtMProduct(); - XprMtMProduct& operator=(const XprMtMProduct&); - -public: - typedef typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_lhs = E1::ops, - ops_rhs = E2::ops, - M = Rows1 * Cols1 * Cols2, - N = (Rows1-1) * Cols1 * Cols2, - ops_plus = M * Traits::ops_plus, - ops_muls = N * Traits::ops_muls, - ops = ops_plus + ops_muls, - use_meta = Cols1*Cols2 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false - }; - -public: - /** Constructor. */ - explicit XprMtMProduct(const E1& lhs, const E2& rhs) - : m_lhs(lhs), m_rhs(rhs) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMtMProduct(const XprMtMProduct& e) - : m_lhs(e.m_lhs), m_rhs(e.m_rhs) { } -#endif - -private: - /** Wrapper for meta gemm. */ - static inline - value_type do_gemtm(dispatch, const E1& lhs, const E2& rhs, int i, int j) { - return meta::gemtm::prod(lhs, rhs, i, j); - } - - /** Wrapper for loop gemm. */ - static inline - value_type do_gemtm(dispatch, const E1& lhs, const E2& rhs, int i, int j) { - return loop::gemtm::prod(lhs, rhs, i, j); - } - -public: - /** index operator for arrays/matrices */ - value_type operator()(int i, int j) const { - assert((i < Cols1) && (j < Cols2)); - return do_gemtm(dispatch(), m_lhs, m_rhs, i, j); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMtMProduct[" - << (use_meta ? "M" : "L") << ", O=" << ops - << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<" - << std::endl; - m_lhs.print_xpr(os, l); - os << IndentLevel(l) - << "R1=" << Rows1 << ", C1=" << Cols1 << ",\n"; - m_rhs.print_xpr(os, l); - os << IndentLevel(l) - << "C2=" << Cols2 << ",\n" - << IndentLevel(l) - << "\n" - << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E1 m_lhs; - const E2 m_rhs; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_MTMPRODUCT_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/MtVProduct.h b/tvmet-1.7.1/include/tvmet/xpr/MtVProduct.h deleted file mode 100644 index a50bacc97..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/MtVProduct.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: MtVProduct.h,v 1.10 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_MTVPRODUCT_H -#define TVMET_XPR_MTVPRODUCT_H - -#include - -#include -#include - -namespace tvmet { - - -/** - * \class XprMtVProduct MtVProduct.h "tvmet/xpr/MtVProduct.h" - * \brief Expression for matrix-transposed vector product - * using formula - * \f[ - * M^T\,v - * \f] - */ -template -class XprMtVProduct - : public TvmetBase< XprMtVProduct > -{ - XprMtVProduct(); - XprMtVProduct& operator=(const XprMtVProduct&); - -public: - typedef typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_lhs = E1::ops, - ops_rhs = E2::ops, - M = Cols * Rows, - N = Cols * (Rows - 1), - ops_plus = M * Traits::ops_plus, - ops_muls = N * Traits::ops_muls, - ops = ops_plus + ops_muls, - use_meta = Rows*Cols < TVMET_COMPLEXITY_MV_TRIGGER ? true : false - }; - -public: - /** Constructor. */ - explicit XprMtVProduct(const E1& lhs, const E2& rhs) - : m_lhs(lhs), m_rhs(rhs) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprMtVProduct(const XprMtVProduct& e) - : m_lhs(e.m_lhs), m_rhs(e.m_rhs) - { } -#endif - -private: - /** Wrapper for meta gemm. */ - static inline - value_type do_gemtv(dispatch, const E1& lhs, const E2& rhs, int i) { - return meta::gemtv::prod(lhs, rhs, i); - } - - /** Wrapper for loop gemm. */ - static inline - value_type do_gemtv(dispatch, const E1& lhs, const E2& rhs, int i) { - return loop::gemtv::prod(lhs, rhs, i); - } - -public: - /** index operator, returns the expression by index. This is the vector - style since a matrix*vector gives a vector. */ - value_type operator()(int j) const { - assert(j < Cols); - return do_gemtv(dispatch(), m_lhs, m_rhs, j); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprMtVProduct[O=" << ops << ", (O1=" << ops_lhs << ", O2=" << ops_rhs << ")]<" - << std::endl; - m_lhs.print_xpr(os, l); - os << IndentLevel(l) - << "R=" << Rows << ", C=" << Cols << ",\n"; - m_rhs.print_xpr(os, l); - os << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E1 m_lhs; - const E2 m_rhs; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_MTVPRODUCT_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/Null.h b/tvmet-1.7.1/include/tvmet/xpr/Null.h deleted file mode 100644 index 68396f445..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/Null.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Null.h,v 1.7 2003/11/30 18:35:17 opetzold Exp $ - */ - -#ifndef TVMET_XPR_NULL_H -#define TVMET_XPR_NULL_H - -namespace tvmet { - - -/** - * \class XprNull Null.h "tvmet/xpr/Null.h" - * \brief Null object design pattern - */ -class XprNull - : public TvmetBase< XprNull > -{ - XprNull& operator=(const XprNull&); - -public: - explicit XprNull() { } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l) << "XprNull[O=0]" << std::endl; - } -}; - - -#define TVMET_BINARY_OPERATOR(OP) \ -template< class T > \ -inline \ -T operator OP (const T& lhs, XprNull) { return lhs; } - -TVMET_BINARY_OPERATOR(+) -TVMET_BINARY_OPERATOR(-) -TVMET_BINARY_OPERATOR(*) -TVMET_BINARY_OPERATOR(/) - -#undef TVMET_BINARY_OPERATOR - - -} // namespace tvmet - -#endif // TVMET_XPR_NULL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/UnOperator.h b/tvmet-1.7.1/include/tvmet/xpr/UnOperator.h deleted file mode 100644 index 3c4b87f49..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/UnOperator.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: UnOperator.h,v 1.13 2003/11/30 18:35:17 opetzold Exp $ - */ - -#ifndef TVMET_XPR_UNOPERATOR_H -#define TVMET_XPR_UNOPERATOR_H - -namespace tvmet { - - -/** - * \class XprUnOp UnOperator.h "tvmet/xpr/UnOperator.h" - * \brief Unary operator working on one subexpression. - * - * Using the access operator() the unary operation will be evaluated. - */ -template -class XprUnOp - : public TvmetBase< XprUnOp > -{ - XprUnOp(); - XprUnOp& operator=(const XprUnOp&); - -public: - typedef typename UnOp::value_type value_type; - -public: - /** Complexity counter. */ - enum { - ops_expr = E::ops, - ops = 1 * ops_expr - }; - -public: - /** Constructor for an expressions. */ - explicit XprUnOp(const E& e) - : m_expr(e) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprUnOp(const XprUnOp& e) - : m_expr(e.m_expr) - { } -#endif - - /** Index operator, evaluates the expression inside. */ - value_type operator()(int i) const { - return UnOp::apply_on(m_expr(i)); - } - - /** index operator for arrays/matrices. */ - value_type operator()(int i, int j) const { - return UnOp::apply_on(m_expr(i, j)); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprUnOp[O="<< ops << ", (O=" << ops_expr << ")]<" - << std::endl; - UnOp::print_xpr(os, l); - m_expr.print_xpr(os, l); - os << IndentLevel(--l) - << ">," << std::endl; - } - -private: - const E m_expr; -}; - - -} // namespace tvmet - -#endif // TVMET_XPR_UNOPERATOR_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/Vector.h b/tvmet-1.7.1/include/tvmet/xpr/Vector.h deleted file mode 100644 index 65db2a1f1..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/Vector.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: Vector.h,v 1.24 2004/09/16 09:14:18 opetzold Exp $ - */ - -#ifndef TVMET_XPR_VECTOR_H -#define TVMET_XPR_VECTOR_H - -#include -#include - -namespace tvmet { - - -/* forwards */ -template class Vector; - -/** - * \class XprVector Vector.h "tvmet/xpr/Vector.h" - * \brief Represents the expression for vectors at any node in the parse tree. - * - * Specifically, XprVector is the class that wraps the expression, and the - * expression itself is represented by the template parameter E. The - * class XprVector is known as an anonymizing expression wrapper because - * it can hold any subexpression of arbitrary complexity, allowing - * clients to work with any expression by holding on to it via the - * wrapper, without having to know the name of the type object that - * actually implements the expression. - * \note leave the Ctors non-explicit to allow implicit type conversation. - */ -template -class XprVector : public TvmetBase< XprVector > -{ - XprVector(); - XprVector& operator=(const XprVector&); - -public: - typedef typename E::value_type value_type; - -public: - /** Dimensions. */ - enum { - Size = Sz /**< The size of the vector. */ - }; - -public: - /** Complexity counter */ - enum { - ops_assign = Size, - ops = E::ops, - use_meta = ops_assign < TVMET_COMPLEXITY_V_ASSIGN_TRIGGER ? true : false - }; - -public: - /** Constructor. */ - explicit XprVector(const E& e) - : m_expr(e) - { } - - /** Copy Constructor. Not explicit! */ -#if defined(TVMET_OPTIMIZE_XPR_MANUAL_CCTOR) - XprVector(const XprVector& e) - : m_expr(e.m_expr) - { } -#endif - - /** const index operator for vectors. */ - value_type operator()(int i) const { - assert(i < Size); - return m_expr(i); - } - - /** const index operator for vectors. */ - value_type operator[](int i) const { - return this->operator()(i); - } - -private: - /** Wrapper for meta assign. */ - template - static inline - void do_assign(dispatch, Dest& dest, const Src& src, const Assign& assign_fn) { - meta::Vector::assign(dest, src, assign_fn); - } - - /** Wrapper for loop assign. */ - template - static inline - void do_assign(dispatch, Dest& dest, const Src& src, const Assign& assign_fn) { - loop::Vector::assign(dest, src, assign_fn); - } - -public: - /** assign this expression to Vector dest. */ - template - void assign_to(Dest& dest, const Assign& assign_fn) const { - /* here is a way for caching, since each complex 'Node' - is of type XprVector. */ - do_assign(dispatch(), dest, *this, assign_fn); - } - -public: // debugging Xpr parse tree - void print_xpr(std::ostream& os, int l=0) const { - os << IndentLevel(l++) - << "XprVector[" - << (use_meta ? "M" : "L") << ", O=" << ops << "]<" - << std::endl; - m_expr.print_xpr(os, l); - os << IndentLevel(l) - << "Sz=" << Size << std::endl; - os << IndentLevel(--l) << ">" - << ((l != 0) ? "," : "") << std::endl; - } - -private: - const E m_expr; -}; - - -} // namespace tvmet - -#include - -#include -#include -#include - -#include -#include -#include - -#endif // TVMET_XPR_VECTOR_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/VectorFunctions.h b/tvmet-1.7.1/include/tvmet/xpr/VectorFunctions.h deleted file mode 100644 index 172ed7ab2..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/VectorFunctions.h +++ /dev/null @@ -1,655 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: VectorFunctions.h,v 1.17 2005/03/25 07:11:29 opetzold Exp $ - */ - -#ifndef TVMET_XPR_VECTOR_FUNCTIONS_H -#define TVMET_XPR_VECTOR_FUNCTIONS_H - -namespace tvmet { - - -/* forwards */ -template class Vector; - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic functions add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * function(XprVector, XprVector) - */ -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - XprVector \ - >, \ - Sz \ -> \ -NAME (const XprVector& lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add) // per se element wise -TVMET_DECLARE_MACRO(sub) // per se element wise -TVMET_DECLARE_MACRO(mul) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(div) // not defined for vectors -} - -#undef TVMET_DECLARE_MACRO - - -/* - * function(XprVector, POD) - * function(POD, XprVector) - * Note: - operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, POD) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< typename E::value_type, POD >, \ - XprVector, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -NAME (const XprVector& lhs, \ - POD rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< POD, typename E::value_type>, \ - XprLiteral< POD >, \ - XprVector \ - >, \ - Sz \ -> \ -NAME (POD lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, int) -TVMET_DECLARE_MACRO(sub, int) -TVMET_DECLARE_MACRO(mul, int) -TVMET_DECLARE_MACRO(div, int) - -TVMET_DECLARE_MACRO(add, float) -TVMET_DECLARE_MACRO(sub, float) -TVMET_DECLARE_MACRO(mul, float) -TVMET_DECLARE_MACRO(div, float) - -TVMET_DECLARE_MACRO(add, double) -TVMET_DECLARE_MACRO(sub, double) -TVMET_DECLARE_MACRO(mul, double) -TVMET_DECLARE_MACRO(div, double) - -#undef TVMET_DECLARE_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * function(XprMatrix, complex) - * function(complex, XprMatrix) - * Note: - operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_DECLARE_MACRO(NAME) \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< typename E::value_type, std::complex >, \ - XprVector, \ - XprLiteral< std::complex > \ - >, \ - Sz \ -> \ -NAME (const XprVector& lhs, \ - const std::complex& rhs) _tvmet_always_inline; \ - \ -template \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, typename E::value_type>, \ - XprLiteral< std::complex >, \ - XprVector \ - >, \ - Sz \ -> \ -NAME (const std::complex& lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add) -TVMET_DECLARE_MACRO(sub) -TVMET_DECLARE_MACRO(mul) -TVMET_DECLARE_MACRO(div) - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * vector specific functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -template -typename Traits::sum_type -sum(const XprVector& v) _tvmet_always_inline; - - -template -typename Traits::sum_type -product(const XprVector& v) _tvmet_always_inline; - - -template -typename PromoteTraits< - typename E1::value_type, - typename E2::value_type ->::value_type -dot(const XprVector& lhs, - const XprVector& rhs) _tvmet_always_inline; - - -template -typename PromoteTraits::value_type -dot(const Vector& lhs, - const XprVector& rhs) _tvmet_always_inline; - - -template -typename PromoteTraits::value_type -dot(const XprVector& lhs, - const Vector& rhs) _tvmet_always_inline; - - -template -Vector< - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type, - 3 -> -cross(const XprVector& lhs, - const XprVector& rhs) _tvmet_always_inline; - - -template -Vector< - typename PromoteTraits::value_type, 3> -cross(const Vector& lhs, - const XprVector& rhs) _tvmet_always_inline; - - -template -Vector< - typename PromoteTraits::value_type, 3> -cross(const XprVector& lhs, - const Vector& rhs) _tvmet_always_inline; - - -template -typename Traits::sum_type -norm1(const XprVector& v) _tvmet_always_inline; - - -template -typename Traits::sum_type -norm2(const XprVector& v) _tvmet_always_inline; - - -template -XprVector< - XprBinOp< - Fcnl_div, - XprVector, - XprLiteral - >, - Sz -> -normalize(const XprVector& v) _tvmet_always_inline; - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - -/* - * function(XprVector, XprVector) - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - XprVector \ - >, \ - Sz \ -> \ -NAME (const XprVector& lhs, const XprVector& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - XprVector \ - > expr_type; \ - return XprVector(expr_type(lhs, rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(add) // per se element wise -TVMET_IMPLEMENT_MACRO(sub) // per se element wise -TVMET_IMPLEMENT_MACRO(mul) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(div) // not defined for vectors -} - -#undef TVMET_IMPLEMENT_MACRO - - -/* - * function(XprVector, POD) - * function(POD, XprVector) - * Note: - operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, POD) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< typename E::value_type, POD >, \ - XprVector, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -NAME (const XprVector& lhs, POD rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< typename E::value_type, POD >, \ - XprVector, \ - XprLiteral< POD > \ - > expr_type; \ - return XprVector( \ - expr_type(lhs, XprLiteral< POD >(rhs))); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< POD, typename E::value_type>, \ - XprLiteral< POD >, \ - XprVector \ - >, \ - Sz \ -> \ -NAME (POD lhs, const XprVector& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< POD, typename E::value_type>, \ - XprLiteral< POD >, \ - XprVector \ - > expr_type; \ - return XprVector( \ - expr_type(XprLiteral< POD >(lhs), rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(add, int) -TVMET_IMPLEMENT_MACRO(sub, int) -TVMET_IMPLEMENT_MACRO(mul, int) -TVMET_IMPLEMENT_MACRO(div, int) - -TVMET_IMPLEMENT_MACRO(add, float) -TVMET_IMPLEMENT_MACRO(sub, float) -TVMET_IMPLEMENT_MACRO(mul, float) -TVMET_IMPLEMENT_MACRO(div, float) - -TVMET_IMPLEMENT_MACRO(add, double) -TVMET_IMPLEMENT_MACRO(sub, double) -TVMET_IMPLEMENT_MACRO(mul, double) -TVMET_IMPLEMENT_MACRO(div, double) - -#undef TVMET_IMPLEMENT_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * function(XprMatrix, complex) - * function(complex, XprMatrix) - * Note: - operations +,-,*,/ are per se element wise - * \todo type promotion - */ -#define TVMET_IMPLEMENT_MACRO(NAME) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< typename E::value_type, std::complex >, \ - XprVector, \ - XprLiteral< std::complex > \ - >, \ - Sz \ -> \ -NAME (const XprVector& lhs, const std::complex& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< typename E::value_type, std::complex >, \ - XprVector, \ - XprLiteral< std::complex > \ - > expr_type; \ - return XprVector( \ - expr_type(lhs, XprLiteral< std::complex >(rhs))); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, typename E::value_type>, \ - XprLiteral< std::complex >, \ - XprVector \ - >, \ - Sz \ -> \ -NAME (const std::complex& lhs, const XprVector& rhs) { \ - typedef XprBinOp< \ - Fcnl_##NAME< std::complex, typename E::value_type>, \ - XprLiteral< std::complex >, \ - XprVector \ - > expr_type; \ - return XprVector( \ - expr_type(XprLiteral< std::complex >(lhs), rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(add) -TVMET_IMPLEMENT_MACRO(sub) -TVMET_IMPLEMENT_MACRO(mul) -TVMET_IMPLEMENT_MACRO(div) - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * vector specific functions - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/** - * \fn sum(const XprVector& v) - * \brief Compute the sum of the vector expression. - * \ingroup _unary_function - * - * Simply compute the sum of the given vector as: - * \f[ - * \sum_{i = 0}^{Sz-1} v[i] - * \f] - */ -template -inline -typename Traits::sum_type -sum(const XprVector& v) { - return meta::Vector::sum(v); -} - - -/** - * \fn product(const XprVector& v) - * \brief Compute the product of the vector elements. - * \ingroup _unary_function - * - * Simply computer the product of the given vector expression as: - * \f[ - * \prod_{i = 0}^{Sz - 1} v[i] - * \f] - */ -template -inline -typename Traits::sum_type -product(const XprVector& v) { - return meta::Vector::product(v); -} - - -/** - * \fn dot(const XprVector& lhs, const XprVector& rhs) - * \brief Compute the dot/inner product - * \ingroup _binary_function - * - * Compute the dot product as: - * \f[ - * \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] ) - * \f] - * where lhs is a column vector and rhs is a row vector, both vectors - * have the same dimension. - */ -template -inline -typename PromoteTraits< - typename E1::value_type, - typename E2::value_type ->::value_type -dot(const XprVector& lhs, const XprVector& rhs) { - return meta::Vector::dot(lhs, rhs); -} - - -/** - * \fn dot(const Vector& lhs, const XprVector& rhs) - * \brief Compute the dot/inner product - * \ingroup _binary_function - * - * Compute the dot product as: - * \f[ - * \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] ) - * \f] - * where lhs is a column vector and rhs is a row vector, both vectors - * have the same dimension. - */ -template -inline -typename PromoteTraits::value_type -dot(const Vector& lhs, const XprVector& rhs) { - return meta::Vector::dot(lhs, rhs); -} - - -/** - * \fn dot(const XprVector& lhs, const Vector& rhs) - * \brief Compute the dot/inner product - * \ingroup _binary_function - * - * Compute the dot product as: - * \f[ - * \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] ) - * \f] - * where lhs is a column vector and rhs is a row vector, both vectors - * have the same dimension. - */ -template -inline -typename PromoteTraits::value_type -dot(const XprVector& lhs, const Vector& rhs) { - return meta::Vector::dot(lhs, rhs); -} - - -/** - * \fn cross(const XprVector& lhs, const XprVector& rhs) - * \brief Compute the cross/outer product - * \ingroup _binary_function - * \note working only for vectors of size = 3 - * \todo Implement vector outer product as ET and MT, returning a XprVector - */ -template -inline -Vector< - typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type, - 3 -> -cross(const XprVector& lhs, const XprVector& rhs) { - typedef typename PromoteTraits< - typename E1::value_type, - typename E2::value_type - >::value_type value_type; - return Vector(lhs(1)*rhs(2) - rhs(1)*lhs(2), - rhs(0)*lhs(2) - lhs(0)*rhs(2), - lhs(0)*rhs(1) - rhs(0)*lhs(1)); -} - - -/** - * \fn cross(const XprVector& lhs, const Vector& rhs) - * \brief Compute the cross/outer product - * \ingroup _binary_function - * \note working only for vectors of size = 3 - * \todo Implement vector outer product as ET and MT, returning a XprVector - */ -template -inline -Vector< - typename PromoteTraits::value_type, 3> -cross(const XprVector& lhs, const Vector& rhs) { - typedef typename PromoteTraits< - typename E::value_type, T>::value_type value_type; - return Vector(lhs(1)*rhs(2) - rhs(1)*lhs(2), - rhs(0)*lhs(2) - lhs(0)*rhs(2), - lhs(0)*rhs(1) - rhs(0)*lhs(1)); -} - - -/** - * \fn cross(const Vector& lhs, const XprVector& rhs) - * \brief Compute the cross/outer product - * \ingroup _binary_function - * \note working only for vectors of size = 3 - * \todo Implement vector outer product as ET and MT, returning a XprVector - */ -template -inline -Vector< - typename PromoteTraits::value_type, 3> -cross(const Vector& lhs, const XprVector& rhs) { - typedef typename PromoteTraits< - typename E2::value_type, T1>::value_type value_type; - return Vector(lhs(1)*rhs(2) - rhs(1)*lhs(2), - rhs(0)*lhs(2) - lhs(0)*rhs(2), - lhs(0)*rhs(1) - rhs(0)*lhs(1)); -} - - -/** - * \fn norm1(const XprVector& v) - * \brief The \f$l_1\f$ norm of a vector expression. - * \ingroup _unary_function - * The norm of any vector is just the square root of the dot product of - * a vector with itself, or - * - * \f[ - * |Vector v| = |v| = \sum_{i=0}^{Sz-1}\,|v[i]| - * \f] - */ -template -inline -typename Traits::sum_type -norm1(const XprVector& v) { - return sum(abs(v)); -} - - -/** - * \fn norm2(const XprVector& v) - * \brief The euklidian norm (or \f$l_2\f$ norm) of a vector expression. - * \ingroup _unary_function - * The norm of any vector is just the square root of the dot product of - * a vector with itself, or - * - * \f[ - * |Vector v| = |v| = \sqrt{ \sum_{i=0}^{Sz-1}\,v[i]^2 } - * \f] - * - * \note The internal cast for Vector avoids warnings on sqrt. - */ -template -inline -typename Traits::sum_type -norm2(const XprVector& v) { - typedef typename E::value_type value_type; - return static_cast( std::sqrt(static_cast(dot(v, v))) ); -} - - -/** - * \fn normalize(const XprVector& v) - * \brief Normalize the given vector expression. - * \ingroup _unary_function - * \sa norm2 - * - * using the equation: - * \f[ - * \frac{Vector v}{\sqrt{ \sum_{i=0}^{Sz-1}\,v[i]^2 }} - * \f] - */ -template -inline -XprVector< - XprBinOp< - Fcnl_div, - XprVector, - XprLiteral - >, - Sz -> -normalize(const XprVector& v) { - typedef typename E::value_type value_type; - typedef XprBinOp< - Fcnl_div, - XprVector, - XprLiteral - > expr_type; - return XprVector( - expr_type(v, XprLiteral< value_type >(norm2(v)))); -} - - -} // namespace tvmet - -#endif // TVMET_XPR_VECTOR_FUNCTIONS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/include/tvmet/xpr/VectorOperators.h b/tvmet-1.7.1/include/tvmet/xpr/VectorOperators.h deleted file mode 100644 index 5f5bf6803..000000000 --- a/tvmet-1.7.1/include/tvmet/xpr/VectorOperators.h +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * lesser General Public License for more details. - * - * You should have received a copy of the GNU lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: VectorOperators.h,v 1.13 2004/06/10 16:36:55 opetzold Exp $ - */ - -#ifndef TVMET_XPR_VECTOR_OPERATORS_H -#define TVMET_XPR_VECTOR_OPERATORS_H - -namespace tvmet { - - -/********************************************************* - * PART I: DECLARATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic operators implemented by functions - * add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * operator(XprVector, XprVector) - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - XprVector \ - >, \ - Sz \ -> \ -operator OP (const XprVector& lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +) // per se element wise -TVMET_DECLARE_MACRO(sub, -) // per se element wise -TVMET_DECLARE_MACRO(mul, *) // per se element wise -namespace element_wise { - TVMET_DECLARE_MACRO(div, /) // not defined for vectors -} - -#undef TVMET_DECLARE_MACRO - - -/* - * operator(XprVector, POD) - * operator(POD, XprVector) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP, POD) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -operator OP (const XprVector& lhs, \ - POD rhs) _tvmet_always_inline; \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< POD, typename E::value_type >, \ - XprLiteral< POD >, \ - XprVector< E, Sz> \ - >, \ - Sz \ -> \ -operator OP (POD lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +, int) -TVMET_DECLARE_MACRO(sub, -, int) -TVMET_DECLARE_MACRO(mul, *, int) -TVMET_DECLARE_MACRO(div, /, int) - -TVMET_DECLARE_MACRO(add, +, float) -TVMET_DECLARE_MACRO(sub, -, float) -TVMET_DECLARE_MACRO(mul, *, float) -TVMET_DECLARE_MACRO(div, /, float) - -TVMET_DECLARE_MACRO(add, +, double) -TVMET_DECLARE_MACRO(sub, -, double) -TVMET_DECLARE_MACRO(mul, *, double) -TVMET_DECLARE_MACRO(div, /, double) - -#undef TVMET_DECLARE_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * operator(XprVector, complex) - * operator(complex, XprVector) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME >, \ - XprVector, \ - XprLiteral< std::complex > \ - >, \ - Sz \ -> \ -operator OP (const XprVector& lhs, \ - const std::complex& rhs) _tvmet_always_inline; \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, typename E::value_type >, \ - XprLiteral< std::complex >, \ - XprVector< E, Sz> \ - >, \ - Sz \ -> \ -operator OP (const std::complex& lhs, \ - const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(add, +) // per se element wise -TVMET_DECLARE_MACRO(sub, -) // per se element wise -TVMET_DECLARE_MACRO(mul, *) // per se element wise -TVMET_DECLARE_MACRO(div, /) // per se element wise - -#undef TVMET_DECLARE_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * global unary operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * Unary Operator on XprVector - */ -#define TVMET_DECLARE_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprUnOp< \ - Fcnl_##NAME, \ - XprVector \ - >, \ - Sz \ -> \ -operator OP (const XprVector& rhs) _tvmet_always_inline; - -TVMET_DECLARE_MACRO(neg, -) - -#undef TVMET_DECLARE_MACRO - - -/********************************************************* - * PART II: IMPLEMENTATION - *********************************************************/ - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * Vector arithmetic operators implemented by functions - * add, sub, mul and div - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * operator(XprVector, XprVector) - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - XprVector \ - >, \ - Sz \ -> \ -operator OP (const XprVector& lhs, \ - const XprVector& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +) // per se element wise -TVMET_IMPLEMENT_MACRO(sub, -) // per se element wise -TVMET_IMPLEMENT_MACRO(mul, *) // per se element wise -namespace element_wise { - TVMET_IMPLEMENT_MACRO(div, /) // not defined for vectors -} - -#undef TVMET_IMPLEMENT_MACRO - - -/* - * operator(XprVector, POD) - * operator(POD, XprVector) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP, POD) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME, \ - XprVector, \ - XprLiteral< POD > \ - >, \ - Sz \ -> \ -operator OP (const XprVector& lhs, POD rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< POD, typename E::value_type >, \ - XprLiteral< POD >, \ - XprVector< E, Sz> \ - >, \ - Sz \ -> \ -operator OP (POD lhs, const XprVector& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +, int) -TVMET_IMPLEMENT_MACRO(sub, -, int) -TVMET_IMPLEMENT_MACRO(mul, *, int) -TVMET_IMPLEMENT_MACRO(div, /, int) - -TVMET_IMPLEMENT_MACRO(add, +, float) -TVMET_IMPLEMENT_MACRO(sub, -, float) -TVMET_IMPLEMENT_MACRO(mul, *, float) -TVMET_IMPLEMENT_MACRO(div, /, float) - -TVMET_IMPLEMENT_MACRO(add, +, double) -TVMET_IMPLEMENT_MACRO(sub, -, double) -TVMET_IMPLEMENT_MACRO(mul, *, double) -TVMET_IMPLEMENT_MACRO(div, /, double) - -#undef TVMET_IMPLEMENT_MACRO - - -#if defined(EIGEN_USE_COMPLEX) -/* - * operator(XprVector, complex) - * operator(complex, XprVector) - * Note: operations +,-,*,/ are per se element wise - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME >, \ - XprVector, \ - XprLiteral< std::complex > \ - >, \ - Sz \ -> \ -operator OP (const XprVector& lhs, \ - const std::complex& rhs) { \ - return NAME (lhs, rhs); \ -} \ - \ -template \ -inline \ -XprVector< \ - XprBinOp< \ - Fcnl_##NAME< std::complex, typename E::value_type >, \ - XprLiteral< std::complex >, \ - XprVector< E, Sz> \ - >, \ - Sz \ -> \ -operator OP (const std::complex& lhs, \ - const XprVector& rhs) { \ - return NAME (lhs, rhs); \ -} - -TVMET_IMPLEMENT_MACRO(add, +) // per se element wise -TVMET_IMPLEMENT_MACRO(sub, -) // per se element wise -TVMET_IMPLEMENT_MACRO(mul, *) // per se element wise -TVMET_IMPLEMENT_MACRO(div, /) // per se element wise - -#undef TVMET_IMPLEMENT_MACRO - -#endif // defined(EIGEN_USE_COMPLEX) - - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - * global unary operators - *+++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - -/* - * Unary Operator on XprVector - */ -#define TVMET_IMPLEMENT_MACRO(NAME, OP) \ -template \ -inline \ -XprVector< \ - XprUnOp< \ - Fcnl_##NAME, \ - XprVector \ - >, \ - Sz \ -> \ -operator OP (const XprVector& rhs) { \ - typedef XprUnOp< \ - Fcnl_##NAME, \ - XprVector \ - > expr_type; \ - return XprVector(expr_type(rhs)); \ -} - -TVMET_IMPLEMENT_MACRO(neg, -) - -#undef TVMET_IMPLEMENT_MACRO - - -} // namespace tvmet - -#endif // TVMET_XPR_VECTOR_OPERATORS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/tests/Makefile.am b/tvmet-1.7.1/tests/Makefile.am deleted file mode 100644 index 225f3ce5f..000000000 --- a/tvmet-1.7.1/tests/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ -EXTRA_DIST = README t.cc - -EXTRA_PROGRAMS = \ - swap \ - bad_temps \ - bad_xpr_constRef \ - tvmet - -AM_CXXFLAGS= -I$(top_srcdir)/include -I$(top_builddir)/include - -swap_SOURCES = swap.cc -bad_temps_SOURCES = bad_temps.cc -bad_xpr_constRef_SOURCES = bad_xpr_constRef.cc -tvmet_SOURCES = tvmet.cc - -tests: $(EXTRA_PROGRAMS) diff --git a/tvmet-1.7.1/tests/Makefile.in b/tvmet-1.7.1/tests/Makefile.in deleted file mode 100644 index fcc0aa5bd..000000000 --- a/tvmet-1.7.1/tests/Makefile.in +++ /dev/null @@ -1,470 +0,0 @@ -# Makefile.in generated by automake 1.8.3 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -SOURCES = $(bad_temps_SOURCES) $(bad_xpr_constRef_SOURCES) $(swap_SOURCES) $(tvmet_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_triplet = @host@ -EXTRA_PROGRAMS = swap$(EXEEXT) bad_temps$(EXEEXT) \ - bad_xpr_constRef$(EXEEXT) tvmet$(EXEEXT) -subdir = tests -DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/config/ac_c_long_long.m4 \ - $(top_srcdir)/config/ac_create_prefix_config_h.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex_math1.m4 \ - $(top_srcdir)/config/ac_cxx_have_complex_math2.m4 \ - $(top_srcdir)/config/ac_cxx_have_ieee_math.m4 \ - $(top_srcdir)/config/ac_cxx_have_mutable.m4 \ - $(top_srcdir)/config/ac_cxx_have_namespaces.m4 \ - $(top_srcdir)/config/ac_cxx_have_sysv_math.m4 \ - $(top_srcdir)/config/ac_cxx_partial_specialization.m4 \ - $(top_srcdir)/config/ac_cxx_typename.m4 \ - $(top_srcdir)/config/ac_set_compiler.m4 \ - $(top_srcdir)/config/op_doxygen_doc.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(mkdir_p) -CONFIG_HEADER = $(top_builddir)/config/config.h -CONFIG_CLEAN_FILES = -am_bad_temps_OBJECTS = bad_temps.$(OBJEXT) -bad_temps_OBJECTS = $(am_bad_temps_OBJECTS) -bad_temps_LDADD = $(LDADD) -am_bad_xpr_constRef_OBJECTS = bad_xpr_constRef.$(OBJEXT) -bad_xpr_constRef_OBJECTS = $(am_bad_xpr_constRef_OBJECTS) -bad_xpr_constRef_LDADD = $(LDADD) -am_swap_OBJECTS = swap.$(OBJEXT) -swap_OBJECTS = $(am_swap_OBJECTS) -swap_LDADD = $(LDADD) -am_tvmet_OBJECTS = tvmet.$(OBJEXT) -tvmet_OBJECTS = $(am_tvmet_OBJECTS) -tvmet_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/config -depcomp = $(SHELL) $(top_srcdir)/config/depcomp -am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bad_temps.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/bad_xpr_constRef.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/swap.Po ./$(DEPDIR)/tvmet.Po -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(bad_temps_SOURCES) $(bad_xpr_constRef_SOURCES) \ - $(swap_SOURCES) $(tvmet_SOURCES) -DIST_SOURCES = $(bad_temps_SOURCES) $(bad_xpr_constRef_SOURCES) \ - $(swap_SOURCES) $(tvmet_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CONFIG_CPPUNIT_FALSE = @CONFIG_CPPUNIT_FALSE@ -CONFIG_CPPUNIT_TRUE = @CONFIG_CPPUNIT_TRUE@ -CONFIG_DOC_FALSE = @CONFIG_DOC_FALSE@ -CONFIG_DOC_TRUE = @CONFIG_DOC_TRUE@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CPPUNIT_CFLAGS = @CPPUNIT_CFLAGS@ -CPPUNIT_CONFIG = @CPPUNIT_CONFIG@ -CPPUNIT_LIBS = @CPPUNIT_LIBS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CXX_DEBUG_FLAGS = @CXX_DEBUG_FLAGS@ -CXX_OPTIMIZE_FLAGS = @CXX_OPTIMIZE_FLAGS@ -CXX_WARN_FLAGS = @CXX_WARN_FLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DOXYGEN = @DOXYGEN@ -DOXYGEN_HAVE_DOT = @DOXYGEN_HAVE_DOT@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LATEX_BATCHMODE = @LATEX_BATCHMODE@ -LATEX_MODE = @LATEX_MODE@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -EXTRA_DIST = README t.cc -AM_CXXFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include -swap_SOURCES = swap.cc -bad_temps_SOURCES = bad_temps.cc -bad_xpr_constRef_SOURCES = bad_xpr_constRef.cc -tvmet_SOURCES = tvmet.cc -all: all-am - -.SUFFIXES: -.SUFFIXES: .cc .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu tests/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -bad_temps$(EXEEXT): $(bad_temps_OBJECTS) $(bad_temps_DEPENDENCIES) - @rm -f bad_temps$(EXEEXT) - $(CXXLINK) $(bad_temps_LDFLAGS) $(bad_temps_OBJECTS) $(bad_temps_LDADD) $(LIBS) -bad_xpr_constRef$(EXEEXT): $(bad_xpr_constRef_OBJECTS) $(bad_xpr_constRef_DEPENDENCIES) - @rm -f bad_xpr_constRef$(EXEEXT) - $(CXXLINK) $(bad_xpr_constRef_LDFLAGS) $(bad_xpr_constRef_OBJECTS) $(bad_xpr_constRef_LDADD) $(LIBS) -swap$(EXEEXT): $(swap_OBJECTS) $(swap_DEPENDENCIES) - @rm -f swap$(EXEEXT) - $(CXXLINK) $(swap_LDFLAGS) $(swap_OBJECTS) $(swap_LDADD) $(LIBS) -tvmet$(EXEEXT): $(tvmet_OBJECTS) $(tvmet_DEPENDENCIES) - @rm -f tvmet$(EXEEXT) - $(CXXLINK) $(tvmet_LDFLAGS) $(tvmet_OBJECTS) $(tvmet_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bad_temps.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bad_xpr_constRef.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/swap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvmet.Po@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cc.lo: -@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$tags$$unique" \ - || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am - - -tests: $(EXTRA_PROGRAMS) -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/tvmet-1.7.1/tests/README b/tvmet-1.7.1/tests/README deleted file mode 100644 index 7b62c118d..000000000 --- a/tvmet-1.7.1/tests/README +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains files only for the developer to check new features. -Therefore not all is working/compiling here. diff --git a/tvmet-1.7.1/tests/bad_temps.cc b/tvmet-1.7.1/tests/bad_temps.cc deleted file mode 100644 index b3569f8dd..000000000 --- a/tvmet-1.7.1/tests/bad_temps.cc +++ /dev/null @@ -1,243 +0,0 @@ -/* - * This acts as an example on how to not introduce temporaries - * for evaluating expressions. The problem is related to the - * prod() function, where the temps are going out of scope. - */ -extern "C" int printf(const char*, ...); - -#ifndef restrict -#define restrict __restrict__ -#endif - -template class Matrix; - -struct XprNull { explicit XprNull() { } }; - -static inline -double operator+(const double& lhs, XprNull) { return lhs; } - - -struct fcnl_Assign { static inline void applyOn(double& restrict lhs, double rhs) { lhs = rhs; } }; - - -template -struct MetaMatrix -{ - enum { - doRows = (RowStride < Rows - 1) ? 1 : 0, - doCols = (ColStride < Cols - 1) ? 1 : 0 - }; - - template - static inline - void assign2(Mtrx& mat, const E& expr, const Fcnl& fn) { - fn.applyOn(mat(RowStride, ColStride), expr(RowStride, ColStride)); - MetaMatrix::assign2(mat, expr, fn); - } - - template - static inline - void assign(Mtrx& mat, const E& expr, const Fcnl& fn) { - MetaMatrix::assign2(mat, expr, fn); - MetaMatrix::assign(mat, expr, fn); - } -}; - -template<> -struct MetaMatrix<0, 0, 0, 0> -{ - template - static inline void assign2(Mtrx&, const E&, const Fcnl&) { } - - template - static inline void assign(Mtrx&, const E&, const Fcnl&) { } -}; - - -template -struct MetaGemm -{ - enum { doIt = (K != Cols1 - 1) }; - - static inline - double prod(const double* restrict lhs, const double* restrict rhs, unsigned i, unsigned j) { - return lhs[i * RowStride1 + K * ColStride1] * rhs[K * RowStride2 + j * ColStride2] - + MetaGemm::prod(lhs, rhs, i, j); - } -}; - -template<> -struct MetaGemm<0,0,0,0,0,0,0,0> -{ - static inline XprNull prod(const void*, const void*, unsigned, unsigned) { return XprNull(); } -}; - - -template -struct XprMMProduct -{ - explicit XprMMProduct(const double* restrict lhs, const double* restrict rhs) : m_lhs(lhs), m_rhs(rhs) { } - - double operator()(unsigned i, unsigned j) const { - return MetaGemm::prod(m_lhs, m_rhs, i, j); - } - -private: - const double* restrict m_lhs; - const double* restrict m_rhs; -}; - - -template -struct XprMatrixTranspose -{ - explicit XprMatrixTranspose(const E& e) : m_expr(e) { } - - double operator()(unsigned i, unsigned j) const { return m_expr(j, i); } - -private: - const E& restrict m_expr; -}; - - -template -struct XprMatrix -{ - explicit XprMatrix(const E& e) : m_expr(e) { } - - double operator()(unsigned i, unsigned j) const { return m_expr(i, j); } - -private: - const E& restrict m_expr; -}; - - -template -struct MatrixConstRef -{ - explicit MatrixConstRef(const Matrix& rhs) : m_data(rhs.m_data) { } - - double operator()(unsigned i, unsigned j) const { - return m_data[i * RowStride + j * ColStride]; - } - -private: - const double* restrict m_data; -}; - - -template -struct Matrix -{ - explicit Matrix() { m_data = new double [Rows*Cols]; } - - template - explicit Matrix(const XprMatrix& rhs) { - m_data = new double [Rows*Cols]; - MetaMatrix::assign(*this, rhs, fcnl_Assign()); - } - - ~Matrix() { delete [] m_data; } - - double& restrict operator()(unsigned i, unsigned j) { return m_data[i * Cols + j]; } - - double operator()(unsigned i, unsigned j) const { return m_data[i * Cols + j]; } - - MatrixConstRef constRef() const { - return MatrixConstRef(*this); - } - - template Matrix& operator=(const XprMatrix& rhs) { - MetaMatrix::assign(*this, rhs, fcnl_Assign()); - return *this; - } - - void print() const { - printf("[\n"); - for(unsigned i = 0; i != Rows; ++i) { - printf("\t["); - for(unsigned j = 0; j != Cols; ++j) - printf("\t%+4.2f", this->operator()(i, j)); - printf("]\n"); - } - printf("]\n"); - } - -// private: - double* m_data; -}; - - -template -inline -XprMatrix< - XprMMProduct< - Rows1, Cols1, Cols2, - Cols1, 1, Cols2, 1 - >, - Rows1, Cols2 -> -prod(const XprMatrix& lhs, const Matrix& rhs) { - typedef XprMMProduct< - Rows1, Cols1, Cols2, - Cols1, 1, Cols2, 1 - > expr_type; - Matrix temp_lhs(lhs); - - return XprMatrix(expr_type(temp_lhs.m_data, rhs.m_data)); -} - -template -inline -XprMatrix< - XprMatrixTranspose< - MatrixConstRef - >, - Cols, Rows -> -trans(const Matrix& rhs) { - typedef XprMatrixTranspose< - MatrixConstRef - > expr_type; - return XprMatrix(expr_type(rhs.constRef())); -} - - -/** - * Test driver - */ -using namespace std; - -int main() -{ - Matrix<3,2> B; - Matrix<3,3> D; - Matrix<2,2> K; - - B(0,0) = -0.05; B(0,1) = 0; - B(1,0) = 0; B(1,1) = 0.05; - B(2,0) = 0.05; B(2,1) = -0.05; - - D(0,0) = 2000; D(0,1) = 1000; D(0,2) = 0; - D(1,0) = 1000; D(1,1) = 2000; D(1,2) = 0; - D(2,0) = 0; D(2,1) = 0; D(2,2) = 500; - - K = prod(prod(trans(B), D), B); - - printf("K = "); - K.print(); // wrong result, should be symetric -} diff --git a/tvmet-1.7.1/tests/bad_xpr_const_ref.cc b/tvmet-1.7.1/tests/bad_xpr_const_ref.cc deleted file mode 100644 index e56ae8d3c..000000000 --- a/tvmet-1.7.1/tests/bad_xpr_const_ref.cc +++ /dev/null @@ -1,164 +0,0 @@ -/* - * $Id: bad_xpr_constRef.cc,v 1.1 2003/10/21 19:40:38 opetzold Exp $ - * - * This example shows the problem on holding references - * by expressions. On higher optimization levels all things - * are good. Without optimizations it crashs. - */ - -extern "C" int printf(const char*, ...); - -#ifndef restrict -#define restrict __restrict__ -#endif - -template class Vector; - -struct Fcnl_Assign { - static inline void apply_on(double& restrict lhs, double rhs) { lhs = rhs; } -}; - -struct Fcnl_Add { - static inline double apply_on(double lhs, double rhs) { return lhs + rhs; } -}; - -template -struct MetaVector -{ - enum { - doIt = (Stride < (Sz-1)) ? 1 : 0 - }; - - template - static inline - void assign(E1& lhs, const E2& rhs, const Fcnl& fn) { - fn.apply_on(lhs(Stride), rhs(Stride)); - MetaVector::assign(lhs, rhs, fn); - } -}; - -template<> -struct MetaVector<0,0> -{ - template - static inline void assign(E1&, const E2&, const Fcnl&) { } -}; - - -template -struct XprVector -{ - explicit XprVector(const E& e) : m_expr(e) { } - - double operator()(unsigned i) const { - return m_expr(i); - } - - template - void assign_to(E2& e, const Fcnl& fn) const { - MetaVector::assign(e, *this, fn); - } - - const E m_expr; -}; - - -template -struct VectorConstRef -{ - explicit VectorConstRef(const Vector& rhs) : m_data(rhs.m_data) { } - - double operator()(unsigned i) const { - return m_data[i * Stride]; - } - - const double* restrict m_data; -}; - - -template -struct Vector -{ - explicit Vector() { } - - double& restrict operator()(unsigned i) { return m_data[i]; } - - double operator()(unsigned i) const { return m_data[i]; } - - typedef VectorConstRef ConstRef; - - ConstRef constRef() const { return ConstRef(*this); } - - template - void assign_to(Vector& v, const Fcnl& fn) { - MetaVector::assign(v, *this, fn); - } - - template - Vector& operator=(const XprVector& rhs) { - rhs.assign_to(*this, Fcnl_Assign()); - return *this; - } - - double m_data[Sz]; -}; - - -template -struct XprBinOp -{ - explicit XprBinOp(const E1& lhs, const E2& rhs) - : m_lhs(lhs), m_rhs(rhs) - { } - - double operator()(unsigned i) const { - return BinOp::apply_on(m_lhs(i), m_rhs(i)); - } - - const E1& m_lhs; - const E2& m_rhs; -}; - - -template -inline -XprVector< - XprBinOp< - Fcnl_Add, - VectorConstRef, - VectorConstRef - >, - Sz -> -add (const Vector& lhs, const Vector& rhs) { - typedef XprBinOp < - Fcnl_Add, - VectorConstRef, - VectorConstRef - > expr_type; - return XprVector( - expr_type(lhs.constRef(), rhs.constRef())); -} - - -int main() -{ - - Vector<5> v, v1,v2; - - v1(0) = 1; - v1(1) = 2; - v1(2) = 3; - v1(3) = 4; - v1(4) = 5; - - v2(0) = 1; - v2(1) = 2; - v2(2) = 3; - v2(3) = 4; - v2(4) = 5; - - v = add(v1, v2); - - printf("v(0) = %f\n", v(0)); -} diff --git a/tvmet-1.7.1/tests/swap.cc b/tvmet-1.7.1/tests/swap.cc deleted file mode 100644 index 85003f2d1..000000000 --- a/tvmet-1.7.1/tests/swap.cc +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Test file for checking meta swap feature. - * - * Swapping using std::swap is faster than meta template implementation. - */ - -#include -#include // min, max - -#include -#include - - -using namespace tvmet; -using namespace std; - -NS_TVMET_BEGIN - -template -class MetaSwap // later, should be MetaVector -{ -private: - enum { - doIt = (Idx < (Sz-1)) ? 1 : 0 /**< recursive counter */ - }; - -public: - template - static inline - void - swap(E1& e1, E2& e2) { - // XXX BUG: const problem?, we have to use the operator() for Vectors - fcnl_Swap::applyOn(e1(Idx), e2(Idx)); - MetaSwap::swap(e1, e2); - } -}; - -template<> -class MetaSwap<0, 0> -{ -public: - template static inline void swap(E1&, E2&) { } -}; - - -/** - * \fun swap - * \brief swaps to vector expressions XprVector - */ -template -inline -void swap(XprVector e1, XprVector e2) { - MetaSwap::swap(e1, e2); -} - -/** - * \fun swap - * \brief swaps to vector - */ -template -inline -void swap(Vector& lhs, Vector& rhs) { - swap(lhs.asXpr(), rhs.asXpr()); -} - - -/** - * \fun swap2 - * \brief swaps to vector expressions XprVector - */ -template -inline -void swap2(XprVector e1, XprVector e2) { - // loops are faster than meta templates - for(int i = 0; i < Sz; ++i) - std::swap(e1[i], e2[i]); -} - -/** - * \fun swap2 - * \brief swaps to vector - */ -template -inline -void swap2(Vector& lhs, Vector& rhs) { - // loops are faster than meta templates - for(int i = 0; i < Sz; ++i) - std::swap(lhs[i], rhs[i]); -} - - -NS_TVMET_END - - - - -template -void test_meta_swap(V1& v1, V2& v2) { - tvmet::swap(v1, v2); -} - -template -void test_loop_swap(V1& v1, V2& v2) { - tvmet::swap2(v1, v2); -} - - - -template -void test_meta_mswap(M1& m1, M2& m2) { - tvmet::swap2(row(m1, 0), row(m2, 0)); - tvmet::swap2(col(m1, 0), col(m2, 0)); -} - - -#define LOOPS 1000000 - -int main() { - typedef Matrix matrix_type; - typedef Vector vector_type; - - //---------------------------------------------------------------- - vector_type v1(1); - vector_type v2(4); - - cout << "\nSwap Vectors\n\n"; - cout << v1 << endl; - cout << v2 << endl; - for(int i = 0; i < LOOPS; ++i) - test_meta_swap(v1, v2); - cout << v1 << endl; - cout << v2 << endl; - for(int i = 0; i < LOOPS; ++i) - test_loop_swap(v1, v2); - cout << v1 << endl; - cout << v2 << endl; - - //---------------------------------------------------------------- - matrix_type m1, m2; - vector_type rv; - - m1 = 1,2,3,4, - 5,6,7,8, - 9,10,11,12, - 13,14,15,16; - m2 = transpose(m1); - - cout << "\nSwap Matrix\n\n"; - cout << m1 << endl; - cout << m2 << endl; - test_meta_mswap(m1, m2); - cout << m1 << endl; - cout << m2 << endl; -} diff --git a/tvmet-1.7.1/tests/t.cc b/tvmet-1.7.1/tests/t.cc deleted file mode 100644 index 7c97618a1..000000000 --- a/tvmet-1.7.1/tests/t.cc +++ /dev/null @@ -1,414 +0,0 @@ -#include -#include -#include - -using std::cout; -using std::endl; - -struct separator { - std::ostream& print_on(std::ostream& os) const { - for(int i = 0; i < 63; ++i) os << "-"; - return os; - } -}; - -std::ostream& operator<<(std::ostream& os, const separator& s) { - return s.print_on(os); -} - -template -class TestBase -{ -public: - typedef T1 value_type; - typedef T2 value_type2; - - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - typedef tvmet::Vector vector_type2; - typedef tvmet::Matrix matrix_type2; - -private: - vector_type v0; - matrix_type M0; - -protected: - vector_type v1, v2, v3; - matrix_type M1, M2, M3; - -protected: - TestBase() - { - v0 = 1,2,3; - M0 = 1,4,7,2,5,8,3,6,9; - reset(); - } - - ~TestBase() { } - - void reset() - { - v1 = v0; v2 = v0; v3 = v0; - M1 = M0; M2 = M0; M3 = M0; - } - -public: - void show_v1(const std::string& op) { - cout << separator() << endl - << op << " = " - << v1 << endl - << separator() << endl; - } - - void show_v2(const std::string& op) { - cout << separator() << endl - << op << " = " - << v2 << endl - << separator() << endl; - } - - void show_v3(const std::string& op) { - cout << separator() << endl - << op << " = " - << v3 << endl - << separator() << endl; - } - - void show_v() { - cout << separator() << endl; - cout << "v1 = " << v1 << endl - << "v2 = " << v2 << endl - << "v3 = " << v3 << endl; - cout << separator() << endl; - } - - void show_M1(const std::string& op) { - cout << separator() << endl - << op << " = " - << M1 << endl - << separator() << endl; - } - - void show_M2(const std::string& op) { - cout << separator() << endl - << op << " = " - << M2 << endl - << separator() << endl; - } - - void show_M3(const std::string& op) { - cout << separator() << endl - << op << " = " - << M3 << endl - << separator() << endl; - } - - void show_M() { - cout << separator() << endl; - cout << "M1 = " << M1 << endl - << "M2 = " << M2 << endl - << "M3 = " << M3 << endl; - cout << separator() << endl; - } -}; - - - - -/* - * Vector - */ -class TestV : public TestBase -{ -public: - TestV() { } - -public: - void case1() { - reset(); - - v1 = v2 + v2 + v3; - - show_v1("v2 + v2 + v3"); - } - void case2() { - reset(); - - v1 = sin( (v2 + v2) * v2 ); - - show_v1("sin( (v2 + v2) * v2 )"); - } - void case3() { - reset(); - - v1 = (v2 + v2) * (v2 + v2); - - show_v1("(v2 + v2) * (v2 + v2)"); - } - void case4() { - reset(); - - v1 = (v2 + v2) * (v2 + v2) / 4; - - show_v1("(v2 + v2) * (v2 + v2) / 4"); - } - void case5() { - reset(); - - } -}; - -/* - * Matrix - */ -class TestM : public TestBase -{ -public: - TestM() { } - -public: - void case1() { - reset(); - - M1 = M2 + M3; - - show_M1("M2 + M3"); - } - void case2() { - reset(); - - M1 = M2 + M2 + M2 + M2; - - show_M1("M2 + M2 + M2 + M2"); - } - void case3() { - reset(); - - /* - XXX: missing feature element_wise XprMatrix * Xprmatrix - - M1 = ( M2 + M2 ) * ( M2 + M2 ); - - M1 = tvmet::element_wise::product( M2 + M2, M2 + M2 ); - - show_M1("empty"); - */ - } - void case4() { - reset(); - - M1 = sin(M2 + M2); // UFUNC(XprMatrix) - - show_M1("sin(M2 + M2)"); - } - void case5() { - reset(); - - M1 = trans(M2); // = XprMatrix - - show_M1("trans(M2)"); - } - void case6() { - reset(); - - M1 = trans(M2) + M2; // XprMatrix + Matrix - - show_M1("trans(M2) + M2"); - } - void case7() { - reset(); - - M1 = M2 + trans(M2); // Matrix + XprMatrix - - show_M1("M2 + trans(M2)"); - } - void case8() { - reset(); - - /* - * WRONG results, should be: - * 120 264 408 - * 144 324 504 - * 168 384 600 - * there seems to be a side effect!! - */ - - M1 = prod((M2 + M2), (M2 + M2)); // XprMatrix * XprMatrix - - show_M1("prod((M2 + M2), (M2 + M2))"); - } - void case9() { - reset(); - - M1 = (M2 + M2) * (M2 + M2); // XprMatrix * XprMatrix - - show_M1("(M2 + M2) * (M2 + M2)"); - } - void case10() { - reset(); - - } -}; - -/* - * Matrix-Vector - */ -class TestMV : public TestBase -{ -public: - TestMV() { } - -public: - void case1() { - reset(); - - v1 = M1 * v2; - - show_v1("M1 * v2"); - } - void case2() { - reset(); - - v1 = (M1 * v2) + v2; - - show_v1("(M1 * v2) + v2"); - } - void case3() { - reset(); - - v1 = (M1 * v2) + (M1 * v2); - - show_v1("(M1 * v2) + (M1 * v2)"); - } - void case4() { - reset(); - - v1 = (M1 * v2) * (M1 * v2); // element wise: XprVector * XprVector - - show_v1("element_wise: (M1 * v2) * (M1 * v2)"); - } - void case5() { - reset(); - - using namespace tvmet::element_wise; - v1 = (M1 * v2) / (M1 * v2); // element_wise: XprVector / XprVector - - show_v1("element_wise: (M1 * v2) / (M1 * v2)"); - } - void case6() { - reset(); - - v1 = prod(M1, v2); - - show_v1("trans_prod(M1, v2)"); - } - void case7() { - reset(); - - v1 = prod(M1, v2) + v2;// XprVector + Vector - - show_v1("prod(M1, v2) + v2"); - } - void case8() { - reset(); - - using namespace tvmet::element_wise; - v1 += prod(M1, v2) / v2;// element_wise: XprVector + Vector - - show_v1("v1 += prod(M1, v2) / v2"); - } - void case9() { - reset(); - - v1 = prod(M1, v2) + prod(M1, v2);// element wise: XprVector * XprVector - - show_v1("prod(M1, v2) + prod(M1, v2)"); - } - void case10() { - reset(); - - using namespace tvmet::element_wise; - v1 = prod(M1, v2) / prod(M1, v2);// element_wise: XprVector / XprVector - - all_elements( v1 == 1 ); - - show_v1("prod(M1, v2) / prod(M1, v2)"); - } - void case11() { - reset(); - - v1 = M1 * (v1+v1); - - show_v1("M1 * (v1+v1)"); - } - void case12() { - reset(); - - v1 = M1 * prod(M1, v2); - - show_v1("M1 * prod(M1, v2)"); - } -}; - - - - - -/* - * Main - */ -int main() -{ - tvmet::Matrix MM; - MM = 1,2,3,4,5,6,7,8,9; - tvmet::Matrix MM2( MM ); - - TestV v; - TestM M; - TestMV Mv; - - v.show_v(); - M.show_M(); - - cout << "*****************************************************************" << endl; - -#if 1 - v.case1(); - v.case2(); - v.case3(); - v.case4(); - v.case5(); - - cout << "*****************************************************************" << endl; -#endif - -#if 1 - M.case1(); - M.case2(); - M.case3(); - M.case4(); - M.case5(); - M.case6(); - M.case7(); - M.case8(); - M.case9(); - M.case10(); - - cout << "*****************************************************************" << endl; -#endif - -#if 1 - Mv.case1(); - Mv.case2(); - Mv.case3(); - Mv.case4(); - Mv.case5(); -#endif - Mv.case6(); - Mv.case7(); - Mv.case8(); - Mv.case9(); - Mv.case10(); - Mv.case11(); - Mv.case12(); -} diff --git a/tvmet-1.7.1/tests/tvmet.cc b/tvmet-1.7.1/tests/tvmet.cc deleted file mode 100644 index 98a879ee5..000000000 --- a/tvmet-1.7.1/tests/tvmet.cc +++ /dev/null @@ -1,312 +0,0 @@ -/* - * $Id: tvmet.cc,v 1.3 2003/10/21 19:37:06 opetzold Exp $ - * - * This file shows the basic principle used by tvmet. Therefore - * you will not find promotion etc. here. - */ - -extern "C" int printf(const char*, ...); - -#ifndef restrict -#define restrict __restrict__ -#endif - -template class Matrix; - -struct XprNull { explicit XprNull() { } }; - -static inline -double operator+(const double& lhs, XprNull) { return lhs; } - - -struct Fcnl_Assign { static inline void apply_on(double& restrict lhs, double rhs) { lhs = rhs; } }; - - -template -struct MetaMatrix -{ - enum { - doRows = (RowStride < Rows - 1) ? 1 : 0, - doCols = (ColStride < Cols - 1) ? 1 : 0 - }; - - template - static inline - void assign2(E1& lhs, const E2& rhs, const Fcnl& fn) { - fn.apply_on( lhs(RowStride, ColStride), rhs(RowStride, ColStride) ); - MetaMatrix::assign2(lhs, rhs, fn); - } - - template - static inline - void assign(E1& lhs, const E2& rhs, const Fcnl& fn) { - MetaMatrix::assign2(lhs, rhs, fn); - MetaMatrix::assign(lhs, rhs, fn); - } -}; - -template<> -struct MetaMatrix<0, 0, 0, 0> -{ - template - static inline void assign2(E1&, const E2&, const Fcnl&) { } - - template - static inline void assign(E1&, const E2&, const Fcnl&) { } -}; - - -template -struct MetaGemm -{ - enum { doIt = (K != Cols1 - 1) }; - - template - static inline - double prod(const E1& lhs, const E2& rhs, unsigned i, unsigned j) { - return lhs(i, K) * rhs(K, j) - + MetaGemm::prod(lhs, rhs, i, j); - } -}; - -template<> -struct MetaGemm<0,0,0,0,0,0,0,0> -{ - template - static inline XprNull prod(const E1&, const E2&, unsigned, unsigned) { return XprNull(); } -}; - - -template -struct XprMMProduct -{ - explicit XprMMProduct(const E1& lhs, const E2& rhs) : m_lhs(lhs), m_rhs(rhs) { } - - double operator()(unsigned i, unsigned j) const { - return MetaGemm< - Rows1, Cols1, - Cols2, - RowStride1, ColStride1, - RowStride2, ColStride2, 0>::prod(m_lhs, m_rhs, i, j); - } - -// void assign_to(Matrix& rhs) const { -// MetaMatrix::assign(rhs, *this, Fcnl_Assign()); -// } - -private: - const E1 m_lhs; - const E2 m_rhs; -}; - - -template -struct XprMatrixTranspose -{ - explicit XprMatrixTranspose(const E& e) : m_expr(e) { } - - double operator()(unsigned i, unsigned j) const { return m_expr(j, i); } - -// template -// void assign_to(Matrix& rhs) const { -// MetaMatrix::assign(rhs, *this, Fcnl_Assign()); -// } - -private: - const E m_expr; -}; - - -template -struct XprMatrix -{ - explicit XprMatrix(const E& e) : m_expr(e) { } - - double operator()(unsigned i, unsigned j) const { return m_expr(i, j); } - - void assign_to(Matrix& rhs) const { - MetaMatrix::assign(rhs, *this, Fcnl_Assign()); - } - -private: - const E m_expr; -}; - - -template -struct MatrixConstRef -{ - explicit MatrixConstRef(const Matrix& rhs) : m_data(rhs.m_data) { } - - double operator()(unsigned i, unsigned j) const { - return m_data[i * RowStride + j * ColStride]; - } - -private: - const double* restrict m_data; -}; - - -template -struct Matrix -{ - explicit Matrix() { m_data = new double [Rows*Cols]; } - - template - explicit Matrix(const XprMatrix& rhs) { - m_data = new double [Rows*Cols]; - MetaMatrix::assign(*this, rhs, Fcnl_Assign()); - } - - ~Matrix() { delete [] m_data; } - - double& restrict operator()(unsigned i, unsigned j) { return m_data[i * Cols + j]; } - - double operator()(unsigned i, unsigned j) const { return m_data[i * Cols + j]; } - - MatrixConstRef constRef() const { - return MatrixConstRef(*this); - } - - Matrix& operator=(const Matrix& rhs) { - rhs.assign_to(*this); - return *this; - } - - void assign_to(Matrix& rhs) const { - MetaMatrix::assign(rhs, *this, Fcnl_Assign()); - } - - template - Matrix& operator=(const XprMatrix& rhs) { - rhs.assign_to(*this); - return *this; - } - - template - void assign_to(XprMatrix& rhs) const { - MetaMatrix::assign(rhs, *this, Fcnl_Assign()); - } - - void print() const { - printf("[\n"); - for(unsigned i = 0; i != Rows; ++i) { - printf("\t["); - for(unsigned j = 0; j != Cols; ++j) - printf("\t%+4.2f", this->operator()(i, j)); - printf("]\n"); - } - printf("]\n"); - } - - double* m_data; -}; - - -template -inline -XprMatrix< - XprMMProduct< - MatrixConstRef, - MatrixConstRef, - Rows1, Cols1, // M1(Rows1, Cols1) - Cols2, // M2(Cols1, Cols2) - Cols1, 1, // Stride M1 - Cols2, 1 // Stride M2 - >, - Rows1, Cols2 // return Dim -> -prod(const Matrix& lhs, const Matrix& rhs) { - typedef XprMMProduct< - MatrixConstRef, - MatrixConstRef, - Rows1, Cols1, - Cols2, - Cols1, 1, - Cols2, 1 - > expr_type; - return XprMatrix( - expr_type(lhs.constRef(), rhs.constRef())); -} - -template -inline -XprMatrix< - XprMMProduct< - XprMatrix, - MatrixConstRef, - Rows1, Cols1, Cols2, - Cols1, 1, Cols2, 1 - >, - Rows1, Cols2 - > -prod(const XprMatrix& lhs, const Matrix& rhs) { - typedef XprMMProduct< - XprMatrix, - MatrixConstRef, - Rows1, Cols1, Cols2, - Cols1, 1, Cols2, 1 - > expr_type; - return XprMatrix(expr_type(lhs, rhs.constRef())); -} - - -template -inline -XprMatrix< - XprMatrixTranspose< - MatrixConstRef - >, - Cols, Rows -> -trans(const Matrix& rhs) { - typedef XprMatrixTranspose< - MatrixConstRef - > expr_type; - return XprMatrix(expr_type(rhs.constRef())); -} - - -/** - * Test driver - */ -int main() -{ - Matrix<3,2> B; - Matrix<3,3> D; - - B(0,0) = -0.05; B(0,1) = 0; - B(1,0) = 0; B(1,1) = 0.05; - B(2,0) = 0.05; B(2,1) = -0.05; - - D(0,0) = 2000; D(0,1) = 1000; D(0,2) = 0; - D(1,0) = 1000; D(1,1) = 2000; D(1,2) = 0; - D(2,0) = 0; D(2,1) = 0; D(2,2) = 500; - - printf("B = "); - B.print(); - printf("D = "); - D.print(); - printf("\n***********************************************\n"); - - Matrix<2,2> K; - - K = prod(prod(trans(B), D), B); - - printf("Check: (equal prod(prod(trans(B), D), B)\n"); - printf(" K = "); - K.print(); -} diff --git a/tvmet-1.7.1/testsuite/CMakeLists.txt b/tvmet-1.7.1/testsuite/CMakeLists.txt deleted file mode 100644 index 176cc4db6..000000000 --- a/tvmet-1.7.1/testsuite/CMakeLists.txt +++ /dev/null @@ -1,50 +0,0 @@ -INCLUDE(CheckIncludeFiles) - -IF(BUILD_TESTS) - -ENABLE_TESTING() - -FIND_PACKAGE(Qt4 REQUIRED) - -INCLUDE_DIRECTORIES( ${QT_INCLUDE_DIR} ) - -SET(testsuite_SOURCES - main.cpp - testcommainitializer.cpp - testtraits.cpp - testconstructors.cpp -# TestConstruction.h TestConstruction.cc -# TestComplexMatrix.h TestComplexMatrix.cc -# TestComplexVector.h TestComplexVector.cc -# TestDimension.h TestDimension.cc -# TestMathOps.h TestMathOps.cc -# TestMatrixEval.h TestMatrixEval.cc -# TestMatrixFunctions.h TestMatrixFunctions.cc -# TestMatrixOperators.h TestMatrixOperators.cc -# TestSTL.h TestSTL.cc -# TestUnFunc.h TestUnFunc.cc -# TestVectorEval.h TestVectorEval.cc -# TestVectorFunctions.h TestVectorFunctions.cc -# TestVectorOperators.h TestVectorOperators.cc -# TestXpr.h TestXpr.cc -# TestXprMatrixFunctions.h TestXprMatrixFunctions.cc -# TestXprMatrixOperators.h TestXprMatrixOperators.cc -# TestXprVectorFunctions.h TestXprVectorFunctions.cc -# TestXprVectorOperators.h TestXprVectorOperators.cc -# TestUnloops.h TestUnloops.cc -# TestMatrixElementwise.h TestMatrixElementwise.cc -) - -QT4_AUTOMOC(${testsuite_SOURCES}) - -INCLUDE_DIRECTORIES(${CPPUNIT_INCLUDE_DIR} - ${CMAKE_SOURCE_DIR}/tvmet-1.7.1/include - ${CMAKE_INSTALL_PREFIX}/include) - -ADD_EXECUTABLE(testsuite ${testsuite_SOURCES}) - -TARGET_LINK_LIBRARIES(testsuite ${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY}) - -ADD_TEST(Eigen testsuite) - -ENDIF(BUILD_TESTS) diff --git a/tvmet-1.7.1/testsuite/TestConstruction.h b/tvmet-1.7.1/testsuite/TestConstruction.h deleted file mode 100644 index 2df7be4b5..000000000 --- a/tvmet-1.7.1/testsuite/TestConstruction.h +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestConstruction.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_CONSTRUCTION_H -#define TVMET_TEST_CONSTRUCTION_H - -#include - -#include -#include - -template -class TestConstruction : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestConstruction ); - CPPUNIT_TEST( vector_ctor1 ); - CPPUNIT_TEST( vector_ctor2 ); - CPPUNIT_TEST( vector_ctor3 ); - CPPUNIT_TEST( vector_ctor4 ); - CPPUNIT_TEST( vector_ctor5 ); - CPPUNIT_TEST( vector_ctor6 ); - CPPUNIT_TEST( vector_cctor ); - CPPUNIT_TEST( matrix_ctor1 ); - CPPUNIT_TEST( matrix_ctor2 ); - CPPUNIT_TEST( matrix_ctor3 ); - CPPUNIT_TEST( matrix_ctor4 ); - CPPUNIT_TEST( matrix_ctor5 ); - CPPUNIT_TEST( matrix_cctor ); - CPPUNIT_TEST_SUITE_END(); - -private: - enum { dim = 3 }; - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestConstruction() - : vZero(0), vOne(1), mZero(0), mOne(1) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void vector_ctor1(); - void vector_ctor2(); - void vector_ctor3(); - void vector_ctor4(); - void vector_ctor5(); - void vector_ctor6(); - void vector_cctor(); - - void matrix_ctor1(); - void matrix_ctor2(); - void matrix_ctor3(); - void matrix_ctor4(); - void matrix_ctor5(); - void matrix_cctor(); - -private: - const vector_type vZero; - const vector_type vOne; - vector_type v1; - -private: - const matrix_type mZero; - const matrix_type mOne; - matrix_type m1; -}; - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - -template -void TestConstruction::setUp () { - v1 = 1,2,3; - - m1 = 1,4,7, - 2,5,8, - 3,6,9; -} - -template -void TestConstruction::tearDown() { } - -/***************************************************************************** - * Implementation Part II (Vectors) - ****************************************************************************/ - -/* - * Vector (InputIterator first, InputIterator last) - */ -template -void -TestConstruction::vector_ctor1() { - T data[] = {1,2,3}; - - int sz = sizeof(data)/sizeof(T); - T* first = data; - T* last = data + sz; - - vector_type v(first, last); - - CPPUNIT_ASSERT( all_elements(v == v1) ); -} - -/* - * Vector (InputIterator first, int sz) - */ -template -void -TestConstruction::vector_ctor2() { - T data[] = {1,2,3}; - - int sz = sizeof(data)/sizeof(T); - T* first = data; - - vector_type v(first, sz); - - CPPUNIT_ASSERT( all_elements(v == v1) ); -} - -/* - * Vector (value_type rhs) - */ -template -void -TestConstruction::vector_ctor3() { - - vector_type one(static_cast(1.0)); - vector_type zero(static_cast(0.0)); - - CPPUNIT_ASSERT( all_elements(one == vOne) ); - CPPUNIT_ASSERT( all_elements(zero == vZero) ); -} - -/* - * Vector (value_type x0, value_type x1, value_type x2) - * TODO: check for other length too. - */ -template -void -TestConstruction::vector_ctor4() { - vector_type v(1,2,3); - - CPPUNIT_ASSERT( all_elements(v == v1) ); -} - -/* - * Vector (XprVector< E, Sz > expr) - * Note: a little bit dangerous, since we haven't check expr yet. - */ -template -void -TestConstruction::vector_ctor5() { - vector_type v(v1 - v1); - - CPPUNIT_ASSERT( all_elements(v == vZero) ); -} - -/* - * operator=(const Vector< T2, Sz > &) - */ -template -void -TestConstruction::vector_ctor6() { - vector_type v; - v = v1; - - CPPUNIT_ASSERT( all_elements(v == v1) ); -} - -/* - * Vector (const this_type &rhs) - */ -template -void -TestConstruction::vector_cctor() { - vector_type v(v1); - - CPPUNIT_ASSERT( all_elements(v == v1) ); -} - - -/***************************************************************************** - * Implementation Part III (Matrizes) - ****************************************************************************/ - -/* - * Matrix (InputIterator first, InputIterator last) - */ -template -void -TestConstruction::matrix_ctor1() { - T data[] = { 1,4,7, - 2,5,8, - 3,6,9 }; - - int sz = sizeof(data)/sizeof(T); - T* first = data; - T* last = data + sz; - - matrix_type m(first, last); - - CPPUNIT_ASSERT( all_elements(m == m1) ); -} - -/* - * Matrix (InputIterator first, int sz) - */ -template -void -TestConstruction::matrix_ctor2() { - T data[] = { 1,4,7, - 2,5,8, - 3,6,9 }; - - int sz = sizeof(data)/sizeof(T); - T* first = data; - - matrix_type m(first, sz); - - CPPUNIT_ASSERT( all_elements(m == m1) ); -} - -/* - * Matrix (value_type rhs) - */ -template -void -TestConstruction::matrix_ctor3() { - matrix_type one(static_cast(1.0)); - matrix_type zero(static_cast(0.0)); - - CPPUNIT_ASSERT( all_elements(one == mOne) ); - CPPUNIT_ASSERT( all_elements(zero == mZero) ); -} - -/* - * Matrix (XprMatrix< E, Rows, Cols > expr) - * Note: a little bit dangerous, since we haven't check expr yet. - */ -template -void -TestConstruction::matrix_ctor4() { - matrix_type m(m1 - m1); - - CPPUNIT_ASSERT( all_elements(m == mZero) ); -} - -/* - * operator= (value_type rhs) - */ -template -void -TestConstruction::matrix_ctor5() { - matrix_type m; - m = m1; - - CPPUNIT_ASSERT( all_elements(m == m1) ); -} - -/* - * Matrix (const this_type &rhs) - */ -template -void -TestConstruction::matrix_cctor() { - matrix_type m(m1); - - CPPUNIT_ASSERT( all_elements(m == m1) ); -} - -#endif // TVMET_TEST_CONSTRUCTION_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestDimension.h b/tvmet-1.7.1/testsuite/TestDimension.h deleted file mode 100644 index f524b1167..000000000 --- a/tvmet-1.7.1/testsuite/TestDimension.h +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestDimension.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_DIMENSION_H -#define TVMET_TEST_DIMENSION_H - -#include - -#include -#include - -template -class TestDimension : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestDimension ); - CPPUNIT_TEST( small_add ); - CPPUNIT_TEST( Mtx ); - CPPUNIT_TEST( MtM ); - CPPUNIT_TEST( MMt ); - CPPUNIT_TEST( MMt ); - CPPUNIT_TEST( trans_MM ); - CPPUNIT_TEST( Row ); - CPPUNIT_TEST( Col ); - CPPUNIT_TEST_SUITE_END(); - -public: - TestDimension() { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void small_add(); - void Mtx(); - void MtM(); - void MMt(); - void trans_MM(); - void Row(); - void Col(); -}; - -/***************************************************************************** - * Implementation part I (cppunit part) - ****************************************************************************/ - -template -void TestDimension::setUp() { } - -template -void TestDimension::tearDown() { } - -/***************************************************************************** - * Implementation part II - ****************************************************************************/ - -template -void TestDimension::small_add() { - using namespace tvmet; - - Matrix M1, M2, M3; - - M1 = - 1,1,1, - 1,1,1, - 1,1,1, - 1,1,1, - 1,1,1; - M2 = M1; - - M3 = M1 + M2; - - CPPUNIT_ASSERT( all_elements(M3 == 2) ); -} - - -template -void TestDimension::Mtx() { - using namespace tvmet; - - Matrix M1; - - Vector v1; - Vector r(0), v2(0); - - M1 = - 1, 2, 3, - 4, 5, 6, - 7, 8, 9, - 10,11,12, - 13,14,15, - 16,17,18; - v1 = 1,2,3,4,5,6; - - r = trans(M1)*v1; - - v2 = Mtx_prod(M1, v1); - - CPPUNIT_ASSERT( all_elements(r == v2) ); -} - - -template -void TestDimension::MtM() { - using namespace tvmet; - - Matrix M1; - Matrix M2; - Matrix r(0), M3(0); - - M1 = - 1, 2, 3, - 4, 5, 6, - 7, 8, 9, - 10,11,12, - 13,14,15, - 16,17,18; - M2 = - 1, 2, - 3, 4, - 5, 6, - 7, 8, - 9,10, - 11,12; - - r = prod(trans(M1),M2); - - M3 = MtM_prod(M1, M2); - - CPPUNIT_ASSERT( all_elements(r == M3) ); -} - - -template -void TestDimension::MMt() { - using namespace tvmet; - - Matrix M1; - Matrix M2; - Matrix M3(0), r(0); - - M1 = - 1, 2, 3, 4, - 5, 6, 7, 8, - 9, 10,11,12; - M2 = - 1,2,3,4, - 5,6,7,8; - - r = M1*trans(M2); - - M3 = MMt_prod(M1,M2); - - CPPUNIT_ASSERT( all_elements(r == M3) ); -} - - -template -void TestDimension::trans_MM() { - using namespace tvmet; - - Matrix M1; - Matrix M2; - Matrix r(0), M3(0); - - M1 = - 1, 2, 3, - 4, 5, 6, - 7, 8, 9, - 10,11,12, - 13,14,15, - 16,17,18; - M2 = - 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10,11,12, - 13,14,15,16,17,18; - - r = trans(prod(M1, M2)); - - M3 = trans_prod(M1, M2); - - CPPUNIT_ASSERT( all_elements(r == M3) ); -} - - -template -void TestDimension::Row() { - using namespace tvmet; - - Matrix M; - Vector v; - Vector r0(1,2,3); - Vector r5(16,17,18); - - M = - 1, 2, 3, - 4, 5, 6, - 7, 8, 9, - 10,11,12, - 13,14,15, - 16,17,18; - - v = row(M, 0); - CPPUNIT_ASSERT( all_elements(v == r0) ); - - v = row(M, 5); - CPPUNIT_ASSERT( all_elements(v == r5) ); -} - - -template -void TestDimension::Col() { - using namespace tvmet; - - Matrix M; - Vector v; - Vector c0(1,7,13); - Vector c5(6,12,18); - - M = - 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10,11,12, - 13,14,15,16,17,18; - - v = col(M, 0); - CPPUNIT_ASSERT( all_elements(v == c0) ); - - v = col(M, 5); - CPPUNIT_ASSERT( all_elements(v == c5) ); -} - -#endif // TVMET_TEST_DIMENSION_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestMathOps.h b/tvmet-1.7.1/testsuite/TestMathOps.h deleted file mode 100644 index 47ba7a547..000000000 --- a/tvmet-1.7.1/testsuite/TestMathOps.h +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestMathOps.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_MATHOPS_H -#define TVMET_TEST_MATHOPS_H - -#include - -#include -#include -#include - -template -class TestMathOps : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestMathOps ); - CPPUNIT_TEST( ScalarAssign ); - CPPUNIT_TEST( Assign ); - CPPUNIT_TEST( ScalarOps ); - CPPUNIT_TEST( Ops1 ); - CPPUNIT_TEST( Ops2 ); - CPPUNIT_TEST( VectorOps ); - CPPUNIT_TEST( VectorOps2 ); - CPPUNIT_TEST( VectorNorm2 ); - CPPUNIT_TEST( MatrixOps ); - CPPUNIT_TEST( MatrixVector1 ); - CPPUNIT_TEST( MatrixVector2 ); - CPPUNIT_TEST( MatrixTransMatrix ); - CPPUNIT_TEST( MatrixTransVector ); - CPPUNIT_TEST( MatrixRowVector ); - CPPUNIT_TEST( MatrixColVector ); - CPPUNIT_TEST( MatrixDiagVector ); - CPPUNIT_TEST( MatrixMatrixVector ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestMathOps() - : vZero(0), vOne(1), mZero(0), mOne(1), scalar(10) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void ScalarAssign(); - void Assign(); - void ScalarOps(); - void Ops1(); - void Ops2(); - void VectorOps(); - void VectorOps2(); - void VectorNorm2(); - void MatrixOps(); - void MatrixVector1(); - void MatrixVector2(); - void MatrixTransMatrix(); - void MatrixTransVector(); - void MatrixRowVector(); - void MatrixColVector(); - void MatrixDiagVector(); - void MatrixMatrixVector(); - -private: - const vector_type vZero; - const vector_type vOne; - vector_type v1, v1b; - vector_type vBig; /**< vector 10x bigger than v1 */ - -private: - const matrix_type mZero; - const matrix_type mOne; - matrix_type m1, m1b; - matrix_type mBig; /**< matrix 10x bigger than m1 */ - -private: - vector_type m1_r0, m1_r1, m1_r2; // row vectors - vector_type m1_c0, m1_c1, m1_c2; // col vectors - -private: - const T scalar; -}; - -/***************************************************************************** - * Implementation - ****************************************************************************/ - -/* - * cppunit part - */ -template -void TestMathOps::setUp() { - v1 = 1,2,3; - v1b = v1; // same as v1, cctor test done in checkInternal - vBig = 10,20,30; - - m1 = 1,4,7, - 2,5,8, - 3,6,9; - - m1_r0 = 1,4,7; - m1_r1 = 2,5,8; - m1_r2 = 3,6,9; - - m1_c0 = 1,2,3; - m1_c1 = 4,5,6; - m1_c2 = 7,8,9; - - m1b = m1; // same as m1, cctor test done in checkInternal - - mBig = 10,40,70, - 20,50,80, - 30,60,90; - -} - -template -void TestMathOps::tearDown() { - -} - -/* - * regressions - */ -template -void -TestMathOps::ScalarAssign() { - { - vector_type t1(v1), t2(v1), t3(v1), t4(vBig); - - t1 += scalar; - t2 -= scalar; - t3 *= scalar; - t4 /= scalar; - - CPPUNIT_ASSERT(t1(0) == (v1(0)+scalar) && t1(1) == (v1(1)+scalar) && t1(2) == (v1(2)+scalar)); - CPPUNIT_ASSERT(t2(0) == (v1(0)-scalar) && t2(1) == (v1(1)-scalar) && t2(2) == (v1(2)-scalar)); - CPPUNIT_ASSERT( all_elements(t3 == vBig) ); - CPPUNIT_ASSERT( all_elements(t4 == v1) ); - } - { - matrix_type t1(m1), t2(m1), t3(m1), t4(mBig); - - t1 += scalar; - t2 -= scalar; - t3 *= scalar; - t4 /= scalar; - - CPPUNIT_ASSERT(t1(0,0) == (m1(0,0)+scalar) && t1(0,1) == (m1(0,1)+scalar) && t1(0,2) == (m1(0,2)+scalar) && - t1(1,0) == (m1(1,0)+scalar) && t1(1,1) == (m1(1,1)+scalar) && t1(1,2) == (m1(1,2)+scalar) && - t1(2,0) == (m1(2,0)+scalar) && t1(2,1) == (m1(2,1)+scalar) && t1(2,2) == (m1(2,2)+scalar)); - CPPUNIT_ASSERT(t2(0,0) == (m1(0,0)-scalar) && t2(0,1) == (m1(0,1)-scalar) && t2(0,2) == (m1(0,2)-scalar) && - t2(1,0) == (m1(1,0)-scalar) && t2(1,1) == (m1(1,1)-scalar) && t2(1,2) == (m1(1,2)-scalar) && - t2(2,0) == (m1(2,0)-scalar) && t2(2,1) == (m1(2,1)-scalar) && t2(2,2) == (m1(2,2)-scalar)); - CPPUNIT_ASSERT( all_elements(t3 == mBig) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); - } -} - -template -void -TestMathOps::Assign() { - { - vector_type t1(vZero), t2(v1), t3(v1); - - t1 += v1; - t2 -= v1; - t3 *= v1; - - CPPUNIT_ASSERT( all_elements(t1 == v1) ); - CPPUNIT_ASSERT( all_elements(t2 == vZero) ); - CPPUNIT_ASSERT(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2))); - } - { - matrix_type t1(mZero), t2(m1), t3(m1); - - t1 += m1; - t2 -= m1; - - CPPUNIT_ASSERT( all_elements(t1 == m1) ); - CPPUNIT_ASSERT( all_elements(t2 == mZero) ); - } -} - -template -void -TestMathOps::ScalarOps() { - { - vector_type t1(v1), t2(v1), t3(v1), t4(vBig); - vector_type r1(v1), r2(v1); - r1 += scalar; - r2 -= scalar; - - t1 = t1 + scalar; - t2 = t2 - scalar; - t3 = t3 * scalar; - t4 = t4 / scalar; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == vBig) ); - CPPUNIT_ASSERT( all_elements(t4 == v1) ); - } - { - matrix_type t1(m1), t2(m1), t3(m1), t4(mBig); - matrix_type r1(m1), r2(m1); - r1 += scalar; - r2 -= scalar; - - t1 = t1 + scalar; - t2 = t2 - scalar; - t3 = t3 * scalar; - t4 = t4 / scalar; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == mBig) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); - } -} - -template -void -TestMathOps::Ops1() { - { - vector_type t1(0), t2(0), t3(0); - vector_type r(v1); - r *= v1; - - t1 = v1 + v1; - t2 = v1 - v1; - t3 = v1 * v1; - - CPPUNIT_ASSERT( all_elements(t1 == T(2)*v1) ); - CPPUNIT_ASSERT( all_elements(t2 == vZero) ); - CPPUNIT_ASSERT( all_elements(t3 == r) ); - } - { - matrix_type t1(0), t2(0); - t1 = m1 + m1; - t2 = m1 - m1; - - CPPUNIT_ASSERT( all_elements(t1 == T(2)*m1) ); - CPPUNIT_ASSERT( all_elements(t2 == mZero) ); - } -} - -template -void -TestMathOps::Ops2() { - const vector_type vMinusOne(-1); - const matrix_type mMinusOne(-1); - - // negate operator - { - vector_type t1, t2; - - t1 = abs(v1); - CPPUNIT_ASSERT( all_elements(t1 == v1) ); - - t1 = -vOne; - CPPUNIT_ASSERT( all_elements(t1 == vMinusOne) ); - } - { - matrix_type t1, t2; - - t1 = abs(m1); - CPPUNIT_ASSERT( all_elements(t1 == m1) ); - - t1 = -mOne; - CPPUNIT_ASSERT( all_elements(t1 == mMinusOne) ); - - } -} - -template -void -TestMathOps::VectorOps() { - -} - -template -void -TestMathOps::VectorOps2() { -} - -template -void -TestMathOps::VectorNorm2() { - // casts for int vectors, as well as for complex<> since - // norm2 returns sum_type - CPPUNIT_ASSERT( norm2(v1) == static_cast(std::sqrt(14.0))); -} - -template -void -TestMathOps::MatrixOps() { - matrix_type t1, t2, t3; - matrix_type r1, r2, r3; - - tvmet::util::Gemm(m1, m1, r1); - tvmet::util::Gemm(m1, mBig, r2); - tvmet::util::Gemm(mBig, m1, r3); - CPPUNIT_ASSERT( all_elements(r2 == r3) ); - - t1 = m1 * m1; - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - - t2 = m1 * mBig; - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - - t3 = mBig * m1; - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - - t3 = trans(t1); - CPPUNIT_ASSERT( any_elements(t3 != t1) ); // XXX very simple test - t2 = trans(t3); - CPPUNIT_ASSERT( all_elements(t1 == t2) ); - - // trace return sum_type, therefore the cast for complex<> - CPPUNIT_ASSERT( static_cast(trace(m1)) == static_cast(15) ); -} - -template -void -TestMathOps::MatrixVector1() { - - vector_type t1, t2; - vector_type vr1(0), vr2(0); // clear it before use due to util::Gemv algo - - // Matrix-Vector - tvmet::util::Gemv(m1, v1, vr1); - tvmet::util::Gemv(mBig, vBig, vr2); - - t1 = m1 * v1; - t2 = mBig * vBig; - - CPPUNIT_ASSERT( all_elements(t1 == vr1) ); - CPPUNIT_ASSERT( all_elements(t2 == vr2) ); -} - -template -void -TestMathOps::MatrixVector2() { - - vector_type t1, t2; - vector_type vr(0), v2(0); // clear it before use due to util::Gemv algo - - // Matrix-XprVector - v2 = v1 * vBig; - tvmet::util::Gemv(m1, v2, vr); - - t1 = m1 * (v1*vBig); - - CPPUNIT_ASSERT( all_elements(t1 == vr) ); -} - -template -void -TestMathOps::MatrixTransMatrix() { - // greatings to - { - matrix_type m1t, Mr, M2; - - // trans() and prod() is checked before! - m1t = trans(m1); - Mr = prod(m1t, mBig); - - M2 = MtM_prod(m1, mBig); - - CPPUNIT_ASSERT( all_elements(Mr == M2) ); - } -} - -template -void -TestMathOps::MatrixTransVector() { - // greatings to - { - matrix_type Mt; - vector_type vr, y; - - // trans() and prod() is checked before! - Mt = trans(m1); - vr = Mt*v1; - y = Mtx_prod(m1, v1); - - CPPUNIT_ASSERT( all_elements(vr == y) ); - } -} - -template -void -TestMathOps::MatrixRowVector() { - vector_type r0, r1, r2; - - r0 = row(m1, 0); - r1 = row(m1, 1); - r2 = row(m1, 2); - - CPPUNIT_ASSERT( all_elements(r0 == m1_r0) ); - CPPUNIT_ASSERT( all_elements(r1 == m1_r1) ); - CPPUNIT_ASSERT( all_elements(r2 == m1_r2) ); -} - -template -void -TestMathOps::MatrixColVector() { - vector_type c0, c1, c2; - - c0 = col(m1, 0); - c1 = col(m1, 1); - c2 = col(m1, 2); - - CPPUNIT_ASSERT( all_elements(c0 == m1_c0) ); - CPPUNIT_ASSERT( all_elements(c1 == m1_c1) ); - CPPUNIT_ASSERT( all_elements(c2 == m1_c2) ); -} - -template -void -TestMathOps::MatrixDiagVector() { - vector_type vd, t; - - vd = T(1), T(5), T(9); - - t = diag(m1); - - CPPUNIT_ASSERT( all_elements(vd == t) ); -} - -template -void -TestMathOps::MatrixMatrixVector() { - { - vector_type t1; - vector_type vr1(0), vr2(0); // clear it before use due to util::Gemv algo - - // Matrix-Vector-Vector, referenz is using two ops - tvmet::util::Gemv(m1, v1, vr1); - tvmet::util::Gevvmul(vr1, vBig, vr2); - - t1 = m1 * v1 * vBig; - CPPUNIT_ASSERT( all_elements(t1 == vr2) ); - } -#if 0 - { - // XXX not working due to missing operators for (XprMatrix, Vector) - vector_type t; - matrix_type vr1; - vector_type vr2; - - // Matrix-Matrix-Vector - tvmet::util::Gemm(m1, mBig, vr1); - tvmet::util::Gemv(vr1, v1, vr2); - - } -#endif -} - -#endif // TVMET_TEST_MATHOPS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestMatrixElementwise.h b/tvmet-1.7.1/testsuite/TestMatrixElementwise.h deleted file mode 100644 index 39ec4776b..000000000 --- a/tvmet-1.7.1/testsuite/TestMatrixElementwise.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestMatrixElementwise.h,v 1.2 2005/03/09 11:11:53 opetzold Exp $ - */ - -#ifndef TVMET_TEST_MATRIX_ELEMENTWISE_H -#define TVMET_TEST_MATRIX_ELEMENTWISE_H - -#include - -#include -#include - -template -class TestMatrixElementwise : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestMatrixElementwise ); - CPPUNIT_TEST( sqr_add ); - CPPUNIT_TEST( sqr_xpr_add ); - CPPUNIT_TEST( sqr_mul ); - CPPUNIT_TEST( sqr_xpr_mul ); - CPPUNIT_TEST( nsqr_add ); - CPPUNIT_TEST( nsqr_xpr_add ); - CPPUNIT_TEST( nsqr_mul ); - CPPUNIT_TEST( nsqr_xpr_mul ); - CPPUNIT_TEST_SUITE_END(); - -public: - TestMatrixElementwise() { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void sqr_add(); - void sqr_xpr_add(); - void sqr_mul(); - void sqr_xpr_mul(); - - void nsqr_add(); - void nsqr_xpr_add(); - void nsqr_mul(); - void nsqr_xpr_mul(); -}; - -/***************************************************************************** - * Implementation part I (cppunit part) - ****************************************************************************/ - -template -void TestMatrixElementwise::setUp() { } - -template -void TestMatrixElementwise::tearDown() { } - -/***************************************************************************** - * Implementation part II, square matrices - ****************************************************************************/ - -template -void TestMatrixElementwise::sqr_add() { - using namespace tvmet; - - Matrix M1, M2, Mr1, Mr2; - - M1 = 2; - M2 = 2; - - Mr1 = M1 + M2; - Mr2 = add(M1, M1); - - CPPUNIT_ASSERT( all_elements(Mr1 == 4) ); - CPPUNIT_ASSERT( all_elements(Mr2 == 4) ); -} - - -template -void TestMatrixElementwise::sqr_xpr_add() { - using namespace tvmet; - - Matrix M1, M2, Mr1, Mr2; - - M1 = 1; - M2 = 1; - - T c1 = 1; - T c2 = 1; - - Mr1 = (c1+M1) + (c2+M2); - Mr2 = add(add(c1,M1), add(c2,M1)); - - CPPUNIT_ASSERT( all_elements(Mr1 == 4) ); - CPPUNIT_ASSERT( all_elements(Mr2 == 4) ); -} - - -template -void TestMatrixElementwise::sqr_mul() { - using namespace tvmet; - - Matrix M1, M2, Mr1, Mr2; - - M1 = 2; - M2 = 2; - - Mr1 = element_wise::operator*(M1, M2); - Mr2 = element_wise::mul(M1, M2); - - CPPUNIT_ASSERT( all_elements(Mr1 == 4) ); - CPPUNIT_ASSERT( all_elements(Mr2 == 4) ); -} - - -template -void TestMatrixElementwise::sqr_xpr_mul() { - using namespace tvmet; - - Matrix M1, M2, Mr1, Mr2; - - M1 = 2; - M2 = 2; - - T c1 = 1; - T c2 = 1; - - Mr1 = element_wise::operator*(c1*M1, c2*M2); - Mr2 = element_wise::mul(mul(c1, M1), mul(c2, M2)); - - CPPUNIT_ASSERT( all_elements(Mr1 == 4) ); - CPPUNIT_ASSERT( all_elements(Mr2 == 4) ); -} - - -/***************************************************************************** - * Implementation part II, non square matrices - ****************************************************************************/ - -template -void TestMatrixElementwise::nsqr_add() { - using namespace tvmet; - - Matrix M1, M2, Mr1, Mr2; - - M1 = 2; - M2 = 2; - - Mr1 = M1 + M2; - Mr2 = add(M1, M1); - - CPPUNIT_ASSERT( all_elements(Mr1 == 4) ); - CPPUNIT_ASSERT( all_elements(Mr2 == 4) ); -} - - -template -void TestMatrixElementwise::nsqr_xpr_add() { - using namespace tvmet; - - Matrix M1, M2, Mr1, Mr2; - - M1 = 1; - M2 = 1; - - T c1 = 1; - T c2 = 1; - - Mr1 = (c1+M1) + (c2+M2); - Mr2 = add(add(c1,M1), add(c2,M1)); - - CPPUNIT_ASSERT( all_elements(Mr1 == 4) ); - CPPUNIT_ASSERT( all_elements(Mr2 == 4) ); -} - - -template -void TestMatrixElementwise::nsqr_mul() { - using namespace tvmet; - - Matrix M1, M2, Mr1, Mr2; - - M1 = 2; - M2 = 2; - - Mr1 = element_wise::operator*(M1, M2); - Mr2 = element_wise::mul(M1, M2); - - CPPUNIT_ASSERT( all_elements(Mr1 == 4) ); - CPPUNIT_ASSERT( all_elements(Mr2 == 4) ); -} - - -template -void TestMatrixElementwise::nsqr_xpr_mul() { - using namespace tvmet; - - Matrix M1, M2, Mr1, Mr2; - - M1 = 2; - M2 = 2; - - T c1 = 1; - T c2 = 1; - - Mr1 = element_wise::operator*(c1*M1, c2*M2); - Mr2 = element_wise::mul(mul(c1, M1), mul(c2, M2)); - - CPPUNIT_ASSERT( all_elements(Mr1 == 4) ); - CPPUNIT_ASSERT( all_elements(Mr2 == 4) ); -} - - -#endif // TVMET_TEST_MATRIX_ELEMENTWISE_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestMatrixEval.h b/tvmet-1.7.1/testsuite/TestMatrixEval.h deleted file mode 100644 index 63c5a95b8..000000000 --- a/tvmet-1.7.1/testsuite/TestMatrixEval.h +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestMatrixEval.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_MATRIX_EVAL_H -#define TVMET_TEST_MATRIX_EVAL_H - -#include - -#include - -#include - -template -class TestMatrixEval : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestMatrixEval ); - CPPUNIT_TEST( Greater ); - CPPUNIT_TEST( Less ); - CPPUNIT_TEST( GreaterOrEqual ); - CPPUNIT_TEST( LessOrEqual ); - CPPUNIT_TEST( Equal ); - CPPUNIT_TEST( NotEqual ); - CPPUNIT_TEST( LogicalAnd ); - CPPUNIT_TEST( LogicalOr ); - - // others - CPPUNIT_TEST( AllElements ); - CPPUNIT_TEST( AnyElements ); - CPPUNIT_TEST( Eval3 ); - CPPUNIT_TEST( EvalPod3 ); - - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Matrix matrix_type; - -public: - TestMatrixEval() - : mOne(1), mZero(0) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void Greater(); - void Less(); - void GreaterOrEqual(); - void LessOrEqual(); - void Equal(); - void NotEqual(); - void LogicalAnd(); - void LogicalOr(); - - void AllElements(); - void AnyElements(); - void Eval3(); - void EvalPod3(); - -private: - matrix_type m1; - matrix_type mBig; /**< matrix bigger than m1 */ - const matrix_type mOne; - const matrix_type mZero; -}; - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - -template -void TestMatrixEval::setUp () { - m1 = 1,4,7, - 2,5,8, - 3,6,9; - mBig = 10,40,70, - 20,50,80, - 30,60,90; -} - -template -void TestMatrixEval::tearDown() { } - -/***************************************************************************** - * Implementation Part II - * these are elemental - therefore we use std::assert - ****************************************************************************/ - -/* - * on SelfTest, we have the guarantee, that the container holds the - * expected values. Now check comparing operation using tvmet's - * eval function. This is the basic for all further test since it's - * the way we check the correctness. The other way would be element wise - * compare as in SelfTest, urgh... - */ -template -void -TestMatrixEval::Greater() { - // all test are element wise ! - assert( all_elements(mBig > m1) ); -} - -template -void -TestMatrixEval::Less() { - // all test are element wise ! - assert( all_elements(m1 < mBig) ); -} - -template -void -TestMatrixEval::GreaterOrEqual() { - // all test are element wise ! - assert( all_elements(mBig >= m1) ); - assert( all_elements(m1 >= m1) ); - assert( all_elements(mBig >= mBig) ); - assert( all_elements(mOne >= T(1)) ); - assert( all_elements(mZero>= T(0)) ); -} - -template -void -TestMatrixEval::LessOrEqual() { - // all test are element wise ! - assert( all_elements(m1 <= mBig) ); - assert( all_elements(m1 <= m1) ); - assert( all_elements(mBig <= mBig) ); - assert( all_elements(mOne <= T(1)) ); - assert( all_elements(mZero<= T(0)) ); -} - -template -void -TestMatrixEval::Equal() { - // all test are element wise ! - assert( all_elements(m1 == m1) ); - assert( all_elements(mBig == mBig) ); - assert( all_elements(mOne == T(1)) ); - assert( all_elements(mZero == T(0)) ); -} - -template -void -TestMatrixEval::NotEqual() { - // all test are element wise ! - assert( all_elements(m1 != mBig) ); -} - -template -void -TestMatrixEval::LogicalAnd() { - // TODO: implement -} - -template -void -TestMatrixEval::LogicalOr() { - // TODO: implement -} - -/***************************************************************************** - * Implementation Part III - * test on generell and eval functions - ****************************************************************************/ - -template -void -TestMatrixEval::AllElements() { - // true cases - CPPUNIT_ASSERT( all_elements(mBig > T(0)) ); - CPPUNIT_ASSERT( all_elements(mBig >= T(1)) ); - - CPPUNIT_ASSERT( all_elements(mBig < T(1000)) ); - CPPUNIT_ASSERT( all_elements(mBig <= T(1000)) ); - - CPPUNIT_ASSERT( all_elements(T(0) < mBig) ); // possible, I newer would write it - CPPUNIT_ASSERT( all_elements(T(1000) > mBig) ); // possible, I newer would write it - - CPPUNIT_ASSERT( all_elements(mOne == T(1)) ); - CPPUNIT_ASSERT( all_elements(mZero == T(0)) ); - - CPPUNIT_ASSERT( all_elements(mBig != T(1000)) ); - - // false cases - CPPUNIT_ASSERT( !all_elements(mBig < T(0)) ); -} - - -template -void -TestMatrixEval::AnyElements() { - // true cases - CPPUNIT_ASSERT( any_elements(mBig > T(0)) ); - CPPUNIT_ASSERT( any_elements(mBig >= T(1)) ); - - CPPUNIT_ASSERT( any_elements(mBig < T(1000)) ); - CPPUNIT_ASSERT( any_elements(mBig <= T(1000)) ); - - CPPUNIT_ASSERT( any_elements(T(2) < m1) ); // possible, I newer would write it - CPPUNIT_ASSERT( any_elements(T(2) > m1) ); // possible, I newer would write it - - CPPUNIT_ASSERT( any_elements(mOne == T(1)) ); - CPPUNIT_ASSERT( any_elements(mZero == T(0)) ); - - CPPUNIT_ASSERT( any_elements(mBig != T(1000)) ); - - // false cases - CPPUNIT_ASSERT( !any_elements(mBig < T(2)) ); - CPPUNIT_ASSERT( !any_elements(mOne == T(0)) ); - CPPUNIT_ASSERT( !any_elements(mZero == T(1)) ); -} - - -template -void -TestMatrixEval::Eval3() { - matrix_type v; - T a(1); // scalar - - // XprMatrix ? Matrix : Matrix - v = eval( m1 < mBig, m1, mBig); - CPPUNIT_ASSERT( all_elements(v == m1) ); - - v = eval( m1 > mBig, m1, mBig); - CPPUNIT_ASSERT( all_elements(v == mBig) ); - - // XprMatrix ? Matrix : XprMatrix - v = eval( m1 < mBig, m1, a*mBig); - CPPUNIT_ASSERT( all_elements(v == m1) ); - - v = eval( m1 > mBig, m1, a*mBig); - CPPUNIT_ASSERT( all_elements(v == mBig) ); - - // XprMatrix ? XprMatrix : Matrix - v = eval( m1 < mBig, a*m1, mBig); - CPPUNIT_ASSERT( all_elements(v == m1) ); - - v = eval( m1 > mBig, a*m1, mBig); - CPPUNIT_ASSERT( all_elements(v == mBig) ); - - // XprMatrix ? XprMatrix : XprMatrix - v = eval( m1 < mBig, a*m1, a*mBig); - CPPUNIT_ASSERT( all_elements(v == m1) ); - - v = eval( m1 > mBig, a*m1, a*mBig); - CPPUNIT_ASSERT( all_elements(v == mBig) ); -} - - -template -void -TestMatrixEval::EvalPod3() { - matrix_type v; - T a(1); // scalar - - // XprMatrix ? POD1 : POD2 - v = eval( m1 < mBig, T(0), T(1)); - CPPUNIT_ASSERT( all_elements(v == T(0)) ); - - v = eval( m1 > mBig, T(0), T(1)); - CPPUNIT_ASSERT( all_elements(v == T(1)) ); - - // XprMatrix ? POD : XprMatrix - v = eval( m1 < mBig, 1, a*mBig); - CPPUNIT_ASSERT( all_elements(v == mOne) ); - - v = eval( m1 > mBig, 1, a*mBig); - CPPUNIT_ASSERT( all_elements(v == mBig) ); - - // XprMatrix ? XprMatrix : POD - v = eval( m1 < mBig, a*m1, T(1)); - CPPUNIT_ASSERT( all_elements(v == m1) ); - - v = eval( m1 > mBig, a*m1, T(1)); - CPPUNIT_ASSERT( all_elements(v == mOne) ); - -} - - -#endif // TVMET_TEST_MATRIX_EVAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestMatrixFunctions.h b/tvmet-1.7.1/testsuite/TestMatrixFunctions.h deleted file mode 100644 index a234ceef6..000000000 --- a/tvmet-1.7.1/testsuite/TestMatrixFunctions.h +++ /dev/null @@ -1,713 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestMatrixFunctions.h,v 1.2 2004/07/06 06:24:23 opetzold Exp $ - */ - -#ifndef TVMET_TEST_MATRIXFUNC_H -#define TVMET_TEST_MATRIXFUNC_H - -#include - -#include -#include -#include - -template -class TestMatrixFunctions : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestMatrixFunctions ); - CPPUNIT_TEST( scalarUpdAssign1 ); - CPPUNIT_TEST( scalarUpdAssign2 ); - CPPUNIT_TEST( scalarUpdAssign3 ); - CPPUNIT_TEST( scalarOps1 ); - CPPUNIT_TEST( scalarOps2 ); - CPPUNIT_TEST( globalMatrixFuncs1 ); - CPPUNIT_TEST( globalMatrixFuncs2 ); - CPPUNIT_TEST( globalMatrixFuncs3 ); - CPPUNIT_TEST( fn_prod1 ); - CPPUNIT_TEST( fn_prod2 ); - CPPUNIT_TEST( fn_prod3 ); - CPPUNIT_TEST( fn_trans ); - CPPUNIT_TEST( fn_MtM_prod ); - CPPUNIT_TEST( fn_MMt_prod ); - CPPUNIT_TEST( fn_prodTrans ); - CPPUNIT_TEST( fn_trace ); - CPPUNIT_TEST( rowVector ); - CPPUNIT_TEST( colVector ); - CPPUNIT_TEST( fn_diag ); - CPPUNIT_TEST( extremum ); - CPPUNIT_TEST( identity_matrix ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestMatrixFunctions() - : mZero(0), mOne(1), scalar(10), scalar2(2) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void scalarUpdAssign1(); - void scalarUpdAssign2(); - void scalarUpdAssign3(); - void scalarOps1(); - void scalarOps2(); - void globalMatrixFuncs1(); - void globalMatrixFuncs2(); - void globalMatrixFuncs3(); - void fn_prod1(); - void fn_prod2(); - void fn_prod3(); - void fn_trans(); - void fn_MtM_prod(); - void fn_MMt_prod(); - void fn_prodTrans(); - void fn_trace(); - void rowVector(); - void colVector(); - void fn_diag(); - void extremum(); - void identity_matrix(); - -private: - const matrix_type mZero; - const matrix_type mOne; - matrix_type m1; - matrix_type mBig; /**< matrix 10x bigger than m1 */ - -private: - vector_type m1_r0, m1_r1, m1_r2; // row vectors - vector_type m1_c0, m1_c1, m1_c2; // col vectors - -private: - const T scalar; - const T scalar2; -}; - - -/***************************************************************************** - * Implementation Part I (cppunit part) - *** *************************************************************************/ - - -template -void TestMatrixFunctions::setUp() { - m1 = 1,4,7, - 2,5,8, - 3,6,9; - - m1_r0 = 1,4,7; - m1_r1 = 2,5,8; - m1_r2 = 3,6,9; - - m1_c0 = 1,2,3; - m1_c1 = 4,5,6; - m1_c2 = 7,8,9; - - mBig = 10,40,70, - 20,50,80, - 30,60,90; -} - -template -void TestMatrixFunctions::tearDown() { } - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -/* - * member math operators with scalars - * Since we use it to compare results, these tests are elemental. - */ -template -void -TestMatrixFunctions::scalarUpdAssign1() { - // all these functions are element wise - matrix_type t1(m1), t2(m1), t3(m1), t4(mBig); - - t1 += scalar; - t2 -= scalar; - t3 *= scalar; - t4 /= scalar; - - assert(t1(0,0) == (m1(0,0)+scalar) && t1(0,1) == (m1(0,1)+scalar) && t1(0,2) == (m1(0,2)+scalar) && - t1(1,0) == (m1(1,0)+scalar) && t1(1,1) == (m1(1,1)+scalar) && t1(1,2) == (m1(1,2)+scalar) && - t1(2,0) == (m1(2,0)+scalar) && t1(2,1) == (m1(2,1)+scalar) && t1(2,2) == (m1(2,2)+scalar)); - assert(t2(0,0) == (m1(0,0)-scalar) && t2(0,1) == (m1(0,1)-scalar) && t2(0,2) == (m1(0,2)-scalar) && - t2(1,0) == (m1(1,0)-scalar) && t2(1,1) == (m1(1,1)-scalar) && t2(1,2) == (m1(1,2)-scalar) && - t2(2,0) == (m1(2,0)-scalar) && t2(2,1) == (m1(2,1)-scalar) && t2(2,2) == (m1(2,2)-scalar)); - assert( all_elements(t3 == mBig) ); - assert( all_elements(t4 == m1) ); -} - - -/* - * member math operators with Matrizes - * Since we use it to compare results, these tests are elemental. - */ -template -void -TestMatrixFunctions::scalarUpdAssign2() { - // all these functions are element wise - matrix_type t1(m1), t2(m1), t3(m1), t4(m1); - - t1 += m1; - t2 -= m1; - - { - using namespace tvmet::element_wise; - - t3 *= m1; - t4 /= m1; - } - - assert(t1(0,0) == (m1(0,0)*2) && t1(0,1) == (m1(0,1)*2) && t1(0,2) == (m1(0,2)*2) && - t1(1,0) == (m1(1,0)*2) && t1(1,1) == (m1(1,1)*2) && t1(1,2) == (m1(1,2)*2) && - t1(2,0) == (m1(2,0)*2) && t1(2,1) == (m1(2,1)*2) && t1(2,2) == (m1(2,2)*2)); - assert( all_elements(t2 == mZero) ); - assert(t3(0,0) == (m1(0,0)*m1(0,0)) && t3(0,1) == (m1(0,1)*m1(0,1)) && t3(0,2) == (m1(0,2)*m1(0,2)) && - t3(1,0) == (m1(1,0)*m1(1,0)) && t3(1,1) == (m1(1,1)*m1(1,1)) && t3(1,2) == (m1(1,2)*m1(1,2)) && - t3(2,0) == (m1(2,0)*m1(2,0)) && t3(2,1) == (m1(2,1)*m1(2,1)) && t3(2,2) == (m1(2,2)*m1(2,2))); - assert( all_elements(t4 == mOne) ); -} - - -/* - * member math operators with XprMatrizes - * Since we use it to compare results, these tests are elemental. - */ -template -void -TestMatrixFunctions::scalarUpdAssign3() { - // all these functions are element wise - matrix_type t1(m1), t2(m1), t3(m1), t4(m1); - - t1 += T(1)*m1; - t2 -= T(1)*m1; - - { - using namespace tvmet::element_wise; - - t3 *= T(1)*m1; - t4 /= T(1)*m1; - } - - assert( all_elements(t1 == 2*m1) ); - assert( all_elements(t2 == mZero) ); - assert(t3(0,0) == (m1(0,0)*m1(0,0)) && t3(0,1) == (m1(0,1)*m1(0,1)) && t3(0,2) == (m1(0,2)*m1(0,2)) && - t3(1,0) == (m1(1,0)*m1(1,0)) && t3(1,1) == (m1(1,1)*m1(1,1)) && t3(1,2) == (m1(1,2)*m1(1,2)) && - t3(2,0) == (m1(2,0)*m1(2,0)) && t3(2,1) == (m1(2,1)*m1(2,1)) && t3(2,2) == (m1(2,2)*m1(2,2))); - assert( all_elements(t4 == mOne) ); -} - - -/* - * global math operators with scalars - * Note: checked against member operators since they are allready checked - */ -template -void -TestMatrixFunctions::scalarOps1() { - matrix_type r1(m1), r2(m1); - matrix_type t1(0), t2(0), t3(0), t4(0); - - r1 += scalar; - r2 -= scalar; - - t1 = add(m1, scalar); - t2 = sub(m1, scalar); - t3 = mul(m1, scalar); - t4 = div(mBig, scalar); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == mBig) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * global math operators with scalars, part II - * Note: checked against member operators since they are allready checked - */ -template -void -TestMatrixFunctions::scalarOps2() { - matrix_type r1(m1), r2(m1); - matrix_type t1(0), t2(0); - - r1 += scalar; - r2 *= scalar; - - t1 = add(scalar, m1); - t2 = mul(scalar, m1); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); -} - - -/* - * global math operators with matrizes - */ -template -void -TestMatrixFunctions::globalMatrixFuncs1() { - matrix_type t1(0), t2(0), t3(0), t4(0); - - t1 = add(m1, m1); - t2 = sub(m1, m1); - - { - using namespace tvmet::element_wise; - - t3 = mul(m1, mOne); - t4 = div(m1, mOne); - } - - CPPUNIT_ASSERT( all_elements(t1 == 2*m1) ); - CPPUNIT_ASSERT( all_elements(t2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(t3 == m1) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * global math operators with matrizes and xpr - */ -template -void -TestMatrixFunctions::globalMatrixFuncs2() { - matrix_type r1(m1), r2(m1), r3(m1), r4(m1); - matrix_type t1(0), t2(0), t3(0), t4(0); - - r1 += T(1)*m1; - r2 -= T(1)*m1; - - { - using namespace tvmet::element_wise; - - r3 *= T(1)*m1; - r4 /= T(1)*m1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = add(m1, m1*T(1)); - t2 = sub(m1, m1*T(1)); - - { - using namespace tvmet::element_wise; - - t3 = mul(m1, m1*T(1)); - t4 = div(m1, m1*T(1)); - } - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with matrizes and xpr - */ -template -void -TestMatrixFunctions::globalMatrixFuncs3() { - matrix_type r1(m1), r2(m1), r3(m1), r4(m1); - matrix_type t1(0), t2(0), t3(0), t4(0); - - r1 += T(1)*m1; - r2 -= T(1)*m1; - - { - using namespace tvmet::element_wise; - - r3 *= T(1)*m1; - r4 /= T(1)*m1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = add(T(1)*m1, m1); - t2 = sub(T(1)*m1, m1); - - { - using namespace tvmet::element_wise; - - t3 = mul(T(1)*m1, m1); - t4 = div(T(1)*m1, m1); - } - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * product functions with matrizes - */ -template -void -TestMatrixFunctions::fn_prod1() { - matrix_type t1, t2, t3; - matrix_type r1, r2, r3; - - tvmet::util::Gemm(m1, m1, r1); - tvmet::util::Gemm(m1, mBig, r2); - tvmet::util::Gemm(mBig, m1, r3); - CPPUNIT_ASSERT( all_elements(r2 == r3) ); - - t1 = prod(m1, m1); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - - t2 = prod(m1, mBig); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - - t3 = prod(mBig, m1); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); -} - - -/* - * product functions with matrizes and xpr - * Note: Take care on aliasing! - */ -template -void -TestMatrixFunctions::fn_prod2() { - matrix_type r1(0), rm(0); - matrix_type m2(m1); - matrix_type t1; - - rm = scalar*m1; - - tvmet::util::Gemm(m1, rm, r1); - - t1 = prod(m1, scalar*m2 /* alias mBig */); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); -} - - -/* - * product functions with matrizes - * Note: Take care on aliasing! - */ -template -void -TestMatrixFunctions::fn_prod3() { - matrix_type r1(0), rm(0); - matrix_type m2(m1); - matrix_type t1; - - rm = scalar*m1; - - tvmet::util::Gemm(rm, m1, r1); - - t1 = prod(scalar*m1 /* alias mBig */, m2); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); -} - - -/* - * transpose functions with matrizes - */ -template -void -TestMatrixFunctions::fn_trans() { - matrix_type t1, t2; - - t1 = trans(m1); - CPPUNIT_ASSERT( any_elements(t1 != m1) ); // XXX not very clever test - - t2 = trans(t1); // transpose back - CPPUNIT_ASSERT( all_elements(t2 == m1) ); -} - - -/* - * matrix function M^T * M - */ -template -void -TestMatrixFunctions::fn_MtM_prod() { - matrix_type m1t, r1; - matrix_type m2; - - // trans() and prod() is checked before! - m1t = trans(m1); - r1 = prod(m1t, mBig); - - m2 = MtM_prod(m1, mBig); - - CPPUNIT_ASSERT( all_elements(r1 == m2) ); -} - - -/* - * matrix function M * M^T - */ -template -void -TestMatrixFunctions::fn_MMt_prod() { - matrix_type m1t, r1; - matrix_type m2; - - // trans() and prod() is checked before! - m1t = trans(m1); - r1 = prod(mBig, m1t); - - m2 = MMt_prod(mBig, m1); - - CPPUNIT_ASSERT( all_elements(r1 == m2) ); -} - - -/* - * matrix function (M * M)^T - */ -template -void -TestMatrixFunctions::fn_prodTrans() { - matrix_type r1, r1t; - matrix_type m2; - - // trans() and prod() is checked before! - r1 = prod(m1, mBig); - r1t = trans(r1); - - m2 = trans_prod(m1, mBig); - - CPPUNIT_ASSERT( all_elements(r1t == m2) ); -} - - -/* - * trace - */ -template -void -TestMatrixFunctions::fn_trace() { - T t1 = trace(m1); - T t2 = trace(mBig); - - CPPUNIT_ASSERT( t1 == (m1(0,0)+m1(1,1)+m1(2,2)) ); - CPPUNIT_ASSERT( t2 == (mBig(0,0)+mBig(1,1)+mBig(2,2)) ); -} - - -/* - * matrix row vector - */ -template -void -TestMatrixFunctions::rowVector() { - vector_type r0, r1, r2; - - r0 = row(m1, 0); - r1 = row(m1, 1); - r2 = row(m1, 2); - - CPPUNIT_ASSERT( all_elements(r0 == m1_r0) ); - CPPUNIT_ASSERT( all_elements(r1 == m1_r1) ); - CPPUNIT_ASSERT( all_elements(r2 == m1_r2) ); -} - - -/* - * matrix col vector - */ -template -void -TestMatrixFunctions::colVector() { - vector_type c0, c1, c2; - - c0 = col(m1, 0); - c1 = col(m1, 1); - c2 = col(m1, 2); - - CPPUNIT_ASSERT( all_elements(c0 == m1_c0) ); - CPPUNIT_ASSERT( all_elements(c1 == m1_c1) ); - CPPUNIT_ASSERT( all_elements(c2 == m1_c2) ); -} - - -/* - * matrix diag vector - */ -template -void -TestMatrixFunctions::fn_diag() { - vector_type r, v; - - r = 1, 5, 9; - - v = diag(m1); - - CPPUNIT_ASSERT( all_elements(r == v) ); -} - - -/* - * extremums - */ -template -void -TestMatrixFunctions::extremum() { - CPPUNIT_ASSERT(max(m1) == 9); - CPPUNIT_ASSERT(min(m1) == 1); - - CPPUNIT_ASSERT(max(mBig) == 90); - CPPUNIT_ASSERT(min(mBig) == 10); - - CPPUNIT_ASSERT(maximum(m1).value() == 9); - CPPUNIT_ASSERT(maximum(m1).row() == 2); - CPPUNIT_ASSERT(maximum(m1).col() == 2); - - CPPUNIT_ASSERT(minimum(m1).value() == 1); - CPPUNIT_ASSERT(minimum(m1).row() == 0); - CPPUNIT_ASSERT(minimum(m1).col() == 0); - - CPPUNIT_ASSERT(maximum(mBig).value() == 90); - CPPUNIT_ASSERT(maximum(mBig).row() == 2); - CPPUNIT_ASSERT(maximum(mBig).col() == 2); - - CPPUNIT_ASSERT(minimum(mBig).value() == 10); - CPPUNIT_ASSERT(minimum(mBig).row() == 0); - CPPUNIT_ASSERT(minimum(mBig).col() == 0); -} - - -/* - * identity - */ -template -void -TestMatrixFunctions::identity_matrix() { - // XXX strange, why does we have to specify the namespace here? - // got error: identifier "identity" is undefined - matrix_type E( tvmet::identity() ); - - CPPUNIT_ASSERT( E(0,0) == 1 && - E(1,1) == 1 && - E(2,2) == 1); - - CPPUNIT_ASSERT( E(0,1) == 0 && - E(0,2) == 0 && - E(1,0) == 0 && - E(1,2) == 0 && - E(2,0) == 0 && - E(2,1) == 0); -} - - -/***************************************************************************** - * Implementation Part II (specialized for ints) - ****************************************************************************/ - - -/* - * member math operators with scalars - */ -template <> -void -TestMatrixFunctions::scalarUpdAssign1() { - // all these functions are element wise - matrix_type t1(m1), t2(m1), t3(m1), t4(mBig); - matrix_type t5(m1), t6(mBig), t7(mBig), t8(mBig), t9(mBig); - matrix_type t10(m1), t11(m1); - - t1 += scalar; - t2 -= scalar; - t3 *= scalar; - t4 /= scalar; - - t5 %= scalar; - t6 %= scalar; - t7 ^= scalar; - t8 &= scalar; - t9 |= scalar; - t10 <<= scalar; - t11 >>= scalar2; - - CPPUNIT_ASSERT(t1(0,0) == (m1(0,0)+scalar) && t1(0,1) == (m1(0,1)+scalar) && t1(0,2) == (m1(0,2)+scalar) && - t1(1,0) == (m1(1,0)+scalar) && t1(1,1) == (m1(1,1)+scalar) && t1(1,2) == (m1(1,2)+scalar) && - t1(2,0) == (m1(2,0)+scalar) && t1(2,1) == (m1(2,1)+scalar) && t1(2,2) == (m1(2,2)+scalar)); - - CPPUNIT_ASSERT(t2(0,0) == (m1(0,0)-scalar) && t2(0,1) == (m1(0,1)-scalar) && t2(0,2) == (m1(0,2)-scalar) && - t2(1,0) == (m1(1,0)-scalar) && t2(1,1) == (m1(1,1)-scalar) && t2(1,2) == (m1(1,2)-scalar) && - t2(2,0) == (m1(2,0)-scalar) && t2(2,1) == (m1(2,1)-scalar) && t2(2,2) == (m1(2,2)-scalar)); - - CPPUNIT_ASSERT( all_elements(t3 == mBig) ); - - CPPUNIT_ASSERT( all_elements(t4 == m1) ); - - CPPUNIT_ASSERT( all_elements(t5 == m1) ); - CPPUNIT_ASSERT( all_elements(t6 == mZero) ); - - CPPUNIT_ASSERT(t7(0,0) == (mBig(0,0)^scalar) && t7(0,1) == (mBig(0,1)^scalar) && t7(0,2) == (mBig(0,2)^scalar) && - t7(1,0) == (mBig(1,0)^scalar) && t7(1,1) == (mBig(1,1)^scalar) && t7(1,2) == (mBig(1,2)^scalar) && - t7(2,0) == (mBig(2,0)^scalar) && t7(2,1) == (mBig(2,1)^scalar) && t7(2,2) == (mBig(2,2)^scalar)); - - CPPUNIT_ASSERT(t8(0,0) == (mBig(0,0)&scalar) && t8(0,1) == (mBig(0,1)&scalar) && t8(0,2) == (mBig(0,2)&scalar) && - t8(1,0) == (mBig(1,0)&scalar) && t8(1,1) == (mBig(1,1)&scalar) && t8(1,2) == (mBig(1,2)&scalar) && - t8(2,0) == (mBig(2,0)&scalar) && t8(2,1) == (mBig(2,1)&scalar) && t8(2,2) == (mBig(2,2)&scalar)); - - CPPUNIT_ASSERT(t9(0,0) == (mBig(0,0)|scalar) && t9(0,1) == (mBig(0,1)|scalar) && t9(0,2) == (mBig(0,2)|scalar) && - t9(1,0) == (mBig(1,0)|scalar) && t9(1,1) == (mBig(1,1)|scalar) && t9(1,2) == (mBig(1,2)|scalar) && - t9(2,0) == (mBig(2,0)|scalar) && t9(2,1) == (mBig(2,1)|scalar) && t9(2,2) == (mBig(2,2)|scalar)); - - CPPUNIT_ASSERT(t10(0,0) == (m1(0,0)<>scalar2) && t11(0,1) == (m1(0,1)>>scalar2) && t11(0,2) == (m1(0,2)>>scalar2) && - t11(1,0) == (m1(1,0)>>scalar2) && t11(1,1) == (m1(1,1)>>scalar2) && t11(1,2) == (m1(1,2)>>scalar2) && - t11(2,0) == (m1(2,0)>>scalar2) && t11(2,1) == (m1(2,1)>>scalar2) && t11(2,2) == (m1(2,2)>>scalar2)); -} - -/* - * TODO: implement other UpdAssign functions, esp. for bit ops - * (since functions above are working, all others should work) - */ - - -#endif // TVMET_TEST_MATRIXFUNC_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestMatrixOperators.h b/tvmet-1.7.1/testsuite/TestMatrixOperators.h deleted file mode 100644 index ecd28e775..000000000 --- a/tvmet-1.7.1/testsuite/TestMatrixOperators.h +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestMatrixOperators.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_MATRIXOPS_H -#define TVMET_TEST_MATRIXOPS_H - -#include - -#include -#include -#include - -template -class TestMatrixOperators : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestMatrixOperators ); - CPPUNIT_TEST( scalarUpdAssign1 ); - CPPUNIT_TEST( scalarUpdAssign2 ); - CPPUNIT_TEST( scalarUpdAssign3 ); - CPPUNIT_TEST( scalarOps1 ); - CPPUNIT_TEST( scalarOps2 ); - CPPUNIT_TEST( globalMatrixOps ); - CPPUNIT_TEST( negate ); - CPPUNIT_TEST( prodOps ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestMatrixOperators() - : mZero(0), mOne(1), scalar(10), scalar2(2) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void scalarUpdAssign1(); - void scalarUpdAssign2(); - void scalarUpdAssign3(); - void scalarOps1(); - void scalarOps2(); - void globalMatrixOps(); - void negate(); - void prodOps(); - -private: - const matrix_type mZero; - const matrix_type mOne; - matrix_type m1; - matrix_type mBig; /**< matrix 10x bigger than m1 */ - -private: - vector_type m1_r0, m1_r1, m1_r2; // row vectors - vector_type m1_c0, m1_c1, m1_c2; // col vectors - -private: - const T scalar; - const T scalar2; -}; - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - -template -void TestMatrixOperators::setUp() { - m1 = 1,4,7, - 2,5,8, - 3,6,9; - - m1_r0 = 1,4,7; - m1_r1 = 2,5,8; - m1_r2 = 3,6,9; - - m1_c0 = 1,2,3; - m1_c1 = 4,5,6; - m1_c2 = 7,8,9; - - mBig = 10,40,70, - 20,50,80, - 30,60,90; -} - -template -void TestMatrixOperators::tearDown() { } - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -/* - * member math operators with scalars - */ -template -void -TestMatrixOperators::scalarUpdAssign1() { - // all these functions are element wise - matrix_type t1(m1), t2(m1), t3(m1), t4(mBig); - - t1 += scalar; - t2 -= scalar; - t3 *= scalar; - t4 /= scalar; - - CPPUNIT_ASSERT(t1(0,0) == (m1(0,0)+scalar) && t1(0,1) == (m1(0,1)+scalar) && t1(0,2) == (m1(0,2)+scalar) && - t1(1,0) == (m1(1,0)+scalar) && t1(1,1) == (m1(1,1)+scalar) && t1(1,2) == (m1(1,2)+scalar) && - t1(2,0) == (m1(2,0)+scalar) && t1(2,1) == (m1(2,1)+scalar) && t1(2,2) == (m1(2,2)+scalar)); - CPPUNIT_ASSERT(t2(0,0) == (m1(0,0)-scalar) && t2(0,1) == (m1(0,1)-scalar) && t2(0,2) == (m1(0,2)-scalar) && - t2(1,0) == (m1(1,0)-scalar) && t2(1,1) == (m1(1,1)-scalar) && t2(1,2) == (m1(1,2)-scalar) && - t2(2,0) == (m1(2,0)-scalar) && t2(2,1) == (m1(2,1)-scalar) && t2(2,2) == (m1(2,2)-scalar)); - CPPUNIT_ASSERT( all_elements(t3 == mBig) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * member math operators with Matrizes - */ -template -void -TestMatrixOperators::scalarUpdAssign2() { - // all these functions are element wise - matrix_type t1(m1), t2(m1), t3(m1), t4(m1); - - t1 += m1; - t2 -= m1; - - { - using namespace tvmet::element_wise; - - t3 *= m1; - t4 /= m1; - } - - CPPUNIT_ASSERT(t1(0,0) == (m1(0,0)*2) && t1(0,1) == (m1(0,1)*2) && t1(0,2) == (m1(0,2)*2) && - t1(1,0) == (m1(1,0)*2) && t1(1,1) == (m1(1,1)*2) && t1(1,2) == (m1(1,2)*2) && - t1(2,0) == (m1(2,0)*2) && t1(2,1) == (m1(2,1)*2) && t1(2,2) == (m1(2,2)*2)); - CPPUNIT_ASSERT( all_elements(t2 == mZero) ); - CPPUNIT_ASSERT(t3(0,0) == (m1(0,0)*m1(0,0)) && t3(0,1) == (m1(0,1)*m1(0,1)) && t3(0,2) == (m1(0,2)*m1(0,2)) && - t3(1,0) == (m1(1,0)*m1(1,0)) && t3(1,1) == (m1(1,1)*m1(1,1)) && t3(1,2) == (m1(1,2)*m1(1,2)) && - t3(2,0) == (m1(2,0)*m1(2,0)) && t3(2,1) == (m1(2,1)*m1(2,1)) && t3(2,2) == (m1(2,2)*m1(2,2))); - CPPUNIT_ASSERT( all_elements(t4 == mOne) ); -} - - -/* - * member math operators with XprMatrizes - */ -template -void -TestMatrixOperators::scalarUpdAssign3() { - // all these functions are element wise - matrix_type t1(m1), t2(m1), t3(m1), t4(m1); - - t1 += T(1)*m1; - t2 -= T(1)*m1; - - { - using namespace tvmet::element_wise; - - t3 *= T(1)*m1; - t4 /= T(1)*m1; - } - - CPPUNIT_ASSERT( all_elements(t1 == 2*m1) ); - CPPUNIT_ASSERT( all_elements(t2 == mZero) ); - CPPUNIT_ASSERT(t3(0,0) == (m1(0,0)*m1(0,0)) && t3(0,1) == (m1(0,1)*m1(0,1)) && t3(0,2) == (m1(0,2)*m1(0,2)) && - t3(1,0) == (m1(1,0)*m1(1,0)) && t3(1,1) == (m1(1,1)*m1(1,1)) && t3(1,2) == (m1(1,2)*m1(1,2)) && - t3(2,0) == (m1(2,0)*m1(2,0)) && t3(2,1) == (m1(2,1)*m1(2,1)) && t3(2,2) == (m1(2,2)*m1(2,2))); - CPPUNIT_ASSERT( all_elements(t4 == mOne) ); -} - - -/* - * global math operators with scalars - * Note: checked against member operators since they are allready checked - */ -template -void -TestMatrixOperators::scalarOps1() { - matrix_type r1(m1), r2(m1); - matrix_type t1(0), t2(0), t3(0), t4(0); - - r1 += scalar; - r2 -= scalar; - - t1 = m1 + scalar; - t2 = m1 - scalar; - t3 = m1 * scalar; - t4 = mBig / scalar; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == mBig) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * global math operators with scalars, part II - * Note: checked against member operators since they are allready checked - */ -template -void -TestMatrixOperators::scalarOps2() { - matrix_type r1(m1), r2(m1); - matrix_type t1(0), t2(0); - - r1 += scalar; - r2 *= scalar; - - t1 = scalar + m1; - t2 = scalar * m1; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); -} - - -/* - * global math operators with matrizes - */ -template -void -TestMatrixOperators::globalMatrixOps() { - matrix_type t1(0), t2(0), t3(0), t4(0); - - t1 = m1 + m1; - t2 = m1 - m1; - - { - using namespace tvmet::element_wise; - - //t3 = m1 * mOne; // overloaded by global op*() - t4 = m1 / mOne; - } - - CPPUNIT_ASSERT( all_elements(t1 == 2*m1) ); - CPPUNIT_ASSERT( all_elements(t2 == T(0)) ); - //CPPUNIT_ASSERT( all_elements(t3 == m1) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * negate operators with matrizes - */ -template -void -TestMatrixOperators::negate() { - matrix_type m1; - - m1 = -mOne; - - CPPUNIT_ASSERT( all_elements(m1 == T(-1)) ); -} - - -/* - * product functions with matrizes - * Note: Take care on aliasing! - */ -template -void -TestMatrixOperators::prodOps() { - matrix_type t1, t2, t3; - matrix_type r1, r2, r3; - matrix_type m2(m1);; - - tvmet::util::Gemm(m1, m1, r1); - tvmet::util::Gemm(m1, mBig, r2); - tvmet::util::Gemm(mBig, m1, r3); - CPPUNIT_ASSERT( all_elements(r2 == r3) ); - - t1 = m1 * m2; - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - - t2 = m1 * mBig; - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - - t3 = mBig * m1; - CPPUNIT_ASSERT( all_elements(t3 == r3) ); -} - - -#endif // TVMET_TEST_MATRIXOPS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestSTL.h b/tvmet-1.7.1/testsuite/TestSTL.h deleted file mode 100644 index 25a58cc4d..000000000 --- a/tvmet-1.7.1/testsuite/TestSTL.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestSTL.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_STL_H -#define TVMET_TEST_STL_H - -#include -#include - -#include - -#include -#include - -/** - * gernell test case - */ -template -class TestSTL : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestSTL ); - CPPUNIT_TEST( vector_ctor ); - CPPUNIT_TEST( vector_copy ); - CPPUNIT_TEST( matrix_ctor ); - CPPUNIT_TEST( matrix_copy ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - - typedef std::vector stlvec; - -public: - TestSTL() { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void vector_ctor(); - void vector_copy(); - - void matrix_ctor(); - void matrix_copy(); - -private: - stlvec stl_v1; - stlvec stl_v2; - vector_type v1; - matrix_type m1; -}; - -/***************************************************************************** - * Implementation Part I (cppunit part) - *** *************************************************************************/ - -template -void TestSTL::setUp() { - stl_v1.push_back(static_cast(1)); - stl_v1.push_back(static_cast(2)); - stl_v1.push_back(static_cast(3)); - - stl_v2.push_back(static_cast(1)); - stl_v2.push_back(static_cast(2)); - stl_v2.push_back(static_cast(3)); - stl_v2.push_back(static_cast(4)); - stl_v2.push_back(static_cast(5)); - stl_v2.push_back(static_cast(6)); - stl_v2.push_back(static_cast(7)); - stl_v2.push_back(static_cast(8)); - stl_v2.push_back(static_cast(9)); -} - - -template -void TestSTL::tearDown() { - -} - - -/***************************************************************************** - * Implementation Part II (vector) - ****************************************************************************/ - - -template -void -TestSTL::vector_ctor() { - vector_type v(stl_v1.begin(), stl_v1.end()); - - CPPUNIT_ASSERT( std::equal(stl_v1.begin(), stl_v1.end(), v.begin()) == true ); -} - - -template -void -TestSTL::vector_copy() { - vector_type v; - - std::copy(stl_v1.begin(), stl_v1.end(), v.begin()); - - CPPUNIT_ASSERT( std::equal(stl_v1.begin(), stl_v1.end(), v.begin()) == true ); -} - - -/***************************************************************************** - * Implementation Part II (matrix) - ****************************************************************************/ - - -template -void -TestSTL::matrix_ctor() { - matrix_type m(stl_v2.begin(), stl_v2.end()); - - CPPUNIT_ASSERT( std::equal(stl_v2.begin(), stl_v2.end(), m.begin()) == true ); -} - - -template -void -TestSTL::matrix_copy() { - matrix_type m; - - std::copy(stl_v2.begin(), stl_v2.end(), m.begin()); - - CPPUNIT_ASSERT( std::equal(stl_v2.begin(), stl_v2.end(), m.begin()) == true ); -} - - -#endif // TVMET_TEST_STL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestUnFunc.h b/tvmet-1.7.1/testsuite/TestUnFunc.h deleted file mode 100644 index 45aee9c66..000000000 --- a/tvmet-1.7.1/testsuite/TestUnFunc.h +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestUnFunc.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_UNFUNC_H -#define TVMET_TEST_UNFUNC_H - -#include - -#include -#include - -/** - * generic - */ -template -class TestUnFunc : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestUnFunc ); - CPPUNIT_TEST( fn_abs ); - CPPUNIT_TEST( Round ); - CPPUNIT_TEST( Arc ); - CPPUNIT_TEST( Log ); - CPPUNIT_TEST( Nan ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestUnFunc() - : vZero(0), vOne(1), vMinusOne(-1), vTwo(2), vE(M_E), - mZero(0), mOne(1), mMinusOne(-1), mTwo(2), mE(M_E), - scalar(10) - { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void fn_abs(); - void Round(); - void Arc(); - void Log(); - void Nan(); - -private: - const vector_type vZero; - const vector_type vOne; - const vector_type vMinusOne; - const vector_type vTwo; - const vector_type vE; - vector_type v1, v1b; - vector_type vBig; /**< vector 10x bigger than v1 */ - -private: - const matrix_type mZero; - const matrix_type mOne; - const matrix_type mMinusOne; - const matrix_type mTwo; - const matrix_type mE; - matrix_type m1, m1b; - matrix_type mBig; /**< matrix 10x bigger than m1 */ - -private: - const T scalar; -}; - - -/** - * specialized for int's (it doesn't support all binary functions, like sqrt(int)) - */ -template <> -class TestUnFunc : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestUnFunc ); - CPPUNIT_TEST( fn_abs ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestUnFunc(); - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void fn_abs(); - -private: - const vector_type vZero, vOne, vMinusOne, vTwo; - -private: - const matrix_type mZero, mOne, mMinusOne, mTwo; -}; - - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - -template -void TestUnFunc::setUp() { - v1 = 1,2,3; - v1b = v1; // same as v1, cctor test done in checkInternal - vBig = 10,20,30; - - m1 = 1,4,7, - 2,5,8, - 3,6,9; - m1b = m1; // same as m1, cctor test done in checkInternal - mBig = 10,40,70, - 20,50,80, - 30,60,90; -} - -template -void TestUnFunc::tearDown() { - -} - - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -template -void -TestUnFunc::fn_abs() { - vector_type v, tv; - matrix_type m, tm; -} - - -template -void -TestUnFunc::Round() { - vector_type v, tv; - matrix_type m, tm; - - // abs - v = abs(vMinusOne); - m = abs(mMinusOne); - CPPUNIT_ASSERT( all_elements(v == vOne) ); - CPPUNIT_ASSERT( all_elements(m == mOne) ); - -#if 0 // XXX cbrt not in std ?! - v = cbrt(vOne); - m = cbrt(mOne); - CPPUNIT_ASSERT( all_elements(v == std::cbrt(1)) ); - CPPUNIT_ASSERT( all_elements(m == std::cbrt(1)) ); -#endif - - // ceil - tv = vOne + 0.5; - tm = mOne + 0.5; - v = ceil(tv); - m = ceil(tm); - CPPUNIT_ASSERT( all_elements(v == vTwo) ); - CPPUNIT_ASSERT( all_elements(m == mTwo) ); - - // floor - tv = vTwo - 0.5; - tm = mTwo - 0.5; - v = floor(tv); - m = floor(tm); - CPPUNIT_ASSERT( all_elements(v == vOne) ); - CPPUNIT_ASSERT( all_elements(m == mOne) ); - -#if 0 // XXX rint not in std ?! - tv = vTwo - 0.5; - tm = mTwo - 0.5; - v = rint(tv); - m = rint(tm); - CPPUNIT_ASSERT( all_elements(v == vOne) ); - CPPUNIT_ASSERT( all_elements(m == mOne) ); -#endif -} - -template -void -TestUnFunc::Arc() { - vector_type v, tv; - matrix_type m, tm; - - // sin - tv = M_PI/2.0; - tm = M_PI/2.0; - v = sin(tv); - m = sin(tm); - CPPUNIT_ASSERT( all_elements(v == vOne) ); - CPPUNIT_ASSERT( all_elements(m == mOne) ); - - // cos - tv = 2.0*M_PI; - tm = 2.0*M_PI; - v = cos(tv); - m = cos(tm); - CPPUNIT_ASSERT( all_elements(v == vOne) ); - CPPUNIT_ASSERT( all_elements(m == mOne) ); - - // tan - tv = M_PI/4.0; - tm = M_PI/4.0; - v = tan(tv); - m = tan(tm); - // precision problems, using element wise compare - CPPUNIT_ASSERT( all_elements(v == tan(M_PI/4.0) ) ); // this failed by OP - CPPUNIT_ASSERT( all_elements(m == tan(M_PI/4.0) ) ); // this not ... - - // asin - v = asin(vOne); - m = asin(mOne); - // precision problems, using element wise compare - CPPUNIT_ASSERT( all_elements(v == M_PI/2.0 ) ); - CPPUNIT_ASSERT( all_elements(m == M_PI/2.0 ) ); - - // acos - v = acos(vOne); - m = acos(mOne); - CPPUNIT_ASSERT( all_elements(v == 0.0) ); - CPPUNIT_ASSERT( all_elements(m == 0.0) ); - - // atan - v = atan(vOne); - m = atan(mOne); - CPPUNIT_ASSERT( all_elements(v == M_PI/4.0) ); - CPPUNIT_ASSERT( all_elements(m == M_PI/4.0) ); -} - -template -void -TestUnFunc::Log() { - vector_type v, tv; - matrix_type m, tm; - - // exp - tv = vOne; - tm = mOne; - v = exp(tv); - m = exp(tm); - CPPUNIT_ASSERT( all_elements(v == vE) ); - CPPUNIT_ASSERT( all_elements(m == mE) ); - - // log naturalis - tv = vE; - tm = mE; - v = log(tv); - m = log(tm); - CPPUNIT_ASSERT( all_elements(v == vOne) ); - CPPUNIT_ASSERT( all_elements(m == mOne) ); - - // log10 - tv = vOne; - tm = mOne; - v = log10(tv); - m = log10(tm); - // precision problems, using element wise compare - CPPUNIT_ASSERT( all_elements(v == log10(1.0)) ); - CPPUNIT_ASSERT( all_elements(m == log10(1.0)) ); - - // sqrt - tv = 9; - tm = 9; - v = sqrt(tv); - m = sqrt(tm); - CPPUNIT_ASSERT( all_elements(v == 3) ); - CPPUNIT_ASSERT( all_elements(m == 3) ); -} - -template -void -TestUnFunc::Nan() { -#ifdef HAVE_IEEE_MATH - vector_type v; - matrix_type m; - - // isnan - v = NAN; - m = NAN; - CPPUNIT_ASSERT( all_elements(isnan(v)) ); - CPPUNIT_ASSERT( all_elements(isnan(m)) ); - - CPPUNIT_ASSERT( all_elements(!isnan(v1)) ); - CPPUNIT_ASSERT( all_elements(!isnan(vBig)) ); - CPPUNIT_ASSERT( all_elements(!isnan(vOne)) ); - CPPUNIT_ASSERT( all_elements(!isnan(vZero)) ); - CPPUNIT_ASSERT( all_elements(!isnan(m1)) ); - CPPUNIT_ASSERT( all_elements(!isnan(mBig)) ); - CPPUNIT_ASSERT( all_elements(!isnan(mOne)) ); - CPPUNIT_ASSERT( all_elements(!isnan(mZero)) ); - - // isinf(1) - v = HUGE_VAL; - m = HUGE_VAL; - CPPUNIT_ASSERT( all_elements(isinf(v) > 0) ); // == 1 - CPPUNIT_ASSERT( all_elements(isinf(m) > 0) ); // == 1 - - v = -HUGE_VAL; - m = -HUGE_VAL; - - CPPUNIT_ASSERT( all_elements(isinf(v) < 0) ); // == -1 - CPPUNIT_ASSERT( all_elements(isinf(m) < 0) ); // == -1 - - // isinf(2) - CPPUNIT_ASSERT( all_elements(!isinf(v1)) ); - CPPUNIT_ASSERT( all_elements(!isinf(vBig)) ); - CPPUNIT_ASSERT( all_elements(!isinf(vOne)) ); - CPPUNIT_ASSERT( all_elements(!isinf(vZero)) ); - CPPUNIT_ASSERT( all_elements(!isinf(m1)) ); - CPPUNIT_ASSERT( all_elements(!isinf(mBig)) ); - CPPUNIT_ASSERT( all_elements(!isinf(mOne)) ); - CPPUNIT_ASSERT( all_elements(!isinf(mZero)) ); - -#if 0 // XXX finite not in std ?! - v = NAN; - m = NAN; - CPPUNIT_ASSERT( all_elements(finite(v) != 0) ); - CPPUNIT_ASSERT( all_elements(finite(m) != 0) ); - - CPPUNIT_ASSERT( all_elements(finite(v1) != 0) ); - CPPUNIT_ASSERT( all_elements(finite(vBig) != 0) ); - CPPUNIT_ASSERT( all_elements(finite(vOne) != 0) ); - CPPUNIT_ASSERT( all_elements(finite(vZero) != 0) ); - CPPUNIT_ASSERT( all_elements(finite(m1) != 0) ); - CPPUNIT_ASSERT( all_elements(finite(mBig) != 0) ); - CPPUNIT_ASSERT( all_elements(finite(mOne) != 0) ); - CPPUNIT_ASSERT( all_elements(finite(mZero) != 0) ); - - v = HUGE_VAL; - m = HUGE_VAL; - CPPUNIT_ASSERT( all_elements(finite(v) == 0) ); - CPPUNIT_ASSERT( all_elements(finite(m) == 0) ); - - v = -HUGE_VAL; - m = -HUGE_VAL; - - CPPUNIT_ASSERT( all_elements(finite(v) == 0) ); - CPPUNIT_ASSERT( all_elements(finite(m) == 0) ); -#endif - -#endif // HAVE_IEEE_MATH -} - - - -#endif // TVMET_TEST_UNFUNC_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestUnloops.h b/tvmet-1.7.1/testsuite/TestUnloops.h deleted file mode 100644 index 1d021109d..000000000 --- a/tvmet-1.7.1/testsuite/TestUnloops.h +++ /dev/null @@ -1,417 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestUnloops.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_UNLOOPS_H -#define TVMET_TEST_UNLOOPS_H - -#include - -#include - -#include -#include -#include - - -template -class TestUnloops : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestUnloops ); - CPPUNIT_TEST( Mx ); - CPPUNIT_TEST( Mtx ); - CPPUNIT_TEST( MM ); -// CPPUNIT_TEST( MtM ); -// CPPUNIT_TEST( MMt ); -// CPPUNIT_TEST( tMM ); - CPPUNIT_TEST_SUITE_END(); - -public: - TestUnloops() { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - template - void mv_product(const A&, const B&, C&); - - template - void mm_product(const A&, const B&, C&); - - template - void mtm_product(const A&, const B&, C&); - - template - void mmt_product(const A&, const B&, C&); - -protected: - void Mx(); - void Mtx(); - void MM(); - void MtM(); - void MMt(); - void tMM(); - -public: - typedef T value_type; - -private: - enum { - dim = 8, - foo = 2 - }; -}; - -/***************************************************************************** - * Implementation part I (cppunit part) - ****************************************************************************/ - -template -void TestUnloops::setUp() { } - -template -void TestUnloops::tearDown() { } - -/***************************************************************************** - * Implementation part II (reference loops) - ****************************************************************************/ -template -template -void TestUnloops::mv_product(const LHS& A, const RHS& B, RES& X) { - assert(int(LHS::Rows) == int(RES::Size)); - assert(int(LHS::Cols) == int(RHS::Size)); - - enum { - M = LHS::Rows, - N = RHS::Size // is Vector - }; - - for (int i = 0; i < M; i++){ - value_type sum(0); - for (int j = 0; j < N; j++){ - sum += A(i, j) * B(j); - } - X(i) = sum; - } -} - -template -template -void TestUnloops::mm_product(const LHS& A, const RHS& B, RES& X) { - assert(int(LHS::Rows) == int(RES::Rows)); - assert(int(LHS::Cols) == int(RHS::Rows)); - assert(int(RHS::Cols) == int(RES::Cols)); - - enum { - M = LHS::Rows, - N = RHS::Cols, - K = RHS::Rows - }; - - for (int i = 0; i < M; ++i) { - for (int j = 0; j < N; ++j) { - value_type sum(0); - for (int k = 0; k < K; ++k) { - sum += A(i, k) * B(k, j); - } - X(i, j) = sum; - } - } -} - -template -template -void TestUnloops::mtm_product(const LHS& A, const RHS& B, RES& X) { - assert(int(LHS::Rows) == int(RHS::Rows)); - assert(int(LHS::Cols) == int(RES::Rows)); - assert(int(RHS::Cols) == int(RES::Cols)); - - enum { - M = LHS::Cols, - N = RHS::Cols, - K = RHS::Rows - }; - - for (int i = 0; i < N; i++){ - for (int j = 0; j < N; j++){ - value_type sum(0); - for (int k = 0; k < K; k++){ - sum += A(k, i) * B(k, j); - } - X(i, j) = sum; - } - } -} - -template -template -void TestUnloops::mmt_product(const LHS& A, const RHS& B, RES& X) { - assert(int(LHS::Rows) == int(RES::Rows)); - assert(int(LHS::Cols) == int(RHS::Cols)); - assert(int(RHS::Rows) == int(RES::Cols)); - - enum { - M = LHS::Rows, - N = RHS::Rows, - K = LHS::Cols - }; - - for (int i = 0;i < N; i++){ - for (int j = 0;j < N; j++){ - value_type sum(0); - for (int k = 0;k < N; k++){ - sum += A(i, k)*A(j, k); - } - X(i, j) = sum; - } - } -} - -/***************************************************************************** - * Implementation part III - ****************************************************************************/ - -template -void TestUnloops::Mx() { - using namespace tvmet; - - enum { - Rows = dim-foo, - Cols = dim+foo, - }; - - typedef Matrix matrix1_type; - typedef Vector vector1_type; - typedef Vector vector2_type; - - matrix1_type M; - vector1_type x; - - std::generate(M.begin(), M.end(), - tvmet::util::Incrementor()); - std::generate(x.begin(), x.end(), - tvmet::util::Incrementor()); - - vector2_type r; - mv_product(M, x, r); - - vector2_type y; - y = prod(M, x); - - CPPUNIT_ASSERT( all_elements( y == r ) ); -} - - -template -void TestUnloops::Mtx() { - using namespace tvmet; - - enum { - Rows = dim-foo, - Cols = dim+foo, - }; - - typedef Matrix matrix1_type; - typedef Matrix matrix1t_type; - typedef Vector vector1_type; - typedef Vector vector2_type; - - matrix1_type M; - vector1_type x; - - std::generate(M.begin(), M.end(), - tvmet::util::Incrementor()); - std::generate(x.begin(), x.end(), - tvmet::util::Incrementor()); - - vector2_type r; - matrix1t_type Mt(trans(M)); - mv_product(Mt, x, r); - - vector2_type y; - y = Mtx_prod(M, x); - - CPPUNIT_ASSERT( all_elements( y == r ) ); -} - - -template -void TestUnloops::MM() { - using namespace tvmet; - - enum { - Rows1 = dim-foo, - Cols1 = dim+foo, - Cols2 = dim - }; - - typedef Matrix matrix1_type; - typedef Matrix matrix2_type; - typedef Matrix matrix3_type; - - matrix1_type M1; - matrix2_type M2; - - std::generate(M1.begin(), M1.end(), - tvmet::util::Incrementor()); - std::generate(M2.begin(), M2.end(), - tvmet::util::Incrementor()); - - matrix3_type R; - mm_product(M1, M2, R); - - matrix3_type M3; - M3 = prod(M1, M2); - - CPPUNIT_ASSERT( all_elements( M3 == R ) ); -} - - -template -void TestUnloops::MtM() { - using namespace tvmet; - - enum { - Rows1 = dim-foo, - Cols1 = dim+foo, - Cols2 = dim - }; - - typedef Matrix matrix1_type; - typedef Matrix matrix2_type; - typedef Matrix matrix3_type; - - matrix1_type M1; - matrix2_type M2; - - std::generate(M1.begin(), M1.end(), - tvmet::util::Incrementor()); - std::generate(M2.begin(), M2.end(), - tvmet::util::Incrementor()); - - matrix3_type R; - mtm_product(M1, M2, R); - - matrix3_type M3; - M3 = MtM_prod(M1, M2); - - std::cout << "M1=" << M1 << std::endl; - std::cout << "M2=" << M2 << std::endl; - std::cout << "M3=" << M3 << std::endl; - std::cout << "R=" << R << std::endl; - - CPPUNIT_ASSERT( all_elements( M3 == R ) ); -} - - -template -void TestUnloops::MMt() { - using namespace tvmet; - - enum { - Rows1 = dim-foo, - Cols1 = dim+foo, - Rows2 = dim - }; - - typedef Matrix matrix1_type; - typedef Matrix matrix2_type; - typedef Matrix matrix3_type; - - matrix1_type M1; - matrix2_type M2; - - std::generate(M1.begin(), M1.end(), - tvmet::util::Incrementor()); - std::generate(M2.begin(), M2.end(), - tvmet::util::Incrementor()); - - matrix3_type R; - mmt_product(M1, M2, R); - - matrix3_type M3; - M3 = MMt_prod(M1, M2); - - std::cout << "M1=" << M1 << std::endl; - std::cout << "M2=" << M2 << std::endl; - std::cout << "M3=" << M3 << std::endl; - std::cout << "R=" << R << std::endl; - - CPPUNIT_ASSERT( all_elements( M3 == R ) ); -} - - -template -void TestUnloops::tMM() { - using namespace tvmet; - - enum { - Rows1 = dim-foo, - Cols1 = dim+foo, - Cols2 = dim - }; - - typedef Matrix matrix1_type; - typedef Matrix matrix2_type; - typedef Matrix matrix3_type; - typedef Matrix matrix3t_type; - - matrix1_type M1; - matrix2_type M2; - - std::generate(M1.begin(), M1.end(), - tvmet::util::Incrementor()); - std::generate(M2.begin(), M2.end(), - tvmet::util::Incrementor()); - - matrix3_type R; - matrix3t_type Rt; - mm_product(M1, M2, R); - Rt = trans(R); - - matrix3t_type M3; - M3 = trans_prod(M1, M2); - - std::cout << "M1=" << M1 << std::endl; - std::cout << "M2=" << M2 << std::endl; - std::cout << "M3=" << M3 << std::endl; - std::cout << "Rt=" << Rt << std::endl; - - CPPUNIT_ASSERT( all_elements( M3 == Rt ) ); -} - -#endif // TVMET_TEST_UNLOOPS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestVectorEval.h b/tvmet-1.7.1/testsuite/TestVectorEval.h deleted file mode 100644 index 8beee50b6..000000000 --- a/tvmet-1.7.1/testsuite/TestVectorEval.h +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestVectorEval.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_VECTOR_EVAL_H -#define TVMET_TEST_VECTOR_EVAL_H - -#include - -#include - -#include - -template -class TestVectorEval : public CppUnit::TestFixture -{ - // basic tests - CPPUNIT_TEST_SUITE( TestVectorEval ); - CPPUNIT_TEST( Greater ); - CPPUNIT_TEST( Less ); - CPPUNIT_TEST( GreaterOrEqual ); - CPPUNIT_TEST( LessOrEqual ); - CPPUNIT_TEST( Equal ); - CPPUNIT_TEST( NotEqual ); - CPPUNIT_TEST( LogicalAnd ); - CPPUNIT_TEST( LogicalOr ); - - // others - CPPUNIT_TEST( AllElements ); - CPPUNIT_TEST( AnyElements ); - CPPUNIT_TEST( Eval3 ); - CPPUNIT_TEST( EvalPod3 ); - - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - -public: - TestVectorEval() - : vOne(1), vZero(0) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void Greater(); - void Less(); - void GreaterOrEqual(); - void LessOrEqual(); - void Equal(); - void NotEqual(); - void LogicalAnd(); - void LogicalOr(); - - void AllElements(); - void AnyElements(); - void Eval3(); - void EvalPod3(); - -private: - vector_type v1; - vector_type vBig; /**< vector bigger than v1 */ - const vector_type vOne; - const vector_type vZero; - -}; - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - -template -void TestVectorEval::setUp () { - v1 = 1,2,3; - vBig = 10,20,30; -} - -template -void TestVectorEval::tearDown() { } - -/***************************************************************************** - * Implementation Part II - * these are elemental - therefore we use std::assert - ****************************************************************************/ - -/* - * on SelfTest, we have the guarantee, that the container holds the - * expected values. Now check comparing operation using tvmet's - * eval function. This is the basic for all further test since it's - * the way we check the correctness. The other way would be element wise - * compare as in SelfTest, urgh... - */ -template -void -TestVectorEval::Greater() { - // all test are element wise ! - assert( all_elements(vBig > v1) ); -} - -template -void -TestVectorEval::Less() { - // all test are element wise ! - assert( all_elements(v1 < vBig) ); -} - -template -void -TestVectorEval::GreaterOrEqual() { - // all test are element wise ! - assert( all_elements(vBig >= v1) ); - assert( all_elements(v1 >= v1) ); - assert( all_elements(vBig >= vBig) ); - assert( all_elements(vOne >= T(1)) ); - assert( all_elements(vZero>= T(0)) ); -} - -template -void -TestVectorEval::LessOrEqual() { - // all test are element wise ! - assert( all_elements(v1 <= vBig) ); - assert( all_elements(v1 <= v1) ); - assert( all_elements(vBig <= vBig) ); - assert( all_elements(vOne <= T(1)) ); - assert( all_elements(vZero<= T(0)) ); -} - -template -void -TestVectorEval::Equal() { - // all test are element wise ! - assert( all_elements(v1 == v1) ); - assert( all_elements(vBig == vBig) ); - assert( all_elements(vOne == 1) ); - assert( all_elements(vZero == T(0)) ); -} - -template -void -TestVectorEval::NotEqual() { - // all test are element wise ! - assert( all_elements(v1 != vBig) ); -} - -template -void -TestVectorEval::LogicalAnd() { - // TODO: implement -} - -template -void -TestVectorEval::LogicalOr() { - // TODO: implement -} - -/***************************************************************************** - * Implementation Part III - * test on generell and eval functions - ****************************************************************************/ - -template -void -TestVectorEval::AllElements() { - // true cases - CPPUNIT_ASSERT( all_elements(vBig > T(0)) ); - CPPUNIT_ASSERT( all_elements(vBig >= T(1)) ); - - CPPUNIT_ASSERT( all_elements(vBig < T(1000)) ); - CPPUNIT_ASSERT( all_elements(vBig <= T(1000)) ); - - CPPUNIT_ASSERT( all_elements(T(0) < vBig) ); // possible, I newer would write it - CPPUNIT_ASSERT( all_elements(T(1000) > vBig) ); // possible, I newer would write it - - CPPUNIT_ASSERT( all_elements(vOne == T(1)) ); - CPPUNIT_ASSERT( all_elements(vZero == T(0)) ); - - CPPUNIT_ASSERT( all_elements(vBig != T(1000)) ); - - // false cases - CPPUNIT_ASSERT( !all_elements(vBig < T(0)) ); -} - - -template -void -TestVectorEval::AnyElements() { - // true cases - CPPUNIT_ASSERT( any_elements(vBig > T(0)) ); - CPPUNIT_ASSERT( any_elements(vBig >= T(1)) ); - - CPPUNIT_ASSERT( any_elements(vBig < T(1000)) ); - CPPUNIT_ASSERT( any_elements(vBig <= T(1000)) ); - - CPPUNIT_ASSERT( any_elements(T(2) < v1) ); // possible, I newer would write it - CPPUNIT_ASSERT( any_elements(T(2) > v1) ); // possible, I newer would write it - - CPPUNIT_ASSERT( any_elements(vOne == T(1)) ); - CPPUNIT_ASSERT( any_elements(vZero == T(0)) ); - - CPPUNIT_ASSERT( any_elements(vBig != T(1000)) ); - - // false cases - CPPUNIT_ASSERT( !any_elements(vBig < T(2)) ); - CPPUNIT_ASSERT( !any_elements(vOne == T(0)) ); - CPPUNIT_ASSERT( !any_elements(vZero == T(1)) ); -} - - -template -void -TestVectorEval::Eval3() { - vector_type v; - T a(1); // scalar - - // XprVector ? Vector : Vector - v = eval( v1 < vBig, v1, vBig); - CPPUNIT_ASSERT( all_elements(v == v1) ); - - v = eval( v1 > vBig, v1, vBig); - CPPUNIT_ASSERT( all_elements(v == vBig) ); - - // XprVector ? Vector : XprVector - v = eval( v1 < vBig, v1, a*vBig); - CPPUNIT_ASSERT( all_elements(v == v1) ); - - v = eval( v1 > vBig, v1, a*vBig); - CPPUNIT_ASSERT( all_elements(v == vBig) ); - - // XprVector ? XprVector : Vector - v = eval( v1 < vBig, a*v1, vBig); - CPPUNIT_ASSERT( all_elements(v == v1) ); - - v = eval( v1 > vBig, a*v1, vBig); - CPPUNIT_ASSERT( all_elements(v == vBig) ); - - // XprVector ? XprVector : XprVector - v = eval( v1 < vBig, a*v1, a*vBig); - CPPUNIT_ASSERT( all_elements(v == v1) ); - - v = eval( v1 > vBig, a*v1, a*vBig); - CPPUNIT_ASSERT( all_elements(v == vBig) ); -} - - -template -void -TestVectorEval::EvalPod3() { - vector_type v; - T a(1); // scalar - - // XprVector ? POD1 : POD2 - v = eval( v1 < vBig, T(0), T(1)); - CPPUNIT_ASSERT( all_elements(v == T(0)) ); - - v = eval( v1 > vBig, T(0), T(1)); - CPPUNIT_ASSERT( all_elements(v == T(1)) ); - - // XprVector ? POD : XprVector - v = eval( v1 < vBig, 1, a*vBig); - CPPUNIT_ASSERT( all_elements(v == vOne) ); - - v = eval( v1 > vBig, 1, a*vBig); - CPPUNIT_ASSERT( all_elements(v == vBig) ); - - // XprVector ? XprVector : POD - v = eval( v1 < vBig, a*v1, T(1)); - CPPUNIT_ASSERT( all_elements(v == v1) ); - - v = eval( v1 > vBig, a*v1, T(1)); - CPPUNIT_ASSERT( all_elements(v == vOne) ); -} - - -#endif // TVMET_TEST_VECTOR_EVAL_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestVectorFunctions.h b/tvmet-1.7.1/testsuite/TestVectorFunctions.h deleted file mode 100644 index be82784ff..000000000 --- a/tvmet-1.7.1/testsuite/TestVectorFunctions.h +++ /dev/null @@ -1,500 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestVectorFunctions.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_VECTORFUNC_H -#define TVMET_TEST_VECTORFUNC_H - -#include - -#include - -#include -#include - -template -class TestVectorFunctions : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestVectorFunctions ); - CPPUNIT_TEST( scalarUpdAssign1 ); - CPPUNIT_TEST( scalarUpdAssign2 ); - CPPUNIT_TEST( scalarUpdAssign3 ); - CPPUNIT_TEST( scalarFuncs1 ); - CPPUNIT_TEST( scalarFuncs2 ); - CPPUNIT_TEST( globalVectorFuncs1 ); - CPPUNIT_TEST( globalVectorFuncs2 ); - CPPUNIT_TEST( globalVectorFuncs3 ); - CPPUNIT_TEST( fn_sum ); - CPPUNIT_TEST( fn_product ); - CPPUNIT_TEST( fn_dot ); - CPPUNIT_TEST( fn_cross ); - CPPUNIT_TEST( fn_norm ); - CPPUNIT_TEST( extremum ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - -public: - TestVectorFunctions() - : vZero(0), vOne(1), scalar(10), scalar2(2) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void scalarUpdAssign1(); - void scalarUpdAssign2(); - void scalarUpdAssign3(); - void scalarFuncs1(); - void scalarFuncs2(); - void globalVectorFuncs1(); - void globalVectorFuncs2(); - void globalVectorFuncs3(); - void fn_sum(); - void fn_product(); - void fn_dot(); - void fn_cross(); - void fn_norm(); - void extremum(); - -private: - const vector_type vZero; - const vector_type vOne; - vector_type v1; - vector_type vBig; /**< vector 10x bigger than v1 */ - -private: - const T scalar; - const T scalar2; -}; - - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - - -template -void TestVectorFunctions::setUp() { - v1 = 1,2,3; - vBig = 10,20,30; -} - - -template -void TestVectorFunctions::tearDown() { } - - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -/* - * member math operators with scalars - * Since we use it to compare results, these tests are elemental. - */ -template -void -TestVectorFunctions::scalarUpdAssign1() { - // all these functions are element wise - vector_type t1(v1), t2(v1), t3(v1), t4(vBig); - - t1 += scalar; - t2 -= scalar; - t3 *= scalar; - t4 /= scalar; - - assert(t1(0) == (v1(0)+scalar) && t1(1) == (v1(1)+scalar) && t1(2) == (v1(2)+scalar)); - assert(t2(0) == (v1(0)-scalar) && t2(1) == (v1(1)-scalar) && t2(2) == (v1(2)-scalar)); - assert( all_elements(t3 == vBig) ); - assert( all_elements(t4 == v1) ); -} - - -/* - * member math operators with Vectors - * Since we use it to compare results, these tests are elemental. - */ -template -void -TestVectorFunctions::scalarUpdAssign2() { - // all these functions are element wise - vector_type t1(v1), t2(v1), t3(v1), t4(v1); - - t1 += v1; - t2 -= v1; - t3 *= v1; - - { - using namespace tvmet::element_wise; - t4 /= v1; - } - - assert( all_elements(t1 == 2*v1) ); - assert( all_elements(t2 == vZero) ); - assert(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2))); - assert( all_elements(t4 == 1) ); -} - - -/* - * member math operators with XprVector - * Since we use it to compare results, these tests are elemental. - */ -template -void -TestVectorFunctions::scalarUpdAssign3() { - // all these functions are element wise - vector_type t1(v1), t2(v1), t3(v1), t4(v1); - - t1 += T(1)*v1; - t2 -= T(1)*v1; - t3 *= T(1)*v1; - - { - using namespace tvmet::element_wise; - t4 /= T(1)*v1; - } - - assert( all_elements(t1 == 2*v1) ); - assert( all_elements(t2 == vZero) ); - assert(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2))); - assert( all_elements(t4 == vOne) ); -} - - -/* - * global math operators with scalars - * Note: checked against member operators since they are allready checked - */ -template -void -TestVectorFunctions::scalarFuncs1() { - vector_type r1(v1), r2(v1), r3(v1), r4(vBig); - vector_type t1(0), t2(0), t3(0), t4(0); - - r1 += scalar; - r2 -= scalar; - r3 *= scalar; - r4 /= scalar; - - // all element wise - t1 = add(v1, scalar); - t2 = sub(v1, scalar); - t3 = mul(v1, scalar); - t4 = div(vBig, scalar); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with scalars, part II - * Note: checked against member operators since they are allready checked - */ -template -void -TestVectorFunctions::scalarFuncs2() { - vector_type r1(v1), r2(v1); - vector_type t1(0), t2(0); - - r1 += scalar; - r2 *= scalar; - - // all element wise - t1 = add(scalar, v1); - t2 = mul(scalar, v1); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); -} - - -/* - * global math operators with vectors (using functions) - */ -template -void -TestVectorFunctions::globalVectorFuncs1() { - vector_type r1(v1), r2(v1), r3(v1), r4(v1); - vector_type t1(0), t2(0), t3(0), t4(0); - vector_type v2(v1); - - CPPUNIT_ASSERT( all_elements( v1 == v2) ); - - r1 += v1; - r2 -= v1; - r3 *= v1; - - { - using namespace tvmet::element_wise; - r4 /= v1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = add(v1, v2); - t2 = sub(v1, v2); - t3 = mul(v1, v2); - t4 = tvmet::element_wise::div(v1, v1); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with vectors and xpr (using functions) - */ -template -void -TestVectorFunctions::globalVectorFuncs2() { - vector_type r1(v1), r2(v1), r3(v1), r4(v1); - vector_type t1(0), t2(0), t3(0), t4(0); - vector_type v2(v1); - - CPPUNIT_ASSERT( all_elements( v1 == v2) ); - - r1 += T(1)*v1; - r2 -= T(1)*v1; - r3 *= T(1)*v1; - - { - using namespace tvmet::element_wise; - r4 /= T(1)*v1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = add(v1, T(1)*v2); - t2 = sub(v1, T(1)*v2); - t3 = mul(v1, T(1)*v2); - t4 = tvmet::element_wise::div(v1, T(1)*v1); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with vectors with xpr (using functions) - */ -template -void -TestVectorFunctions::globalVectorFuncs3() { - vector_type r1(v1), r2(v1), r3(v1), r4(v1); - vector_type t1(0), t2(0), t3(0), t4(0); - vector_type v2(v1); - - CPPUNIT_ASSERT( all_elements( v1 == v2) ); - - r1 += T(1)*v1; - r2 -= T(1)*v1; - r3 *= T(1)*v1; - - { - using namespace tvmet::element_wise; - r4 /= T(1)*v1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = add(T(1)*v1, v2); - t2 = sub(T(1)*v1, v2); - t3 = mul(T(1)*v1, v2); - t4 = tvmet::element_wise::div(T(1)*v1, v1); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * sum of vector - */ -template -void -TestVectorFunctions::fn_sum() { - T t = sum(v1); - - CPPUNIT_ASSERT( t == (v1(0) + v1(1) + v1(2))); -} - - -/* - * prod of vector - */ -template -void -TestVectorFunctions::fn_product() { - T t = product(v1); - - CPPUNIT_ASSERT( t == (v1(0) * v1(1) * v1(2))); -} - - -/* - * dot product - */ -template -void -TestVectorFunctions::fn_dot() { - vector_type v2(v1); - - T t1 = dot(v1, v2); - CPPUNIT_ASSERT( t1 == 14 ); - - T t2 = dot(v1, vBig); - CPPUNIT_ASSERT( t2 == 140 ); - - T t3 = dot(v1, vOne); - CPPUNIT_ASSERT( t3 == 6 ); - - T t4 = dot(v1, vZero); - CPPUNIT_ASSERT( t4 == 0 ); -} - - -/* - * cross product - */ -template -void -TestVectorFunctions::fn_cross() { - vector_type v2(v1); - - vector_type t1 = cross(v1, v2); - CPPUNIT_ASSERT( all_elements(t1 == vZero) ); // orthogonal vectors - - vector_type t2 = cross(v1, vBig); - CPPUNIT_ASSERT( all_elements(t2 == vZero) ); // orthogonal vectors - - const vector_type r(-1,2,-1); - vector_type t3 = cross(v1, vOne); - CPPUNIT_ASSERT( all_elements(t3 == r) ); - - vector_type t4 = cross(v1, vZero); - CPPUNIT_ASSERT( all_elements(t4 == vZero) ); -} - - -/* - * norm - * Note: norm2 for ints specialized - */ -template -void -TestVectorFunctions::fn_norm() { - vector_type v2; - vector_type r; - vector_type t5; - - v2 = -v1; // norm can't handle XprVector<> yet - - T t1 = norm1(v1); - T t2 = norm1(v2); - T t3 = norm2(v1); - T t4 = norm2(v2); - - CPPUNIT_ASSERT( t1 == sum(v1) ); - CPPUNIT_ASSERT( t2 == sum(v1) ); - CPPUNIT_ASSERT( std::abs(t3 - std::sqrt(static_cast::float_type>(14))) - < std::numeric_limits::epsilon() ); - CPPUNIT_ASSERT( std::abs(t4 - std::sqrt(static_cast::float_type>(14))) - < std::numeric_limits::epsilon() ); - - r = v1/norm2(v1); // norm2 is checked before - t5 = normalize(v1); - - CPPUNIT_ASSERT( all_elements(t5 == r) ); -} - - -/* - * min/max functions - */ -template -void -TestVectorFunctions::extremum() { - CPPUNIT_ASSERT(max(v1) == 3); - CPPUNIT_ASSERT(min(v1) == 1); - - CPPUNIT_ASSERT(max(vBig) == 30); - CPPUNIT_ASSERT(min(vBig) == 10); - - CPPUNIT_ASSERT(maximum(v1).value() == 3); - CPPUNIT_ASSERT(maximum(v1).index() == 2); - - CPPUNIT_ASSERT(minimum(v1).value() == 1); - CPPUNIT_ASSERT(minimum(v1).index() == 0); - - CPPUNIT_ASSERT(maximum(vBig).value() == 30); - CPPUNIT_ASSERT(maximum(vBig).index() == 2); - - CPPUNIT_ASSERT(minimum(vBig).value() == 10); - CPPUNIT_ASSERT(minimum(vBig).index() == 0); -} - - -/***************************************************************************** - * Implementation Part II (specialized for ints) - ****************************************************************************/ - - -/* - * norm on int specialized due to rounding problems - */ -template <> -void -TestVectorFunctions::fn_norm() { - vector_type v2; - v2 = -v1; - - int t1 = norm1(v1); - int t2 = norm1(v2); - CPPUNIT_ASSERT( t1 == sum(v1) ); - CPPUNIT_ASSERT( t2 == sum(v1) ); -} - - -#endif // TVMET_TEST_VECTORFUNC_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestVectorOperators.h b/tvmet-1.7.1/testsuite/TestVectorOperators.h deleted file mode 100644 index 78e14bfe9..000000000 --- a/tvmet-1.7.1/testsuite/TestVectorOperators.h +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestVectorOperators.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_VECTORPOS_H -#define TVMET_TEST_VECTORPOS_H - -#include - -#include - -#include -#include - -template -class TestVectorOperators : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestVectorOperators ); - CPPUNIT_TEST( scalarUpdAssign1 ); - CPPUNIT_TEST( scalarUpdAssign2 ); - CPPUNIT_TEST( scalarUpdAssign3 ); - CPPUNIT_TEST( scalarOps1 ); - CPPUNIT_TEST( scalarOps2 ); - CPPUNIT_TEST( globalVectorOps1 ); - CPPUNIT_TEST( globalVectorOps2 ); - CPPUNIT_TEST( globalVectorOps3 ); - CPPUNIT_TEST( negate ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - -public: - TestVectorOperators() - : vZero(0), vOne(1), scalar(10), scalar2(2) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void scalarUpdAssign1(); - void scalarUpdAssign2(); - void scalarUpdAssign3(); - void scalarOps1(); - void scalarOps2(); - void globalVectorOps1(); - void globalVectorOps2(); - void globalVectorOps3(); - void negate(); - -private: - const vector_type vZero; - const vector_type vOne; - vector_type v1; - vector_type vBig; /**< vector 10x bigger than v1 */ - -private: - const T scalar; - const T scalar2; -}; - - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - - -template -void TestVectorOperators::setUp() { - v1 = 1,2,3; - vBig = 10,20,30; -} - - -template -void TestVectorOperators::tearDown() { } - - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -/* - * member math operators with scalars; - */ -template -void -TestVectorOperators::scalarUpdAssign1() { - // all these functions are element wise - vector_type t1(v1), t2(v1), t3(v1), t4(vBig); - - t1 += scalar; - t2 -= scalar; - t3 *= scalar; - t4 /= scalar; - - CPPUNIT_ASSERT(t1(0) == (v1(0)+scalar) && t1(1) == (v1(1)+scalar) && t1(2) == (v1(2)+scalar)); - CPPUNIT_ASSERT(t2(0) == (v1(0)-scalar) && t2(1) == (v1(1)-scalar) && t2(2) == (v1(2)-scalar)); - CPPUNIT_ASSERT( all_elements(t3 == vBig) ); - CPPUNIT_ASSERT( all_elements(t4 == v1) ); -} - - -/* - * member math operators with Vectors - */ -template -void -TestVectorOperators::scalarUpdAssign2() { - // all these functions are element wise - vector_type t1(v1), t2(v1), t3(v1), t4(v1); - - t1 += v1; - t2 -= v1; - t3 *= v1; - - { - using namespace tvmet::element_wise; - t4 /= v1; - } - - CPPUNIT_ASSERT( all_elements(t1 == 2*v1) ); - CPPUNIT_ASSERT( all_elements(t2 == vZero) ); - CPPUNIT_ASSERT(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2))); - CPPUNIT_ASSERT( all_elements(t4 == 1) ); -} - - -/* - * member math operators with XprVector - */ -template -void -TestVectorOperators::scalarUpdAssign3() { - // all these functions are element wise - vector_type t1(v1), t2(v1), t3(v1), t4(v1); - - t1 += T(1)*v1; - t2 -= T(1)*v1; - t3 *= T(1)*v1; - - { - using namespace tvmet::element_wise; - t4 /= T(1)*v1; - } - - CPPUNIT_ASSERT( all_elements(t1 == 2*v1) ); - CPPUNIT_ASSERT( all_elements(t2 == vZero) ); - CPPUNIT_ASSERT(t3(0) == (v1(0)*v1(0)) && t3(1) == (v1(1)*v1(1)) && t3(2) == (v1(2)*v1(2))); - CPPUNIT_ASSERT( all_elements(t4 == vOne) ); -} - - -/* - * global math operators with scalars - * Note: checked against member operators since they are allready checked - */ -template -void -TestVectorOperators::scalarOps1() { - vector_type r1(v1), r2(v1), r3(v1), r4(vBig); - vector_type t1(0), t2(0), t3(0), t4(0); - - r1 += scalar; - r2 -= scalar; - r3 *= scalar; - r4 /= scalar; - - // all element wise - t1 = v1 + scalar; - t2 = v1 - scalar; - t3 = v1 * scalar; - t4 = vBig / scalar; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with scalars, part II - * Note: checked against member operators since they are allready checked - */ -template -void -TestVectorOperators::scalarOps2() { - vector_type r1(v1), r2(v1); - vector_type t1(0), t2(0); - - r1 += scalar; - r2 *= scalar; - - // all element wise - t1 = scalar + v1; - t2 = scalar * v1; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); -} - - -/* - * global math operators with vectors - */ -template -void -TestVectorOperators::globalVectorOps1() { - vector_type r1(v1), r2(v1), r3(v1), r4(v1); - vector_type t1(0), t2(0), t3(0), t4(0); - vector_type v2(v1); - - CPPUNIT_ASSERT( all_elements( v1 == v2) ); - - r1 += v1; - r2 -= v1; - r3 *= v1; - - { - using namespace tvmet::element_wise; - r4 /= v1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = v1 + v2; - t2 = v1 - v2; - t3 = v1 * v2; - - { - using namespace tvmet::element_wise; - t4 = v1 / v1; - } - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with vectors and xpr - */ -template -void -TestVectorOperators::globalVectorOps2() { - vector_type r1(v1), r2(v1), r3(v1), r4(v1); - vector_type t1(0), t2(0), t3(0), t4(0); - vector_type v2(v1); - - CPPUNIT_ASSERT( all_elements( v1 == v2) ); - - r1 += T(1)*v1; - r2 -= T(1)*v1; - r3 *= T(1)*v1; - - { - using namespace tvmet::element_wise; - r4 /= T(1)*v1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = v1 + T(1)*v2; - t2 = v1 - T(1)*v2; - t3 = v1 * T(1)*v2; - - { - using namespace tvmet::element_wise; - t4 = v1 / ( T(1)*v1 ); - } - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with vectors with xpr - */ -template -void -TestVectorOperators::globalVectorOps3() { - vector_type r1(v1), r2(v1), r3(v1), r4(v1); - vector_type t1(0), t2(0), t3(0), t4(0); - vector_type v2(v1); - - CPPUNIT_ASSERT( all_elements( v1 == v2) ); - - r1 += T(1)*v1; - r2 -= T(1)*v1; - r3 *= T(1)*v1; - - { - using namespace tvmet::element_wise; - r4 /= T(1)*v1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = (T(1)*v1) + v2; - t2 = (T(1)*v1) - v2; - t3 = (T(1)*v1) * v2; - - { - using namespace tvmet::element_wise; - t4 = (T(1)*v1) / v1; - } - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * negate operators - */ -template -void -TestVectorOperators::negate() { - vector_type v2; - - v2 = -vOne; - - CPPUNIT_ASSERT( all_elements(v2 == T(-1)) ); -} - - -/***************************************************************************** - * Implementation Part II (specialized for ints) - ****************************************************************************/ - - -/* - * member math operators with scalars - */ -template <> -void -TestVectorOperators::scalarUpdAssign1() { - // all these functions are element wise - vector_type t1(v1), t2(v1), t3(v1), t4(vBig); - vector_type t5(v1), t6(vBig), t7(vBig), t8(vBig), t9(vBig); - vector_type t10(v1), t11(v1); - - t1 += scalar; - t2 -= scalar; - t3 *= scalar; - t4 /= scalar; - - t5 %= scalar; - t6 %= scalar; - t7 ^= scalar; - t8 &= scalar; - t9 |= scalar; - t10 <<= scalar; - t11 >>= scalar2; - - CPPUNIT_ASSERT(t1(0) == (v1(0)+scalar) && t1(1) == (v1(1)+scalar) && t1(2) == (v1(2)+scalar)); - CPPUNIT_ASSERT(t2(0) == (v1(0)-scalar) && t2(1) == (v1(1)-scalar) && t2(2) == (v1(2)-scalar)); - CPPUNIT_ASSERT( all_elements(t3 == vBig) ); - CPPUNIT_ASSERT( all_elements(t4 == v1) ); - CPPUNIT_ASSERT( all_elements(t5 == v1) ); - CPPUNIT_ASSERT( all_elements(t6 == vZero) ); - CPPUNIT_ASSERT(t7(0) == (vBig(0)^scalar) && t7(1) == (vBig(1)^scalar) && t7(2) == (vBig(2)^scalar) ); - CPPUNIT_ASSERT(t8(0) == (vBig(0)&scalar) && t8(1) == (vBig(1)&scalar) && t8(2) == (vBig(2)&scalar) ); - CPPUNIT_ASSERT(t9(0) == (vBig(0)|scalar) && t9(1) == (vBig(1)|scalar) && t9(2) == (vBig(2)|scalar) ); - CPPUNIT_ASSERT(t10(0) == (v1(0)<>scalar2) && t11(1) == (v1(1)>>scalar2) && t11(2) == (v1(2)>>scalar2) ); -} - -/* - * TODO: implement other UpdAssign functions, esp. for bit ops - * (since functions above are working, all others should work) - */ - - -#endif // TVMET_TEST_VECTORPOS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestXpr.h b/tvmet-1.7.1/testsuite/TestXpr.h deleted file mode 100644 index ce472fd38..000000000 --- a/tvmet-1.7.1/testsuite/TestXpr.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestXpr.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_XPR_H -#define TVMET_TEST_XPR_H - -#include - -#include -#include -#include - -template -class TestXpr : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestXpr ); - CPPUNIT_TEST( fn_MMProd ); - CPPUNIT_TEST( fn_MMMProd ); - CPPUNIT_TEST( fn_MVProd ); - CPPUNIT_TEST( op_MMProd ); - CPPUNIT_TEST( op_MMMProd ); - CPPUNIT_TEST( op_MVProd ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestXpr() - : vZero(0), vOne(1), mZero(0), mOne(1), scalar(10) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void fn_MMProd(); - void fn_MMMProd(); - void fn_MVProd(); - void op_MMProd(); - void op_MMMProd(); - void op_MVProd(); - -private: - const vector_type vZero; - const vector_type vOne; - vector_type v1, v1b; - vector_type vBig; /**< vector 10x bigger than v1 */ - -private: - const matrix_type mZero; - const matrix_type mOne; - matrix_type m1, m1b; - matrix_type mBig; /**< matrix 10x bigger than m1 */ - -private: - const T scalar; -}; - -/***************************************************************************** - * Implementation part I (cppunit part) - ****************************************************************************/ - -template -void TestXpr::setUp() { - v1 = 1,2,3; - v1b = v1; - vBig = 10,20,30; - - m1 = 1,4,7, - 2,5,8, - 3,6,9; - m1b = m1; - mBig = 10,40,70, - 20,50,80, - 30,60,90; -} - -template -void TestXpr::tearDown() { } - -/***************************************************************************** - * Implementation part II - ****************************************************************************/ - -/* - * XprMatrix - XprMatrix - */ -template -void -TestXpr::fn_MMProd() { - matrix_type mr1(0), mr2(0), mr(0); - matrix_type m; - - tvmet::util::Gemm(m1, mOne, mr1); - tvmet::util::Gemm(m1, mOne, mr2); - tvmet::util::Gemm(mr1, mr2, mr); - - // XprMatrix * XprMatrix - m = prod(prod(m1,mOne), prod(m1,mOne)); - - CPPUNIT_ASSERT( all_elements(mr == m) ); -} - -/* - * Matrix - XprMatrix - XprMatrix - */ -template -void -TestXpr::fn_MMMProd() { - matrix_type m; - matrix_type rhs(0), r(0); - - tvmet::util::Gemm(m1, m1, rhs); - tvmet::util::Gemm(m1, rhs, r); - - // Matrix * XprMatrix * XprMatrix - m = prod(m1, prod(m1, m1)); - - CPPUNIT_ASSERT( all_elements(r == m) ); -} - -/* - * XprMatrix - XprVector - */ -template -void -TestXpr::fn_MVProd() { - matrix_type mr1(0); - vector_type vr(0), v; - - tvmet::util::Gemm(m1, mOne, mr1); - tvmet::util::Gemv(mr1, v1, vr); - - // XprMatrix * XprVector - v = prod(prod(m1,mOne), mul(v1,vOne)); - - CPPUNIT_ASSERT( all_elements(vr == v) ); -} - -/* - * XprMatrix - XprMatrix - */ -template -void -TestXpr::op_MMProd() { - matrix_type mr1(0), mr2(0), mr(0), m; - - tvmet::util::Gemm(m1, mOne, mr1); - tvmet::util::Gemm(m1, mOne, mr2); - tvmet::util::Gemm(mr1, mr2, mr); - - // XprMatrix * XprMatrix - m = (m1*mOne)*(m1*mOne); - - CPPUNIT_ASSERT( all_elements(mr == m) ); -} - -/* - * Matrix - XprMatrix - XprMatrix - */ -template -void -TestXpr::op_MMMProd() { - matrix_type m; - matrix_type rhs(0), r(0); - - tvmet::util::Gemm(m1, m1, rhs); - tvmet::util::Gemm(m1, rhs, r); - - // Matrix * XprMatrix * XprMatrix - m = m1 * m1 * m1; - - CPPUNIT_ASSERT( all_elements(r == m) ); -} - -/* - * XprMatrix - XprVector - */ -template -void -TestXpr::op_MVProd() { - matrix_type mr1(0); - vector_type vr(0), v; - - tvmet::util::Gemm(m1, mOne, mr1); - tvmet::util::Gemv(mr1, v1, vr); - - // XprMatrix * XprVector - v = (m1*mOne)*(v1*vOne); - - CPPUNIT_ASSERT( all_elements(vr == v) ); -} - -#endif // TVMET_TEST_XPR_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.h b/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.h deleted file mode 100644 index c0d53df3c..000000000 --- a/tvmet-1.7.1/testsuite/TestXprMatrixFunctions.h +++ /dev/null @@ -1,562 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestXprMatrixFunctions.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_XPR_MATRIXFUNC_H -#define TVMET_TEST_XPR_MATRIXFUNC_H - -#include - -#include -#include -#include - -template -class TestXprMatrixFunctions : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestXprMatrixFunctions ); - CPPUNIT_TEST( scalarFuncs1 ); - CPPUNIT_TEST( scalarFuncs2 ); - CPPUNIT_TEST( globalXprMatrixFuncs1 ); - CPPUNIT_TEST( globalXprMatrixFuncs2 ); - CPPUNIT_TEST( globalXprMatrixFuncs3 ); - CPPUNIT_TEST( fn_prod1 ); - CPPUNIT_TEST( fn_prod2 ); - CPPUNIT_TEST( fn_prod3 ); - CPPUNIT_TEST( fn_trans ); - CPPUNIT_TEST( fn_MtM_prod ); - CPPUNIT_TEST( fn_MMt_prod ); - CPPUNIT_TEST( fn_prodTrans ); - CPPUNIT_TEST( fn_trace ); - CPPUNIT_TEST( rowVector1 ); - CPPUNIT_TEST( rowVector2 ); - CPPUNIT_TEST( colVector1 ); - CPPUNIT_TEST( colVector2 ); - CPPUNIT_TEST( fn_diag1 ); - CPPUNIT_TEST( fn_diag2 ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestXprMatrixFunctions() - : mZero(0), mOne(1), scalar(10), scalar2(2) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void scalarFuncs1(); - void scalarFuncs2(); - void globalXprMatrixFuncs1(); - void globalXprMatrixFuncs2(); - void globalXprMatrixFuncs3(); - void fn_prod1(); - void fn_prod2(); - void fn_prod3(); - void fn_trans(); - void fn_MtM_prod(); - void fn_MMt_prod(); - void fn_prodTrans(); - void fn_trace(); - void rowVector1(); - void rowVector2(); - void colVector1(); - void colVector2(); - void fn_diag1(); - void fn_diag2(); - -private: - const matrix_type mZero; - const matrix_type mOne; - matrix_type m1; - matrix_type mBig; /**< matrix 10x bigger than m1 */ - -private: - vector_type m1_r0, m1_r1, m1_r2; // row vectors - vector_type m1_c0, m1_c1, m1_c2; // col vectors - -private: - const T scalar; - const T scalar2; -}; - - -/***************************************************************************** - * Implementation Part I (cppunit part) - *** *************************************************************************/ - - -template -void TestXprMatrixFunctions::setUp() { - m1 = 1,4,7, - 2,5,8, - 3,6,9; - - m1_r0 = 1,4,7; - m1_r1 = 2,5,8; - m1_r2 = 3,6,9; - - m1_c0 = 1,2,3; - m1_c1 = 4,5,6; - m1_c2 = 7,8,9; - - mBig = 10,40,70, - 20,50,80, - 30,60,90; -} - - -template -void TestXprMatrixFunctions::tearDown() { } - - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -/* - * global math operators with scalars - * Note: checked against member operators since they are allready checked - */ -template -void -TestXprMatrixFunctions::scalarFuncs1() { - matrix_type r1(m1), r2(m1); - matrix_type t1(0), t2(0), t3(0), t4(0); - - r1 += scalar; - r2 -= scalar; - - t1 = add(T(1)*m1, scalar); - t2 = sub(T(1)*m1, scalar); - t3 = mul(T(1)*m1, scalar); - t4 = div(T(1)*mBig, scalar); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == mBig) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * global math operators with scalars, part II - * Note: checked against member operators since they are allready checked - */ -template -void -TestXprMatrixFunctions::scalarFuncs2() { - matrix_type r1(m1), r2(m1); - matrix_type t1(0), t2(0); - - r1 += scalar; - r2 *= scalar; - - t1 = add(scalar, T(1)*m1); - t2 = mul(scalar, T(1)*m1); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); -} - - -/* - * global math operators with matrizes - */ -template -void -TestXprMatrixFunctions::globalXprMatrixFuncs1() { - matrix_type t1(0), t2(0), t3(0), t4(0); - matrix_type m2(m1); - - t1 = add(T(1)*m1, T(1)*m2); - t2 = sub(T(1)*m1, T(1)*m2); - - { - using namespace tvmet::element_wise; - - t3 = mul(T(1)*m1, T(1)*mOne); - t4 = div(T(1)*m1, T(1)*mOne); - } - - CPPUNIT_ASSERT( all_elements(t1 == 2*m1) ); - CPPUNIT_ASSERT( all_elements(t2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(t3 == m1) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * global math operators with matrizes and xpr - */ -template -void -TestXprMatrixFunctions::globalXprMatrixFuncs2() { - matrix_type r1(m1), r2(m1), r3(m1), r4(m1); - matrix_type t1(0), t2(0), t3(0), t4(0); - matrix_type m2(m1); - - r1 += T(1)*m1; - r2 -= T(1)*m1; - - { - using namespace tvmet::element_wise; - - r3 *= T(1)*m1; - r4 /= T(1)*m1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = add(T(1)*m1, m2*T(1)); - t2 = sub(T(1)*m1, m2*T(1)); - - { - using namespace tvmet::element_wise; - - t3 = mul(T(1)*m1, m2*T(1)); - t4 = div(T(1)*m1, m2*T(1)); - } - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with matrizes and xpr - */ -template -void -TestXprMatrixFunctions::globalXprMatrixFuncs3() { - matrix_type r1(m1), r2(m1), r3(m1), r4(m1); - matrix_type t1(0), t2(0), t3(0), t4(0); - matrix_type m2(m1); - - r1 += T(1)*m1; - r2 -= T(1)*m1; - - { - using namespace tvmet::element_wise; - - r3 *= T(1)*m1; - r4 /= T(1)*m1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = add(T(1)*m1, m2*T(1)); - t2 = sub(T(1)*m1, m2*T(1)); - - { - using namespace tvmet::element_wise; - - t3 = mul(T(1)*m1, m2*T(1)); - t4 = div(T(1)*m1, m2*T(1)); - } - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * product functions with matrizes - */ -template -void -TestXprMatrixFunctions::fn_prod1() { - matrix_type t1, t2, t3; - matrix_type r1, r2, r3; - matrix_type m2(m1); - - tvmet::util::Gemm(m1, m1, r1); - tvmet::util::Gemm(m1, mBig, r2); - tvmet::util::Gemm(mBig, m1, r3); - CPPUNIT_ASSERT( all_elements(r2 == r3) ); - - t1 = prod(T(1)*m1, T(1)*m2); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - - t2 = prod(T(1)*m1, T(1)*mBig); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - - t3 = prod(T(1)*mBig, T(1)*m1); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); -} - - -/* - * product functions with matrizes and xpr - * Note: Take care on aliasing! - */ -template -void -TestXprMatrixFunctions::fn_prod2() { - matrix_type r1(0), rm(0); - matrix_type m2(m1); - matrix_type t1; - - rm = scalar*m1; - - tvmet::util::Gemm(m1, rm, r1); - - t1 = prod(T(1)*m1, scalar*m2 /* alias mBig */); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); -} - - -/* - * product functions with matrizes - * Note: Take care on aliasing! - */ -template -void -TestXprMatrixFunctions::fn_prod3() { - matrix_type r1(0), rm(0); - matrix_type m2(m1); - matrix_type t1; - - rm = scalar*m1; - - tvmet::util::Gemm(rm, m1, r1); - - t1 = prod(scalar*m1 /* alias mBig */, T(1)*m2); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); -} - - -/* - * transpose functions with matrizes - */ -template -void -TestXprMatrixFunctions::fn_trans() { - matrix_type t1, t2; - - t1 = trans(T(1)*m1); - CPPUNIT_ASSERT( any_elements(t1 == m1) ); // XXX not very clever - - t2 = trans(T(1)*t1); // transpose back - CPPUNIT_ASSERT( all_elements(t2 == m1) ); -} - - -/* - * matrix function M^T * M - */ -template -void -TestXprMatrixFunctions::fn_MtM_prod() { - matrix_type m1t, r1; - matrix_type m2; - - // trans() and prod() is checked before! - m1t = trans(m1); - r1 = prod(m1t, mBig); - - m2 = MtM_prod(T(1)*m1, T(1)*mBig); - - CPPUNIT_ASSERT( all_elements(r1 == m2) ); -} - - -/* - * matrix function M * M^T - */ -template -void -TestXprMatrixFunctions::fn_MMt_prod() { - matrix_type m1t, r1; - matrix_type m2; - - // trans() and prod() is checked before! - m1t = trans(m1); - r1 = prod(mBig, m1t); - - m2 = MMt_prod(T(1)*mBig, T(1)*m1); - - CPPUNIT_ASSERT( all_elements(r1 == m2) ); -} - - -/* - * matrix function (M * M)^T - */ -template -void -TestXprMatrixFunctions::fn_prodTrans() { - matrix_type r1, r1t; - matrix_type m2; - - // trans() and prod() is checked before! - r1 = prod(m1, mBig); - r1t = trans(r1); - - m2 = trans_prod(T(1)*m1, T(1)*mBig); - - CPPUNIT_ASSERT( all_elements(r1t == m2) ); -} - - -/* - * trace - */ -template -void -TestXprMatrixFunctions::fn_trace() { -// declaration on trace not yet. -// T t1 = trace(T(1)*m1); -// T t2 = trace(T(1)*mBig); - -// CPPUNIT_ASSERT( t1 == (m1(0,0)+m1(1,1)+m1(2,2)) ); -// CPPUNIT_ASSERT( t2 == (mBig(0,0)+mBig(1,1)+mBig(2,2)) ); -} - - -/* - * matrix row vector I - */ -template -void -TestXprMatrixFunctions::rowVector1() { - vector_type r0, r1, r2; - - r0 = row(m1+m1, 0); - r1 = row(m1+m1, 1); - r2 = row(m1+m1, 2); - - CPPUNIT_ASSERT( all_elements(r0 == 2*m1_r0) ); - CPPUNIT_ASSERT( all_elements(r1 == 2*m1_r1) ); - CPPUNIT_ASSERT( all_elements(r2 == 2*m1_r2) ); -} - - -/* - * matrix row vector II - * g++ produce wrong results only for row0 - */ -template -void -TestXprMatrixFunctions::rowVector2() { - vector_type r0, r1, r2; - - r0 = row(T(1)*m1, 0); - r1 = row(T(1)*m1, 1); - r2 = row(T(1)*m1, 2); - - CPPUNIT_ASSERT( all_elements(r0 == m1_r0) ); - CPPUNIT_ASSERT( all_elements(r1 == m1_r1) ); - CPPUNIT_ASSERT( all_elements(r2 == m1_r2) ); -} - - -/* - * matrix col vector I - */ -template -void -TestXprMatrixFunctions::colVector1() { - vector_type c0, c1, c2; - - c0 = col(m1+m1, 0); - c1 = col(m1+m1, 1); - c2 = col(m1+m1, 2); - - CPPUNIT_ASSERT( all_elements(c0 == 2*m1_c0) ); - CPPUNIT_ASSERT( all_elements(c1 == 2*m1_c1) ); - CPPUNIT_ASSERT( all_elements(c2 == 2*m1_c2) ); -} - - -/* - * matrix col vector II - * g++ produce wrong results only for col0 - */ -template -void -TestXprMatrixFunctions::colVector2() { - vector_type c0, c1, c2; - - c0 = col(T(1)*m1, 0); - c1 = col(T(1)*m1, 1); - c2 = col(T(1)*m1, 2); - - CPPUNIT_ASSERT( all_elements(c0 == m1_c0) ); - CPPUNIT_ASSERT( all_elements(c1 == m1_c1) ); - CPPUNIT_ASSERT( all_elements(c2 == m1_c2) ); -} - - -/* - * matrix diag vector I - */ -template -void -TestXprMatrixFunctions::fn_diag1() { - vector_type r, v; - - r = 2*diag(m1); - - v = diag(m1+m1); - - CPPUNIT_ASSERT( all_elements(r == v) ); -} - - -/* - * matrix diag vector II - * g++ produce wrong results opposite to diag1 - */ -template -void -TestXprMatrixFunctions::fn_diag2() { - vector_type r, v; - - r = diag(m1); - - v = diag(T(1)*m1); - - CPPUNIT_ASSERT( all_elements(r == v) ); -} - - -#endif // TVMET_TEST_XPR_MATRIXFUNC_H - - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestXprMatrixOperators.h b/tvmet-1.7.1/testsuite/TestXprMatrixOperators.h deleted file mode 100644 index 3a5691c2a..000000000 --- a/tvmet-1.7.1/testsuite/TestXprMatrixOperators.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestXprMatrixOperators.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_XPR_MATRIXOPS_H -#define TVMET_TEST_XPR_MATRIXOPS_H - -#include - -#include -#include -#include - -template -class TestXprMatrixOperators : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestXprMatrixOperators ); - CPPUNIT_TEST( scalarOps1 ); - CPPUNIT_TEST( scalarOps2 ); - CPPUNIT_TEST( globalMatrixOps ); - CPPUNIT_TEST( negate ); - CPPUNIT_TEST( prodOps ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - -public: - TestXprMatrixOperators() - : mZero(0), mOne(1), scalar(10), scalar2(2) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void scalarOps1(); - void scalarOps2(); - void globalMatrixOps(); - void negate(); - void prodOps(); - -private: - const matrix_type mZero; - const matrix_type mOne; - matrix_type m1; - matrix_type mBig; /**< matrix 10x bigger than m1 */ - -private: - vector_type m1_r0, m1_r1, m1_r2; // row vectors - vector_type m1_c0, m1_c1, m1_c2; // col vectors - -private: - const T scalar; - const T scalar2; -}; - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - -template -void TestXprMatrixOperators::setUp() { - m1 = 1,4,7, - 2,5,8, - 3,6,9; - - m1_r0 = 1,4,7; - m1_r1 = 2,5,8; - m1_r2 = 3,6,9; - - m1_c0 = 1,2,3; - m1_c1 = 4,5,6; - m1_c2 = 7,8,9; - - mBig = 10,40,70, - 20,50,80, - 30,60,90; -} - -template -void TestXprMatrixOperators::tearDown() { } - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -/* - * global math operators with scalars - * Note: checked against member operators since they are allready checked - */ -template -void -TestXprMatrixOperators::scalarOps1() { - matrix_type r1(m1), r2(m1); - matrix_type t1(0), t2(0), t3(0), t4(0); - - r1 += scalar; - r2 -= scalar; - - t1 = T(1)*m1 + scalar; - t2 = T(1)*m1 - scalar; - t3 = T(1)*m1 * scalar; - t4 = T(1)*mBig / scalar; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == mBig) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * global math operators with scalars, part II - * Note: checked against member operators since they are allready checked - */ -template -void -TestXprMatrixOperators::scalarOps2() { - matrix_type r1(m1), r2(m1); - matrix_type t1(0), t2(0); - - r1 += scalar; - r2 *= scalar; - - t1 = scalar + T(1)*m1; - t2 = scalar * (T(1)*m1); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); -} - - -/* - * global math operators with matrizes - */ -template -void -TestXprMatrixOperators::globalMatrixOps() { - matrix_type t1(0), t2(0), t3(0), t4(0); - - t1 = T(1)*m1 + T(1)*m1; - t2 = T(1)*m1 - T(1)*m1; - - { - using namespace tvmet::element_wise; - - //t3 = m1 * mOne; // overloaded by global op*() - t4 = T(1)*m1 / (T(1)*mOne); - } - - CPPUNIT_ASSERT( all_elements(t1 == 2*m1) ); - CPPUNIT_ASSERT( all_elements(t2 == T(0)) ); - //CPPUNIT_ASSERT( all_elements(t3 == m1) ); - CPPUNIT_ASSERT( all_elements(t4 == m1) ); -} - - -/* - * negate operators with matrizes - */ -template -void -TestXprMatrixOperators::negate() { - matrix_type m1; - - m1 = -(T(1)*mOne); - - CPPUNIT_ASSERT( all_elements(m1 == T(-1)) ); -} - - -/* - * product functions with matrizes - * Note: Take care on aliasing! - */ -template -void -TestXprMatrixOperators::prodOps() { - matrix_type t1, t2, t3; - matrix_type r1, r2, r3; - matrix_type m2(m1);; - - tvmet::util::Gemm(m1, m1, r1); - tvmet::util::Gemm(m1, mBig, r2); - tvmet::util::Gemm(mBig, m1, r3); - CPPUNIT_ASSERT( all_elements(r2 == r3) ); - - t1 = (T(1)*m1) * (T(1)*m2); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - - t2 = (T(1)*m1) * (T(1)*mBig); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - - t3 = (T(1))*mBig * (T(1)*m1); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); -} - - -#endif // TVMET_TEST_XPR_MATRIXOPS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestXprVectorFunctions.h b/tvmet-1.7.1/testsuite/TestXprVectorFunctions.h deleted file mode 100644 index b1f1aa37b..000000000 --- a/tvmet-1.7.1/testsuite/TestXprVectorFunctions.h +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestXprVectorFunctions.h,v 1.2 2005/03/25 07:12:07 opetzold Exp $ - */ - -#ifndef TVMET_TEST_XPR_VECTORFUNC_H -#define TVMET_TEST_XPR_VECTORFUNC_H - -#include - -#include - -#include -#include - -template -class TestXprVectorFunctions : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestXprVectorFunctions ); - CPPUNIT_TEST( scalarFuncs1 ); - CPPUNIT_TEST( scalarFuncs2 ); - CPPUNIT_TEST( globalXprVectorFuncs ); - CPPUNIT_TEST( fn_sum ); - CPPUNIT_TEST( fn_product ); - CPPUNIT_TEST( fn_dot ); - CPPUNIT_TEST( fn_cross ); - CPPUNIT_TEST( fn_norm ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - -public: - TestXprVectorFunctions() - : vZero(0), vOne(1), scalar(10), scalar2(2) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void scalarFuncs1(); - void scalarFuncs2(); - void globalXprVectorFuncs(); - void fn_sum(); - void fn_product(); - void fn_dot(); - void fn_cross(); - void fn_norm(); - -private: - const vector_type vZero; - const vector_type vOne; - vector_type v1; - vector_type vBig; /**< vector 10x bigger than v1 */ - -private: - const T scalar; - const T scalar2; -}; - - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - - -template -void TestXprVectorFunctions::setUp() { - v1 = 1,2,3; - vBig = 10,20,30; -} - - -template -void TestXprVectorFunctions::tearDown() { } - - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -/* - * global math operators with scalars - * function(XprVector, scalar) - */ -template -void -TestXprVectorFunctions::scalarFuncs1() { - vector_type r1(v1), r2(v1), r3(v1), r4(vBig); - vector_type t1(0), t2(0), t3(0), t4(0); - - r1 += scalar; - r2 -= scalar; - r3 *= scalar; - r4 /= scalar; - - // all element wise - t1 = add(T(1)*v1, scalar); - t2 = sub(T(1)*v1, scalar); - t3 = mul(T(1)*v1, scalar); - t4 = div(T(1)*vBig, scalar); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with scalars, part II - * function(scalar, XprVector) - */ -template -void -TestXprVectorFunctions::scalarFuncs2() { - vector_type r1(v1), r2(v1); - vector_type t1(0), t2(0); - - r1 += scalar; - r2 *= scalar; - - // all element wise - t1 = add(scalar, T(1)*v1); - t2 = mul(scalar, T(1)*v1); - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); -} - - -/* - * global math operators with xpr vectors (using functions) - */ -template -void -TestXprVectorFunctions::globalXprVectorFuncs() { - vector_type r1(v1), r2(v1), r3(v1), r4(v1); - vector_type t1(0), t2(0), t3(0), t4(0); - vector_type v2(v1); - - CPPUNIT_ASSERT( all_elements( v1 == v2) ); - - r1 += v1; - r2 -= v1; - r3 *= v1; - - { - using namespace tvmet::element_wise; - r4 /= v1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = add(T(1)*v1, T(1)*v2); - t2 = sub(T(1)*v1, T(1)*v2); - t3 = mul(T(1)*v1, T(1)*v2); - t4 = tvmet::element_wise::div(T(1)*v1, T(1)*v2); - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * sum of vector - */ -template -void -TestXprVectorFunctions::fn_sum() { - T t = sum(scalar*v1); // alias vBig - - CPPUNIT_ASSERT( t == (vBig(0) + vBig(1) + vBig(2))); -} - - -/* - * product of vector - */ -template -void -TestXprVectorFunctions::fn_product() { - T t = product(scalar*v1); // alias vBig - - CPPUNIT_ASSERT( t == (vBig(0) * vBig(1) * vBig(2))); -} - -/* - * dot product - */ -template -void -TestXprVectorFunctions::fn_dot() { - vector_type v2(v1); - - T t1 = dot(T(1)*v1, T(1)*v2); - CPPUNIT_ASSERT( t1 == 14 ); - - T t2 = dot(T(1)*v1, T(1)*vBig); - CPPUNIT_ASSERT( t2 == 140 ); - - T t3 = dot(T(1)*v1, T(1)*vOne); - CPPUNIT_ASSERT( t3 == 6 ); - - T t4 = dot(T(1)*v1, T(1)*vZero); - CPPUNIT_ASSERT( t4 == 0 ); - - T t5 = dot(T(1)*v1, vOne); - CPPUNIT_ASSERT( t5 == 6 ); - - T t6 = dot(vOne, T(1)*v1); - CPPUNIT_ASSERT( t6 == 6 ); -} - - -/* - * cross product - */ -template -void -TestXprVectorFunctions::fn_cross() { - vector_type v2(v1); - - vector_type t1 = cross(T(1)*v1, T(1)*v2); - CPPUNIT_ASSERT( all_elements(t1 == vZero) ); // orthogonal vectors - - vector_type t2 = cross(T(1)*v1, T(1)*vBig); - CPPUNIT_ASSERT( all_elements(t2 == vZero) ); // orthogonal vectors - - const vector_type r(-1,2,-1); - vector_type t3 = cross(T(1)*v1, T(1)*vOne); - CPPUNIT_ASSERT( all_elements(t3 == r) ); - - vector_type t4 = cross(T(1)*v1, T(1)*vZero); - CPPUNIT_ASSERT( all_elements(t4 == vZero) ); - - vector_type t5 = cross(T(1)*v2, v1); // orthogonal - CPPUNIT_ASSERT( all_elements(t5 == vZero) ); - - vector_type t6 = cross(v1, T(1)*v2); // orthogonal - CPPUNIT_ASSERT( all_elements(t6 == vZero) ); -} - - -/* - * norm - * Note: norm2 for ints specialized - */ -template -void -TestXprVectorFunctions::fn_norm() { - vector_type v2; - vector_type r; - vector_type t5; - - T t1 = norm1(T(1)*v1); - T t2 = norm1(-v1); - T t3 = norm2(T(1)*v1); - T t4 = norm2(-v1); - - CPPUNIT_ASSERT( t1 == sum(v1) ); - CPPUNIT_ASSERT( t2 == sum(v1) ); - CPPUNIT_ASSERT( std::abs(t3 - std::sqrt(static_cast::float_type>(14))) - < std::numeric_limits::epsilon() ); - CPPUNIT_ASSERT( std::abs(t4 - std::sqrt(static_cast::float_type>(14))) - < std::numeric_limits::epsilon() ); - - r = v1/norm2(v1); // norm2 is checked before - t5 = normalize(T(1)*v1); - - CPPUNIT_ASSERT( all_elements(t5 == r) ); -} - - -/***************************************************************************** - * Implementation Part II (specialized for ints) - ****************************************************************************/ - - -/* - * norm on int specialized due to rounding problems - */ -template <> -void -TestXprVectorFunctions::fn_norm() { - vector_type v2; - - int t1 = norm1(int(1)*v1); - int t2 = norm1(-v1); - CPPUNIT_ASSERT( t1 == sum(v1) ); - CPPUNIT_ASSERT( t2 == sum(v1) ); -} - - -#endif // TVMET_TEST_XPR_VECTORFUNC_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/TestXprVectorOperators.h b/tvmet-1.7.1/testsuite/TestXprVectorOperators.h deleted file mode 100644 index 6bf0b2868..000000000 --- a/tvmet-1.7.1/testsuite/TestXprVectorOperators.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Tiny Vector Matrix Library - * Dense Vector Matrix Libary of Tiny size using Expression Templates - * - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: TestXprVectorOperators.h,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#ifndef TVMET_TEST_XPR_VECTOROPS_H -#define TVMET_TEST_XPR_VECTOROPS_H - -#include - -#include - -#include -#include - -template -class TestXprVectorOperators : public CppUnit::TestFixture -{ - CPPUNIT_TEST_SUITE( TestXprVectorOperators ); - CPPUNIT_TEST( scalarOps1 ); - CPPUNIT_TEST( scalarOps2 ); - CPPUNIT_TEST( globalXprVectorOps ); - CPPUNIT_TEST( negate ); - CPPUNIT_TEST_SUITE_END(); - -private: - typedef tvmet::Vector vector_type; - -public: - TestXprVectorOperators() - : vZero(0), vOne(1), scalar(10), scalar2(2) { } - -public: // cppunit interface - /** cppunit hook for fixture set up. */ - void setUp(); - - /** cppunit hook for fixture tear down. */ - void tearDown(); - -protected: - void scalarOps1(); - void scalarOps2(); - void globalXprVectorOps(); - void negate(); - -private: - const vector_type vZero; - const vector_type vOne; - vector_type v1; - vector_type vBig; /**< vector 10x bigger than v1 */ - -private: - const T scalar; - const T scalar2; -}; - - -/***************************************************************************** - * Implementation Part I (cppunit part) - ****************************************************************************/ - - -template -void TestXprVectorOperators::setUp() { - v1 = 1,2,3; - vBig = 10,20,30; -} - - -template -void TestXprVectorOperators::tearDown() { } - - -/***************************************************************************** - * Implementation Part II - ****************************************************************************/ - - -/* - * global math operators with scalars - * Note: checked against member operators since they are allready checked - */ -template -void -TestXprVectorOperators::scalarOps1() { - vector_type r1(v1), r2(v1), r3(v1), r4(vBig); - vector_type t1(0), t2(0), t3(0), t4(0); - - r1 += scalar; - r2 -= scalar; - r3 *= scalar; - r4 /= scalar; - - // all element wise - t1 = T(1)*v1 + scalar; - t2 = T(1)*v1 - scalar; - t3 = T(1)*v1 * scalar; - t4 = T(1)*vBig / scalar; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * global math operators with scalars, part II - * Note: checked against member operators since they are allready checked - */ -template -void -TestXprVectorOperators::scalarOps2() { - vector_type r1(v1), r2(v1); - vector_type t1(0), t2(0); - - r1 += scalar; - r2 *= scalar; - - // all element wise - t1 = scalar + T(1)*v1; - t2 = scalar * T(1)*v1; - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); -} - - -/* - * global math operators with vector expressions - */ -template -void -TestXprVectorOperators::globalXprVectorOps() { - vector_type r1(v1), r2(v1), r3(v1), r4(v1); - vector_type t1(0), t2(0), t3(0), t4(0); - vector_type v2(v1); - - CPPUNIT_ASSERT( all_elements( v1 == v2) ); - - r1 += v1; - r2 -= v1; - r3 *= v1; - - { - using namespace tvmet::element_wise; - r4 /= v1; - } - - CPPUNIT_ASSERT( all_elements(r2 == T(0)) ); - CPPUNIT_ASSERT( all_elements(r4 == T(1)) ); - - t1 = T(1)*v1 + T(1)*v2; - t2 = T(1)*v1 - T(1)*v2; - t3 = T(1)*v1 * T(1)*v2; - - { - using namespace tvmet::element_wise; - t4 = (T(1)*v1) / (T(1)*v1); - } - - CPPUNIT_ASSERT( all_elements(t1 == r1) ); - CPPUNIT_ASSERT( all_elements(t2 == r2) ); - CPPUNIT_ASSERT( all_elements(t3 == r3) ); - CPPUNIT_ASSERT( all_elements(t4 == r4) ); -} - - -/* - * negate operators - */ -template -void -TestXprVectorOperators::negate() { - vector_type v2; - - v2 = -(T(1)*vOne); - - CPPUNIT_ASSERT( all_elements(v2 == T(-1)) ); -} - -#endif // TVMET_TEST_XPR_VECTOROPS_H - -// Local Variables: -// mode:C++ -// End: diff --git a/tvmet-1.7.1/testsuite/compare.h b/tvmet-1.7.1/testsuite/compare.h deleted file mode 100644 index 3e27af8af..000000000 --- a/tvmet-1.7.1/testsuite/compare.h +++ /dev/null @@ -1,94 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2006-2007 Benoit Jacob - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: SelfTest.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -/* This file is mostly a duplication of util/Fuzzy.h, but with 1000 times - * bigger epsilon. This prevents false positives in tests. - */ - -#ifndef EIGEN_TESTSUITE_COMPARE_H -#define EIGEN_TESTSUITE_COMPARE_H - -#include - -#include -#include -#include - -#include - -template inline typename tvmet::Traits::real_type test_epsilon() -{ return static_cast::real_type>(0); } -template<> inline float test_epsilon() { return 1e-2f; } -template<> inline double test_epsilon() { return 1e-8; } -template<> inline float test_epsilon >() { return test_epsilon(); } -template<> inline double test_epsilon >() { return test_epsilon(); } - -/** - * Short version: returns true if the absolute value of \a a is much smaller - * than that of \a b. - * - * Full story: returns ( abs(a) <= abs(b) * test_epsilon ). - */ -template bool test_isNegligible( const T& a, const T& b ) -{ - return( tvmet::Traits::abs(a) - <= tvmet::Traits::abs(b) - * test_epsilon() ); -} - -/** - * Short version: returns true if \a a is approximately zero. - * - * Full story: returns test_isNegligible( a, static_cast(1) ); - */ -template bool test_isZero( const T& a ) -{ - return test_isNegligible( a, static_cast(1) ); -} - -/** - * Short version: returns true if a is very close to b, false otherwise. - * - * Full story: returns abs( a - b ) <= min( abs(a), abs(b) ) * test_epsilon. - */ -template bool test_isApprox( const T& a, const T& b ) -{ - return( tvmet::Traits::abs( a - b ) - <= std::min( tvmet::Traits::abs(a), - tvmet::Traits::abs(b) ) * test_epsilon() ); -} - -/** - * Short version: returns true if a is smaller or approximately equalt to b, false otherwise. - * - * Full story: returns a <= b || test_isApprox(a, b); - */ -template bool test_isLessThan( const T& a, const T& b ) -{ - return( tvmet::Traits::isLessThan_nonfuzzy(a, b) || test_isApprox(a, b) ); -} - -#define TEST(a) QVERIFY(a) -#define TEST_NEGLIGIBLE(a,b) QVERIFY(test_isNegligible(a,b)) -#define TEST_ZERO(a) QVERIFY(test_isZero(a)) -#define TEST_APPROX(a,b) QVERIFY(test_isApprox(a,b)) -#define TEST_LESSTHAN(a,b) QVERIFY(test_isLessThan(a,b)) - -#endif // EIGEN_TESTSUITE_COMPARE_H diff --git a/tvmet-1.7.1/testsuite/main.cpp b/tvmet-1.7.1/testsuite/main.cpp deleted file mode 100644 index 9116b345c..000000000 --- a/tvmet-1.7.1/testsuite/main.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: main.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#include "main.h" - -QTEST_APPLESS_MAIN( TvmetTestSuite ) -#include "main.moc" - diff --git a/tvmet-1.7.1/testsuite/main.h b/tvmet-1.7.1/testsuite/main.h deleted file mode 100644 index 2b5d3d8ed..000000000 --- a/tvmet-1.7.1/testsuite/main.h +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#ifndef EIGEN_TESTSUITE_MAIN_H -#define EIGEN_TESTSUITE_MAIN_H - -#include -#include -#include -#include - -#define EIGEN_USE_COMPLEX - -#ifdef EIGEN_USE_COMPLEX -#include -#endif - -#include -#include - -#include "compare.h" - -using namespace tvmet; -using namespace std; - -class TvmetTestSuite : public QObject -{ - Q_OBJECT - - public: - TvmetTestSuite() {}; - - private slots: - void testCommaInitializer(); - void testTraits(); - void testConstructors(); -}; - -#endif // EIGEN_TESTSUITE_MAIN_H diff --git a/tvmet-1.7.1/testsuite/testcommainitializer.cpp b/tvmet-1.7.1/testsuite/testcommainitializer.cpp deleted file mode 100644 index dab438441..000000000 --- a/tvmet-1.7.1/testsuite/testcommainitializer.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * Based on Tvmet source code, http://tvmet.sourceforge.net, - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: SelfTest.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#include "main.h" - -template static void TestCommaInitializer() -{ - // test the CommaInitializer - Vector v1; - v1 = 1,2,3; - Matrix m1; - m1 = 1,4,7, - 2,5,8, - 3,6,9; - - QVERIFY(v1(0) == T(1) && v1(1) == T(2) && v1(2) == T(3)); - - QVERIFY(m1(0,0) == T(1) && m1(0,1) == T(4) && m1(0,2) == T(7) && - m1(1,0) == T(2) && m1(1,1) == T(5) && m1(1,2) == T(8) && - m1(2,0) == T(3) && m1(2,1) == T(6) && m1(2,2) == T(9)); -} - -void TvmetTestSuite::testCommaInitializer() -{ - TestCommaInitializer (); - TestCommaInitializer (); - TestCommaInitializer > (); - TestCommaInitializer > (); -} diff --git a/tvmet-1.7.1/testsuite/testconstructors.cpp b/tvmet-1.7.1/testsuite/testconstructors.cpp deleted file mode 100644 index 7172923f0..000000000 --- a/tvmet-1.7.1/testsuite/testconstructors.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * Based on Tvmet source code, http://tvmet.sourceforge.net, - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: SelfTest.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#include "main.h" - -template -bool operator==(const tvmet::Vector & v1, const tvmet::Vector & v2) -{ - bool ret = true; - for(int i = 0; i < 3; i++) if(v1(i) != v2(i)) ret = false; - return ret; -} - -template -bool operator==(const tvmet::Matrix & v1, const tvmet::Matrix & v2) -{ - bool ret = true; - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - if(v1(i,j) != v2(i,j)) ret = false; - return ret; -} - -template struct TestConstructors -{ - typedef tvmet::Vector vector_type; - typedef tvmet::Matrix matrix_type; - - void vector_ctor2() - { - T data[] = {1,2,3}; - vector_type v(data); - TEST(v == v1); - } - - void vector_ctor5() - { - vector_type v(v1 - v1); // expression - TEST(v == vZero); - } - - void vector_operator_eq() - { - vector_type v; - v = v1; - TEST(v == v1); - } - - void vector_copy_ctor() - { - vector_type v(v1); - TEST(v == v1); - } - - void matrix_ctor2() - { - T data[] = { 1, 2, 3, - 4, 5, 6, - 7, 8, 9 }; - matrix_type m(data); - TEST(m == m1); - } - - void matrix_ctor4() - { - matrix_type m(m1 - m1); // expression - TEST(m == mZero); - } - - void matrix_operator_eq() - { - matrix_type m; - m = m1; - TEST(m == m1); - } - - void matrix_copy_ctor() - { - matrix_type m(m1); - TEST(m == m1); - } - - TestConstructors() - { - vZero = 0,0,0; - vOne = 1,1,1; - mZero = 0,0,0, - 0,0,0, - 0,0,0; - mOne = 1,1,1, - 1,1,1, - 1,1,1; - v1 = 1,2,3; - m1 = 1,4,7, - 2,5,8, - 3,6,9; - - vector_ctor2(); - vector_ctor5(); - vector_operator_eq(); - vector_copy_ctor(); - - matrix_ctor2(); - matrix_ctor4(); - matrix_operator_eq(); - matrix_copy_ctor(); - } - -private: - vector_type vZero; - vector_type vOne; - vector_type v1; - - matrix_type mZero; - matrix_type mOne; - matrix_type m1; -}; - -void TvmetTestSuite::testConstructors() -{ - TestConstructors(); - TestConstructors(); - TestConstructors(); - TestConstructors >(); - TestConstructors >(); - TestConstructors >(); -} diff --git a/tvmet-1.7.1/testsuite/testtraits.cpp b/tvmet-1.7.1/testsuite/testtraits.cpp deleted file mode 100644 index 1a533e65b..000000000 --- a/tvmet-1.7.1/testsuite/testtraits.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* This file is part of Eigen, a C++ template library for linear algebra - * Copyright (C) 2007 Benoit Jacob - * - * Based on Tvmet source code, http://tvmet.sourceforge.net, - * Copyright (C) 2001 - 2003 Olaf Petzold - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id: SelfTest.cc,v 1.1 2004/04/24 11:55:15 opetzold Exp $ - */ - -#include "main.h" - -template struct TestTraits -{ - void real_imag_conj_abs() - { - T x = Traits::random(); - typedef typename Traits::real_type real; - real r = Traits::real(x); - real i = Traits::imag(x); - T c = Traits::conj(x); - real a = Traits::abs(x); - - // a must be real - TEST_APPROX(a, Traits::real(a)); - TEST_APPROX(a, Traits::real(a)); - TEST_ZERO(Traits::imag(a)); - TEST_ZERO(Traits::imag(a)); - - // check Pythagora's formula - if(Traits::isFloat() || !Traits::isComplex()) TEST_APPROX(r*r + i*i, a*a); - - // check complex conjugation - TEST_APPROX(-i, Traits::imag(c)); - } - - void imag() - { - T x = Traits::random(); - typedef typename Traits::real_type real_type; - real_type r = Traits::imag(x); - TEST_ZERO(r); - } - - void conj() - { - T x = Traits::random(); - typedef typename Traits::real_type conj_type; - conj_type r = Traits::conj(x); - TEST_APPROX(r, x); - } - - void abs() - { - T x = Traits::random(); - typedef typename Traits::real_type value_type; - value_type r1 = Traits::abs(x); - value_type r2 = Traits::abs(-x); - TEST_APPROX(r1, r2); - } - - void sqrt() - { - // only test compilation here - T x = Traits::random(); - Traits::sqrt(x); - } - - void isApprox() - { - T x = Traits::random(); - T e = T(Traits::epsilon()) / T(10); - TEST(Traits::isApprox(x,x)); - TEST(Traits::isApprox(x,x+e)); - TEST(!Traits::isApprox(x,x+T(1))); - } - - void isNegligible() - { - T zero(0), one(1), x = Traits::random(); - TEST(Traits::isNegligible(zero, zero)); - TEST(Traits::isNegligible(zero, one)); - TEST(!Traits::isNegligible(one, one)); - if(x != zero) { - TEST(Traits::isNegligible(zero, x)); - } - TEST(!Traits::isNegligible(one, x)); - } - - - void isZero() - { - T zero(0), one(1), x = Traits::random(), y = Traits::random(); - TEST(Traits::isZero(zero)); - TEST(!Traits::isZero(one)); - TEST(Traits::isZero((x+y)*(x+y)-x*x-y*y-x*y-y*x)); - } - - void isLessThan() - { - if(Traits::isComplex()) { - T x = Traits::random(), y = Traits::random(); - TEST(!Traits::isLessThan(x,y)); - } - else { - T one(1), x = Traits::random(); - T e = T(Traits::epsilon()) / T(10); - TEST(Traits::isLessThan(x, x+one)); - TEST(!Traits::isLessThan(x+one, x)); - TEST(Traits::isLessThan(x, x+e)); - } - } - - TestTraits() - { - real_imag_conj_abs(); - sqrt(); - isApprox(); - isNegligible(); - isZero(); - isLessThan(); - } -}; - -void TvmetTestSuite::testTraits() -{ - TestTraits(); - TestTraits(); - TestTraits(); - TestTraits >(); - TestTraits >(); - TestTraits >(); -}