// Software License for MTL // // Copyright (c) 2007 The Trustees of Indiana University. // 2008 Dresden University of Technology and the Trustees of Indiana University. // 2010 SimuNova UG (haftungsbeschränkt), www.simunova.com. // All rights reserved. // Authors: Peter Gottschling and Andrew Lumsdaine // // This file is part of the Matrix Template Library // // See also license.mtl.txt in the distribution. #ifndef MTL_MATRIX_INSERTER_INCLUDE #define MTL_MATRIX_INSERTER_INCLUDE #include #include #include namespace mtl { namespace matrix { /// Matrix inserter /** The matrix inserter has two template arguments: the type of the target matrix and an update functor. The update functor determines how an existing entry is updated: overwritten, added, subtracted... The default is to overwrite existing entries. **/ template > struct inserter : public mtl::detail::trivial_inserter { typedef mtl::detail::trivial_inserter base; typedef typename Matrix::size_type size_type; explicit inserter(Matrix& matrix, size_type slot_size = 0) : base(matrix, slot_size) {} }; template struct inserter, Updater> : compressed2D_inserter { typedef compressed2D matrix_type; typedef typename matrix_type::size_type size_type; typedef compressed2D_inserter base; explicit inserter(matrix_type& matrix, size_type slot_size = 5) : base(matrix, slot_size) {} }; template struct inserter, Updater> : coordinate2D_inserter, Updater> { typedef coordinate2D matrix_type; typedef typename Parameters::size_type size_type; typedef coordinate2D_inserter, Updater> base; explicit inserter(matrix_type& matrix, size_type slot_size= 1) : base(matrix, slot_size) {} }; template struct inserter, Updater> : sparse_banded_inserter { typedef sparse_banded matrix_type; typedef typename Parameters::size_type size_type; typedef sparse_banded_inserter base; explicit inserter(matrix_type& matrix, size_type slot_size= 1) : base(matrix, slot_size) {} }; template struct inserter, Updater> : ell_matrix_inserter { typedef ell_matrix matrix_type; typedef typename matrix_type::size_type size_type; typedef ell_matrix_inserter base; explicit inserter(matrix_type& matrix, size_type slot_size = 5) : base(matrix, slot_size) {} }; }} // namespace mtl::matrix #endif // MTL_MATRIX_INSERTER_INCLUDE