sl@0: // sl@0: // Copyright (c) 2000-2002 sl@0: // Joerg Walter, Mathias Koch sl@0: // sl@0: // Permission to use, copy, modify, distribute and sell this software sl@0: // and its documentation for any purpose is hereby granted without fee, sl@0: // provided that the above copyright notice appear in all copies and sl@0: // that both that copyright notice and this permission notice appear sl@0: // in supporting documentation. The authors make no representations sl@0: // about the suitability of this software for any purpose. sl@0: // It is provided "as is" without express or implied warranty. sl@0: // sl@0: // The authors gratefully acknowledge the support of sl@0: // GeNeSys mbH & Co. KG in producing this work. sl@0: // sl@0: sl@0: #ifndef BOOST_UBLAS_FWD_H sl@0: #define BOOST_UBLAS_FWD_H sl@0: sl@0: #include sl@0: sl@0: namespace boost { namespace numeric { namespace ublas { sl@0: sl@0: // Storage types sl@0: template > sl@0: class unbounded_array; sl@0: sl@0: template > sl@0: class bounded_array; sl@0: sl@0: template sl@0: class basic_range; sl@0: template sl@0: class basic_slice; sl@0: typedef basic_range<> range; sl@0: typedef basic_slice<> slice; sl@0: template > sl@0: class indirect_array; sl@0: sl@0: template > > sl@0: class map_std; sl@0: template > > sl@0: class map_array; sl@0: sl@0: // Expression types sl@0: struct scalar_tag {}; sl@0: sl@0: struct vector_tag {}; sl@0: template sl@0: class vector_expression; sl@0: template sl@0: class vector_container; sl@0: sl@0: template sl@0: class vector_reference; sl@0: sl@0: struct matrix_tag {}; sl@0: sl@0: template sl@0: class matrix_expression; sl@0: template sl@0: class matrix_container; sl@0: sl@0: template sl@0: class matrix_reference; sl@0: sl@0: template sl@0: class vector_range; sl@0: template sl@0: class vector_slice; sl@0: template > sl@0: class vector_indirect; sl@0: sl@0: template sl@0: class matrix_row; sl@0: template sl@0: class matrix_column; sl@0: template sl@0: class matrix_vector_range; sl@0: template sl@0: class matrix_vector_slice; sl@0: template > sl@0: class matrix_vector_indirect; sl@0: template sl@0: class matrix_range; sl@0: template sl@0: class matrix_slice; sl@0: template > sl@0: class matrix_indirect; sl@0: sl@0: template > sl@0: class vector; sl@0: template sl@0: class bounded_vector; sl@0: sl@0: template sl@0: class unit_vector; sl@0: template sl@0: class zero_vector; sl@0: template sl@0: class scalar_vector; sl@0: sl@0: template sl@0: class c_vector; sl@0: sl@0: // Sparse vectors sl@0: template > sl@0: class mapped_vector; sl@0: template, class TA = unbounded_array > sl@0: class compressed_vector; sl@0: template, class TA = unbounded_array > sl@0: class coordinate_vector; sl@0: sl@0: // Matrix orientation type sl@0: struct unknown_orientation_tag {}; sl@0: struct row_major_tag {}; sl@0: struct column_major_tag {}; sl@0: sl@0: // Matrix storage layout parameterisation sl@0: template sl@0: struct basic_row_major; sl@0: typedef basic_row_major<> row_major; sl@0: sl@0: template sl@0: struct basic_column_major; sl@0: typedef basic_column_major<> column_major; sl@0: sl@0: template > sl@0: class matrix; sl@0: template sl@0: class bounded_matrix; sl@0: sl@0: template sl@0: class identity_matrix; sl@0: template sl@0: class zero_matrix; sl@0: template sl@0: class scalar_matrix; sl@0: sl@0: template sl@0: class c_matrix; sl@0: sl@0: template > > sl@0: class vector_of_vector; sl@0: sl@0: // Triangular matrix type sl@0: struct lower_tag {}; sl@0: struct upper_tag {}; sl@0: struct unit_lower_tag : public lower_tag {}; sl@0: struct unit_upper_tag : public upper_tag {}; sl@0: struct strict_lower_tag : public lower_tag {}; sl@0: struct strict_upper_tag : public upper_tag {}; sl@0: sl@0: // Triangular matrix parameterisation sl@0: template sl@0: struct basic_full; sl@0: typedef basic_full<> full; sl@0: sl@0: template sl@0: struct basic_lower; sl@0: typedef basic_lower<> lower; sl@0: sl@0: template sl@0: struct basic_upper; sl@0: typedef basic_upper<> upper; sl@0: sl@0: template sl@0: struct basic_unit_lower; sl@0: typedef basic_unit_lower<> unit_lower; sl@0: sl@0: template sl@0: struct basic_unit_upper; sl@0: typedef basic_unit_upper<> unit_upper; sl@0: sl@0: template sl@0: struct basic_strict_lower; sl@0: typedef basic_strict_lower<> strict_lower; sl@0: sl@0: template sl@0: struct basic_strict_upper; sl@0: typedef basic_strict_upper<> strict_upper; sl@0: sl@0: // Special matrices sl@0: template > sl@0: class banded_matrix; sl@0: template > sl@0: class diagonal_matrix; sl@0: sl@0: template > sl@0: class triangular_matrix; sl@0: template sl@0: class triangular_adaptor; sl@0: sl@0: template > sl@0: class symmetric_matrix; sl@0: template sl@0: class symmetric_adaptor; sl@0: sl@0: template > sl@0: class hermitian_matrix; sl@0: template sl@0: class hermitian_adaptor; sl@0: sl@0: // Sparse matrices sl@0: template > sl@0: class mapped_matrix; sl@0: template > > sl@0: class mapped_vector_of_mapped_vector; sl@0: template, class TA = unbounded_array > sl@0: class compressed_matrix; sl@0: template, class TA = unbounded_array > sl@0: class coordinate_matrix; sl@0: sl@0: }}} sl@0: sl@0: #endif