ViennaCL - The Vienna Computing Library
1.2.0
Main Page
Namespaces
Data Structures
Files
File List
Globals
viennacl
tools
matrix_size_deducer.hpp
Go to the documentation of this file.
1
#ifndef VIENNACL_TOOLS_MATRIX_SIZE_DEDUCER_HPP_
2
#define VIENNACL_TOOLS_MATRIX_SIZE_DEDUCER_HPP_
3
4
/* =========================================================================
5
Copyright (c) 2010-2011, Institute for Microelectronics,
6
Institute for Analysis and Scientific Computing,
7
TU Wien.
8
9
-----------------
10
ViennaCL - The Vienna Computing Library
11
-----------------
12
13
Project Head: Karl Rupp rupp@iue.tuwien.ac.at
14
15
(A list of authors and contributors can be found in the PDF manual)
16
17
License: MIT (X11), see file LICENSE in the base directory
18
============================================================================= */
19
24
#include <string>
25
#include <fstream>
26
#include <sstream>
27
#include "
viennacl/forwards.h
"
28
#include "
viennacl/tools/adapter.hpp
"
29
30
#include <vector>
31
#include <map>
32
33
namespace
viennacl
34
{
35
namespace
tools
36
{
37
44
template
<
typename
LHS,
typename
RHS,
typename
OP>
45
struct
MATRIX_SIZE_DEDUCER
46
{
47
//Standard case: size1 from lhs, size2 from rhs (fits most cases)
48
static
size_t
size1
(LHS & lhs, RHS & rhs) {
return
lhs.size1(); }
49
static
size_t
size2
(LHS & lhs, RHS & rhs) {
return
rhs.size2(); }
50
};
51
52
//special case: outer vector product:
53
template
<
typename
ScalarType,
unsigned
int
A1,
unsigned
int
A2>
54
struct
MATRIX_SIZE_DEDUCER
<viennacl::
vector
<ScalarType, A1>,
55
viennacl::vector
<ScalarType, A2>,
56
viennacl::op_prod>
57
{
58
static
size_t
size1
(
viennacl::vector<ScalarType, A1>
& lhs,
59
viennacl::vector<ScalarType, A2>
& rhs) {
return
lhs.size1(); }
60
61
static
size_t
size2
(
viennacl::vector<ScalarType, A1>
& lhs,
62
viennacl::vector<ScalarType, A2>
& rhs) {
return
rhs.size2(); }
63
};
64
65
//special case: transposed matrix-Something product: Return the number of rows of the matrix
66
/*template <typename MatrixType, typename ScalarType, unsigned int A>
67
struct MATRIX_SIZE_DEDUCER<MatrixType, const viennacl::vector<ScalarType, A>, viennacl::op_prod>
68
{
69
static unsigned int size(MatrixType & lhs, const viennacl::vector<ScalarType, A> & rhs) { return lhs.size1(); }
70
};*/
71
72
template
<
typename
ScalarType,
typename
F1,
unsigned
int
A1,
typename
F2,
unsigned
int
A2>
73
struct
MATRIX_SIZE_DEDUCER
<const viennacl::
matrix_expression
<const viennacl::matrix<ScalarType, F1, A1>,
74
const viennacl::matrix<ScalarType, F1, A1>, op_trans>,
75
const
viennacl::matrix
<ScalarType, F2, A2>,
76
viennacl::op_prod>
77
{
78
static
size_t
size1
(
viennacl::matrix_expression
<
const
viennacl::matrix<ScalarType, F1, A1>
,
79
const
viennacl::matrix<ScalarType, F1, A1>
,
80
op_trans>
const
& lhs,
81
viennacl::matrix<ScalarType, F2, A2>
const
& rhs) {
return
lhs.lhs().size2(); }
82
static
size_t
size2
(
viennacl::matrix_expression
<
const
viennacl::matrix<ScalarType, F1, A1>
,
83
const
viennacl::matrix<ScalarType, F1, A1>
,
84
op_trans>
const
& lhs,
85
viennacl::matrix<ScalarType, F2, A2>
const
& rhs) {
return
rhs.
size2
(); }
86
};
87
88
template
<
typename
ScalarType,
typename
F1,
unsigned
int
A1,
typename
F2,
unsigned
int
A2>
89
struct
MATRIX_SIZE_DEDUCER
<const viennacl::
matrix
<ScalarType, F1, A1>,
90
const
viennacl::matrix_expression
<const viennacl::matrix<ScalarType, F2, A2>,
91
const viennacl::matrix<ScalarType, F2, A2>, op_trans>,
92
viennacl::op_prod>
93
{
94
static
size_t
size1
(
viennacl::matrix<ScalarType, F1, A1>
const
& lhs,
95
viennacl::matrix_expression
<
const
viennacl::matrix<ScalarType, F2, A2>
,
96
const
viennacl::matrix<ScalarType, F2, A2>
,
97
op_trans>
const
& rhs) {
return
lhs.
size1
(); }
98
static
size_t
size2
(
viennacl::matrix<ScalarType, F1, A1>
const
& lhs,
99
viennacl::matrix_expression
<
const
viennacl::matrix<ScalarType, F2, A2>
,
100
const
viennacl::matrix<ScalarType, F2, A2>
,
101
op_trans>
const
& rhs) {
return
rhs.lhs().size1(); }
102
};
103
104
}
105
}
106
107
#endif
108
Generated on Fri Jul 27 2012 22:02:53 for ViennaCL - The Vienna Computing Library by
1.8.1.2