ViennaCL - The Vienna Computing Library  1.4.2
viennacl/tools/matrix_prod_kernel_class_deducer.hpp
Go to the documentation of this file.
00001 #ifndef VIENNACL_TOOLS_MATRIX_PROD_KERNEL_CLASS_DEDUCER_HPP_
00002 #define VIENNACL_TOOLS_MATRIX_PROD_KERNEL_CLASS_DEDUCER_HPP_
00003 
00004 /* =========================================================================
00005    Copyright (c) 2010-2013, Institute for Microelectronics,
00006                             Institute for Analysis and Scientific Computing,
00007                             TU Wien.
00008    Portions of this software are copyright by UChicago Argonne, LLC.
00009 
00010                             -----------------
00011                   ViennaCL - The Vienna Computing Library
00012                             -----------------
00013 
00014    Project Head:    Karl Rupp                   rupp@iue.tuwien.ac.at
00015                
00016    (A list of authors and contributors can be found in the PDF manual)
00017 
00018    License:         MIT (X11), see file LICENSE in the base directory
00019 ============================================================================= */
00020 
00025 #include <string>
00026 #include <fstream>
00027 #include <sstream>
00028 #include "viennacl/forwards.h"
00029 #include "viennacl/linalg/kernels/matrix_prod_col_col_col_kernels.h"
00030 #include "viennacl/linalg/kernels/matrix_prod_col_col_row_kernels.h"
00031 #include "viennacl/linalg/kernels/matrix_prod_col_row_col_kernels.h"
00032 #include "viennacl/linalg/kernels/matrix_prod_col_row_row_kernels.h"
00033 #include "viennacl/linalg/kernels/matrix_prod_row_col_col_kernels.h"
00034 #include "viennacl/linalg/kernels/matrix_prod_row_col_row_kernels.h"
00035 #include "viennacl/linalg/kernels/matrix_prod_row_row_col_kernels.h"
00036 #include "viennacl/linalg/kernels/matrix_prod_row_row_row_kernels.h"
00037 
00038 #include <vector>
00039 #include <map>
00040 
00041 namespace viennacl
00042 {
00043   namespace tools
00044   {
00045     
00047     template <typename MatrixType1, typename MatrixType2, typename MatrixType3>
00048     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER
00049     {
00050       typedef typename MatrixType1::ERROR_INVALID_TEMPLATE_ARGUMENTS_PROVIDED   ResultType;
00051     };
00052     
00054     template <typename SCALARTYPE>
00055     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::row_major>,
00056                                              viennacl::matrix_base<SCALARTYPE, viennacl::row_major>,
00057                                              viennacl::matrix_base<SCALARTYPE, viennacl::row_major> >
00058     {
00059       typedef viennacl::linalg::kernels::matrix_prod_row_row_row<SCALARTYPE, 1>     ResultType;
00060     };
00061 
00062     template <typename SCALARTYPE>
00063     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::row_major>,
00064                                              viennacl::matrix_base<SCALARTYPE, viennacl::row_major>,
00065                                              viennacl::matrix_base<SCALARTYPE, viennacl::column_major> >
00066     {
00067       typedef viennacl::linalg::kernels::matrix_prod_row_row_col<SCALARTYPE, 1>     ResultType;
00068     };
00069     
00070     template <typename SCALARTYPE>
00071     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::row_major>,
00072                                              viennacl::matrix_base<SCALARTYPE, viennacl::column_major>,
00073                                              viennacl::matrix_base<SCALARTYPE, viennacl::row_major> >
00074     {
00075       typedef viennacl::linalg::kernels::matrix_prod_row_col_row<SCALARTYPE, 1>     ResultType;
00076     };
00077 
00078     template <typename SCALARTYPE>
00079     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::row_major>,
00080                                              viennacl::matrix_base<SCALARTYPE, viennacl::column_major>,
00081                                              viennacl::matrix_base<SCALARTYPE, viennacl::column_major> >
00082     {
00083       typedef viennacl::linalg::kernels::matrix_prod_row_col_col<SCALARTYPE, 1>     ResultType;
00084     };
00085 
00086     
00087     template <typename SCALARTYPE>
00088     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::column_major>,
00089                                              viennacl::matrix_base<SCALARTYPE, viennacl::row_major>,
00090                                              viennacl::matrix_base<SCALARTYPE, viennacl::row_major> >
00091     {
00092       typedef viennacl::linalg::kernels::matrix_prod_col_row_row<SCALARTYPE, 1>     ResultType;
00093     };
00094 
00095     template <typename SCALARTYPE>
00096     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::column_major>,
00097                                              viennacl::matrix_base<SCALARTYPE, viennacl::row_major>,
00098                                              viennacl::matrix_base<SCALARTYPE, viennacl::column_major> >
00099     {
00100       typedef viennacl::linalg::kernels::matrix_prod_col_row_col<SCALARTYPE, 1>     ResultType;
00101     };
00102     
00103     template <typename SCALARTYPE>
00104     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::column_major>,
00105                                              viennacl::matrix_base<SCALARTYPE, viennacl::column_major>,
00106                                              viennacl::matrix_base<SCALARTYPE, viennacl::row_major> >
00107     {
00108       typedef viennacl::linalg::kernels::matrix_prod_col_col_row<SCALARTYPE, 1>     ResultType;
00109     };
00110 
00111     template <typename SCALARTYPE>
00112     struct MATRIX_PROD_KERNEL_CLASS_DEDUCER< viennacl::matrix_base<SCALARTYPE, viennacl::column_major>,
00113                                              viennacl::matrix_base<SCALARTYPE, viennacl::column_major>,
00114                                              viennacl::matrix_base<SCALARTYPE, viennacl::column_major> >
00115     {
00116       typedef viennacl::linalg::kernels::matrix_prod_col_col_col<SCALARTYPE, 1>     ResultType;
00117     };
00119   }
00120 
00121 }
00122 
00123 #endif