From 39bc8bb3a12d72f2adfcda698ff079a0942071a3 Mon Sep 17 00:00:00 2001 From: Alexander Voigt Date: Fri, 26 Aug 2016 07:35:47 +0200 Subject: [PATCH] make more functions noexcept --- src/gsl_vector.cpp | 25 +++++++++++++++---------- src/gsl_vector.hpp | 18 +++++++++--------- test/test_gsl_vector.cpp | 10 ++++++++++ 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/gsl_vector.cpp b/src/gsl_vector.cpp index 735c32e89..d5160b3e0 100644 --- a/src/gsl_vector.cpp +++ b/src/gsl_vector.cpp @@ -42,7 +42,7 @@ GSL_vector::GSL_vector(std::size_t size) if (!vec) throw OutOfMemoryError( "Allocation of GSL_vector of size " + std::to_string(size) - + "failed."); + + " failed."); } GSL_vector::GSL_vector(const gsl_vector* v) @@ -58,7 +58,7 @@ GSL_vector::GSL_vector(const GSL_vector& other) if (!vec) throw OutOfMemoryError( "Allocation of GSL_vector of size " + std::to_string(other.size()) - + "failed."); + + " failed."); gsl_vector_memcpy(vec, other.vec); } @@ -77,6 +77,11 @@ GSL_vector::GSL_vector(std::initializer_list list) vec = gsl_vector_alloc(list.size()); + if (!vec) + throw OutOfMemoryError( + "Allocation of GSL_vector of size " + std::to_string(list.size()) + + " failed."); + std::copy(list.begin(), list.end(), gsl_vector_ptr(vec, 0)); } @@ -101,13 +106,13 @@ void GSL_vector::assign(const gsl_vector* other) if (!vec) throw OutOfMemoryError( "Allocation of GSL_vector of size " + std::to_string(other->size) - + "failed."); + + " failed."); } gsl_vector_memcpy(vec, other); } -bool GSL_vector::empty() const +bool GSL_vector::empty() const noexcept { return size() == 0; } @@ -120,7 +125,7 @@ const GSL_vector& GSL_vector::operator=(const GSL_vector& rhs) return *this; } -GSL_vector& GSL_vector::operator=(GSL_vector&& rhs) +GSL_vector& GSL_vector::operator=(GSL_vector&& rhs) noexcept { if (this != &rhs) move_assign(std::move(rhs)); @@ -140,23 +145,23 @@ double GSL_vector::operator[](std::size_t n) const return gsl_vector_get(vec, n); } -std::size_t GSL_vector::size() const +std::size_t GSL_vector::size() const noexcept { if (!vec) return 0; return vec->size; } -const gsl_vector* GSL_vector::raw() const +const gsl_vector* GSL_vector::raw() const noexcept { return vec; } -gsl_vector* GSL_vector::raw() +gsl_vector* GSL_vector::raw() noexcept { return vec; } -void GSL_vector::set_all(double value) +void GSL_vector::set_all(double value) noexcept { gsl_vector_set_all(vec, value); } @@ -174,7 +179,7 @@ std::ostream& operator<<(std::ostream& ostr, const GSL_vector& vec) std::cout << ")"; } -void GSL_vector::move_assign(GSL_vector&& other) +void GSL_vector::move_assign(GSL_vector&& other) noexcept { vec = other.vec; other.vec = NULL; diff --git a/src/gsl_vector.hpp b/src/gsl_vector.hpp index df90e042f..e002798dd 100644 --- a/src/gsl_vector.hpp +++ b/src/gsl_vector.hpp @@ -37,21 +37,21 @@ class GSL_vector { ~GSL_vector(); const GSL_vector& operator=(const GSL_vector&); - GSL_vector& operator=(GSL_vector&&); + GSL_vector& operator=(GSL_vector&&) noexcept; double& operator[](std::size_t); ///< element read/write access double operator[](std::size_t) const; ///< element read access - void assign(const gsl_vector*); ///< assign from gsl_vector - bool empty() const; ///< check if empty - const gsl_vector* raw() const; ///< get raw pointer - gsl_vector* raw(); ///< get raw pointer - void set_all(double); ///< set all elemets to same value - std::size_t size() const; + void assign(const gsl_vector*); ///< assign from gsl_vector + bool empty() const noexcept; ///< check if empty + const gsl_vector* raw() const noexcept; ///< get raw pointer + gsl_vector* raw() noexcept; ///< get raw pointer + void set_all(double) noexcept; ///< set all elemets to same value + std::size_t size() const noexcept; ///< number of elements private: - gsl_vector* vec; ///< raw gsl_vector + gsl_vector* vec; ///< raw gsl_vector - void move_assign(GSL_vector&&); ///< move assign + void move_assign(GSL_vector&&) noexcept; ///< move assign void range_check(std::size_t) const; }; diff --git a/test/test_gsl_vector.cpp b/test/test_gsl_vector.cpp index 31174e636..0c804814c 100644 --- a/test/test_gsl_vector.cpp +++ b/test/test_gsl_vector.cpp @@ -194,6 +194,16 @@ BOOST_AUTO_TEST_CASE( test_empty ) BOOST_CHECK(v2.empty()); } +BOOST_AUTO_TEST_CASE( test_set_all ) +{ + GSL_vector v(3); + v.set_all(1.); + + BOOST_CHECK_EQUAL(v[0], 1.); + BOOST_CHECK_EQUAL(v[1], 1.); + BOOST_CHECK_EQUAL(v[2], 1.); +} + BOOST_AUTO_TEST_CASE( test_move ) { GSL_vector v(3);