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