diff options
Diffstat (limited to 'utils/fast_sparse_vector.h')
-rw-r--r-- | utils/fast_sparse_vector.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/utils/fast_sparse_vector.h b/utils/fast_sparse_vector.h index 1301581a..8fe6cb3d 100644 --- a/utils/fast_sparse_vector.h +++ b/utils/fast_sparse_vector.h @@ -190,6 +190,14 @@ class FastSparseVector { else return local_size_; } + size_t size_nonzero() const { + size_t sz = 0; + const_iterator it = this->begin(); + for (; it != this->end(); ++it) { + if (nonzero(it->first)) sz++; + } + return sz; + } inline void clear() { if (is_remote_) delete data_.rbmap; is_remote_ = false; @@ -214,6 +222,14 @@ class FastSparseVector { } return *this; } + template <typename O> + inline FastSparseVector<O>& plus_eq_v_times_s(const FastSparseVector<O>& other, const O scalar) { + const typename FastSparseVector<O>::const_iterator end = other.end(); + for (typename FastSparseVector<O>::const_iterator it = other.begin(); it != end; ++it) { + get_or_create_bin(it->first) += it->second * scalar; + } + return *this; + } inline FastSparseVector& operator-=(const FastSparseVector& other) { const typename FastSparseVector::const_iterator end = other.end(); for (typename FastSparseVector::const_iterator it = other.begin(); it != end; ++it) { |