00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef MTL_MTL_FWD_INCLUDE
00013 #define MTL_MTL_FWD_INCLUDE
00014
00016 namespace mtl {
00017
00019 namespace tag {
00020 struct row_major;
00021 struct col_major;
00022
00023 struct scalar;
00024 struct vector;
00025 struct matrix;
00026
00028 namespace const_iter {}
00029
00031 namespace iter {}
00032 }
00033 using tag::row_major;
00034 using tag::col_major;
00035
00036 namespace index {
00037 struct c_index;
00038 struct f_index;
00039 }
00040
00042 namespace fixed {
00043 template <std::size_t Rows, std::size_t Cols> struct dimensions;
00044 }
00045
00047 namespace non_fixed {
00048 struct dimensions;
00049 }
00050
00052 namespace matrix {
00053
00054 template <typename Orientation, typename Index, typename Dimensions, bool OnStack> struct parameters;
00055
00056 template <typename Value, typename Parameters> class dense2D;
00057
00058 template <typename Value, typename Parameters>
00059 typename dense2D<Value, Parameters>::size_type num_cols(const dense2D<Value, Parameters>& matrix);
00060 template <typename Value, typename Parameters>
00061 typename dense2D<Value, Parameters>::size_type num_rows(const dense2D<Value, Parameters>& matrix);
00062 template <typename Value, typename Parameters>
00063 typename dense2D<Value, Parameters>::size_type size(const dense2D<Value, Parameters>& matrix);
00064
00065 template <typename Value, unsigned long Mask, typename Parameters> class morton_dense;
00066
00067 template <typename Value, unsigned long Mask, typename Parameters>
00068 typename morton_dense<Value, Mask, Parameters>::size_type num_cols(const morton_dense<Value, Mask, Parameters>& matrix);
00069 template <typename Value, unsigned long Mask, typename Parameters>
00070 typename morton_dense<Value, Mask, Parameters>::size_type num_rows(const morton_dense<Value, Mask, Parameters>& matrix);
00071 template <typename Value, unsigned long Mask, typename Parameters>
00072 typename morton_dense<Value, Mask, Parameters>::size_type size(const morton_dense<Value, Mask, Parameters>& matrix);
00073
00074 template <typename Value, typename Parameters> class compressed2D;
00075
00076 template <typename Value, typename Parameters>
00077 typename compressed2D<Value, Parameters>::size_type num_cols(const compressed2D<Value, Parameters>& matrix);
00078 template <typename Value, typename Parameters>
00079 typename compressed2D<Value, Parameters>::size_type num_rows(const compressed2D<Value, Parameters>& matrix);
00080 template <typename Value, typename Parameters>
00081 typename compressed2D<Value, Parameters>::size_type size(const compressed2D<Value, Parameters>& matrix);
00082
00083 template <typename Value, typename Parameters, typename Updater> struct compressed2D_inserter;
00084
00085 template <typename Vector> class multi_vector;
00086
00087 template <typename Matrix> struct transposed_orientation;
00088 template <typename Matrix> struct transposed_view;
00089
00090 template <typename Matrix> struct mat_expr;
00091 template <typename Matrix> struct dmat_expr;
00092 template <typename Matrix> struct smat_expr;
00093 template <typename M1, typename M2, typename SFunctor> struct mat_mat_op_expr;
00094 template <typename M1, typename M2> struct mat_mat_plus_expr;
00095 template <typename M1, typename M2> struct mat_mat_minus_expr;
00096 template <typename M1, typename M2> struct mat_mat_ele_times_expr;
00097 template <typename M1, typename M2> struct mat_mat_times_expr;
00098 template <typename M1, typename M2> struct mat_mat_asgn_expr;
00099
00100 template <typename Matrix> struct mat_expr;
00101 template <typename Functor, typename Matrix> struct map_view;
00102 template <typename Scaling, typename Matrix> struct scaled_view;
00103 template <typename Matrix, typename RScaling> struct rscaled_view;
00104 template <typename Matrix, typename Divisor> struct divide_by_view;
00105 template <typename Matrix> struct conj_view;
00106 template <typename Matrix> struct hermitian_view;
00107 template <typename Matrix> struct banded_view;
00108 }
00109
00110 using matrix::dense2D;
00111 using matrix::morton_dense;
00112 using matrix::compressed2D;
00113 using matrix::multi_vector;
00114 using matrix::transposed_orientation;
00115 using matrix::transposed_view;
00116
00117
00119 namespace vector {
00120 template <typename Vector> struct vec_expr;
00121 template <typename Value, typename Parameters> class dense_vector;
00122 template <typename Value, typename Parameters> class strided_vector_ref;
00123 template <typename Functor, typename Vector> struct map_view;
00124 template <typename Vector> struct conj_view;
00125 template <typename Vector> struct negate_view;
00126 template <typename Scaling, typename Vector> struct scaled_view;
00127 template <typename Vector, typename RScaling> struct rscaled_view;
00128 template <typename Vector, typename Divisor> struct divide_by_view;
00129 template <class E1, class E2, typename SFunctor> struct vec_vec_op_expr;
00130 template <class E1, class E2, typename SFunctor> struct vec_vec_pmop_expr;
00131 template <class E1, class E2, typename SFunctor> struct vec_vec_aop_expr;
00132 template <class E1, class E2, typename SFunctor> struct vec_scal_aop_expr;
00133 template <class E1, class E2> struct vec_vec_plus_asgn_expr;
00134 template <class E1, class E2> struct vec_vec_minus_asgn_expr;
00135 template <class E1, class E2> struct vec_vec_times_asgn_expr;
00136 template <class E1, class E2> struct vec_scal_times_asgn_expr;
00137 template <class E1, class E2> struct vec_scal_div_asgn_expr;
00138 template <class E1, class E2> struct vec_scal_asgn_expr;
00139 template <typename Vector> struct vec_const_ref_expr;
00140
00141 template <typename Value, typename Parameters, typename Value2>
00142 inline void fill(dense_vector<Value, Parameters>& vector, const Value2& value);
00143
00144 template <typename Value, typename Parameters>
00145 typename dense_vector<Value, Parameters>::size_type
00146 inline size(const dense_vector<Value, Parameters>& vector);
00147
00148 template <typename Value, typename Parameters>
00149 typename dense_vector<Value, Parameters>::size_type
00150 inline num_rows(const dense_vector<Value, Parameters>& vector);
00151
00152 template <typename Value, typename Parameters>
00153 typename dense_vector<Value, Parameters>::size_type
00154 inline num_cols(const dense_vector<Value, Parameters>& vector);
00155
00157 namespace fixed {
00158 template <std::size_t Size> struct dimension;
00159 }
00161 namespace non_fixed {
00162 struct dimension;
00163 }
00164
00165 }
00166
00167 using vector::dense_vector;
00168
00169
00170
00171 using vector::fill;
00172 using vector::size;
00173 using vector::num_rows;
00174 using vector::num_cols;
00175
00176 template <typename E1, typename E2> struct mat_cvec_times_expr;
00177
00178
00180 namespace traits {
00181 template <typename Value> struct category;
00182 template <typename Value> struct algebraic_category;
00183
00184 template <typename Collection> struct value;
00185 template <typename Collection> struct const_value;
00186 template <typename Collection> struct row;
00187 template <typename Collection> struct col;
00188 template <class Matrix> struct offset;
00189
00190 template <class Vector> struct index;
00191 template <typename Tag, typename Collection> struct range_generator;
00192
00193 template <typename T> struct eval_dense;
00194
00195
00196 namespace detail {
00197
00198 template <typename Collection, typename Cursor, typename Complexity> struct dense_element_range_generator;
00199 template <typename Matrix, typename Cursor, typename Complexity> struct all_offsets_range_generator;
00200 template <typename Matrix, typename Tag, int Level = 2> struct sub_matrix_cursor;
00201 template <typename Matrix, typename Complexity, int Level = 2> struct all_rows_range_generator;
00202 template <typename Matrix, typename Complexity, int Level = 2> struct all_cols_range_generator;
00203 template <typename Collection, typename RangeGenerator> struct referred_range_generator;
00204 }
00205 }
00206
00208 namespace concept {
00209 template <typename Matrix> struct ColumnInMatrix;
00210 template <typename Matrix> struct RowInMatrix;
00211 }
00212
00213 template <class Tag, class Collection> typename traits::range_generator<Tag, Collection>::type
00214 begin(Collection const& c);
00215
00216 template <class Tag, class Collection> typename traits::range_generator<Tag, Collection>::type
00217 end(Collection const& c);
00218
00219
00221 namespace tfunctor {
00223 template <typename V1, typename V2, typename AlgebraicCategory = tag::scalar> struct scale;
00224 }
00225
00227
00228 namespace tfunctor {
00230 template <typename V1, typename V2, typename AlgebraicCategory = tag::scalar> struct rscale;
00231 }
00232
00234
00235 namespace tfunctor {
00237 template <typename V1, typename V2, typename AlgebraicCategory = tag::scalar> struct divide_by;
00238 }
00239
00241 namespace sfunctor {
00242 template <typename Value, typename AlgebraicCategory = tag::scalar> struct conj_aux;
00243 template <typename Value> struct conj;
00244 template <typename Value> struct negate;
00245 }
00246
00247
00248
00250 namespace assign {}
00251
00253 namespace complexity_classes {}
00254
00256 namespace operations {}
00257
00259 namespace recursion {}
00260
00262 namespace utility {}
00263
00265 namespace wrec {}
00266
00267 namespace matrix {
00268 template <typename Matrix, typename ValueType, typename SizeType> struct crtp_matrix_assign;
00269 template <typename Matrix, typename ValueType, typename SizeType> struct const_crtp_matrix_bracket;
00270 template <typename Matrix, typename ValueType, typename SizeType> struct crtp_matrix_bracket;
00271 template <typename Matrix, typename ValueType, typename SizeType> struct const_crtp_base_matrix;
00272 template <typename Matrix, typename ValueType, typename SizeType> struct crtp_base_matrix;
00273 template <typename Matrix> struct const_crtp_matrix_range_bracket;
00274 }
00275
00276 namespace detail {
00277 template <typename Value, bool OnStack, unsigned Size= 0> struct contiguous_memory_block;
00278 template <typename Matrix, typename Updater> struct trivial_inserter;
00279 template <typename Collection> struct with_format_t;
00280 }
00281
00283 template <typename Collection> void swap(Collection& c1, Collection& c2);
00284
00286 template<typename T> struct is_clonable;
00287
00289 struct clone_ctor;
00290
00291 class irange;
00292
00294 namespace io {
00295 class matrix_market_istream;
00296 class matrix_market_ostream;
00297
00298 template <typename MatrixIStream, typename MatrixOStream> class matrix_file;
00299 typedef matrix_file<matrix_market_istream, matrix_market_ostream> matrix_market;
00300
00301 }
00302
00303
00304
00305 template <typename Assign, typename Backup> struct gen_cursor_dmat_dmat_mult_t;
00306 template <typename Assign, typename Backup> struct gen_dmat_dmat_mult_t;
00307 template <unsigned long Tiling1, unsigned long Tiling2, typename Assign, typename Backup> struct gen_tiling_dmat_dmat_mult_t;
00308 template <typename Assign, typename Backup> struct gen_tiling_44_dmat_dmat_mult_t;
00309 template <typename Assign, typename Backup> struct gen_tiling_22_dmat_dmat_mult_t;
00310 template <typename BaseMult, typename BaseTest, typename Assign, typename Backup> struct gen_recursive_dmat_dmat_mult_t;
00311 template <typename Assign, typename Backup> struct gen_platform_dmat_dmat_mult_t;
00312 template <typename Assign, typename Backup> struct gen_blas_dmat_dmat_mult_t;
00313 template <std::size_t SizeLimit, typename FunctorSmall, typename FunctorLarge> struct size_switch_dmat_dmat_mult_t;
00314 template <bool IsStatic, typename FunctorStatic, typename FunctorDynamic> struct static_switch_dmat_dmat_mult_t;
00315 template <typename Assign, typename Backup> struct fully_unroll_fixes_size_dmat_dmat_mult_t;
00316
00317 }
00318
00319 #endif // MTL_MTL_FWD_INCLUDE
00320
00321