Skip to content

Commit

Permalink
make more functions noexcept
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Aug 26, 2016
1 parent a4659c3 commit 39bc8bb
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 19 deletions.
25 changes: 15 additions & 10 deletions src/gsl_vector.cpp
Expand Up @@ -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)
Expand All @@ -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);
}
Expand All @@ -77,6 +77,11 @@ GSL_vector::GSL_vector(std::initializer_list<double> 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));
}

Expand All @@ -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;
}
Expand All @@ -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));
Expand All @@ -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);
}
Expand All @@ -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;
Expand Down
18 changes: 9 additions & 9 deletions src/gsl_vector.hpp
Expand Up @@ -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;
};

Expand Down
10 changes: 10 additions & 0 deletions test/test_gsl_vector.cpp
Expand Up @@ -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);
Expand Down

0 comments on commit 39bc8bb

Please sign in to comment.