// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2013 Alec Jacobson // // This Source Code Form is subject to the terms of the Mozilla Public License // v. 2.0. If a copy of the MPL was not distributed with this file, You can // obtain one at http://mozilla.org/MPL/2.0/. #include "find.h" #include "verbose.h" #include template < typename T, typename DerivedI, typename DerivedJ, typename DerivedV> IGL_INLINE void igl::find( const Eigen::SparseMatrix& X, Eigen::MatrixBase & I, Eigen::MatrixBase & J, Eigen::MatrixBase & V) { // Resize outputs to fit nonzeros I.derived().resize(X.nonZeros(),1); J.derived().resize(X.nonZeros(),1); V.derived().resize(X.nonZeros(),1); int i = 0; // Iterate over outside for(int k=0; k::InnerIterator it (X,k); it; ++it) { V(i) = it.value(); I(i) = it.row(); J(i) = it.col(); i++; } } } template < typename DerivedX, typename DerivedI, typename DerivedJ, typename DerivedV> IGL_INLINE void igl::find( const Eigen::PlainObjectBase& X, Eigen::PlainObjectBase & I, Eigen::PlainObjectBase & J, Eigen::PlainObjectBase & V) { const int nnz = X.count(); I.resize(nnz,1); J.resize(nnz,1); V.resize(nnz,1); { int k = 0; for(int j = 0;j IGL_INLINE void igl::find( const Eigen::PlainObjectBase& X, Eigen::PlainObjectBase & I) { const int nnz = X.count(); I.resize(nnz,1); { int k = 0; for(int j = 0;j IGL_INLINE void igl::find( const Eigen::SparseVector& X, Eigen::Matrix & I, Eigen::Matrix & V) { // Resize outputs to fit nonzeros I.resize(X.nonZeros()); V.resize(X.nonZeros()); int i = 0; // loop over non-zeros for(typename Eigen::SparseVector::InnerIterator it(X); it; ++it) { I(i) = it.index(); V(i) = it.value(); i++; } } #ifdef IGL_STATIC_LIBRARY // Explicit template specialization // generated by autoexplicit.sh template void igl::find, Eigen::Matrix, Eigen::Matrix >(Eigen::SparseMatrix const&, Eigen::MatrixBase >&, Eigen::MatrixBase >&, Eigen::MatrixBase >&); template void igl::find, Eigen::Matrix, Eigen::Matrix >(Eigen::SparseMatrix const&, Eigen::MatrixBase >&, Eigen::MatrixBase >&, Eigen::MatrixBase >&); // generated by autoexplicit.sh template void igl::find, Eigen::Matrix, Eigen::Matrix >(Eigen::SparseMatrix const&, Eigen::MatrixBase >&, Eigen::MatrixBase >&, Eigen::MatrixBase >&); #endif