SparseRedux.h revision c981c48f5bc9aefeffc0bcb0cc3934c2fae179dd
11510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// This file is part of Eigen, a lightweight C++ template library
21510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// for linear algebra.
31510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
41510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
51510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
61510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// This Source Code Form is subject to the terms of the Mozilla
71510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Public License v. 2.0. If a copy of the MPL was not distributed
81510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
91510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#ifndef EIGEN_SPARSEREDUX_H
111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#define EIGEN_SPARSEREDUX_H
121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgnamespace Eigen {
141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtemplate<typename Derived>
161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtypename internal::traits<Derived>::Scalar
171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgSparseMatrixBase<Derived>::sum() const
181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  eigen_assert(rows()>0 && cols()>0 && "you are using a non initialized matrix");
201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  Scalar res(0);
211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  for (Index j=0; j<outerSize(); ++j)
221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    for (typename Derived::InnerIterator iter(derived(),j); iter; ++iter)
231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org      res += iter.value();
241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  return res;
251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtemplate<typename _Scalar, int _Options, typename _Index>
281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtypename internal::traits<SparseMatrix<_Scalar,_Options,_Index> >::Scalar
291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgSparseMatrix<_Scalar,_Options,_Index>::sum() const
301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  eigen_assert(rows()>0 && cols()>0 && "you are using a non initialized matrix");
321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  return Matrix<Scalar,1,Dynamic>::Map(&m_data.value(0), m_data.size()).sum();
331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtemplate<typename _Scalar, int _Options, typename _Index>
361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgtypename internal::traits<SparseVector<_Scalar,_Options, _Index> >::Scalar
371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgSparseVector<_Scalar,_Options,_Index>::sum() const
381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  eigen_assert(rows()>0 && cols()>0 && "you are using a non initialized matrix");
401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  return Matrix<Scalar,1,Dynamic>::Map(&m_data.value(0), m_data.size()).sum();
411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} // end namespace Eigen
441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#endif // EIGEN_SPARSEREDUX_H
461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org