Skip to content

Commit

Permalink
adding helper function to release gsl_vector from object
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Voigt authored and Alexander Voigt committed Oct 10, 2016
1 parent a53ea23 commit 889f65c
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/gsl_vector.cpp
Expand Up @@ -175,6 +175,20 @@ std::size_t GSL_vector::size() const noexcept
return vec->size;
}

/**
* Releases the encapsulated gsl_vector from this object. The pointer
* to the gsl_vector is returned. After this method has been called,
* this object will no longer delete the the gsl_vector .
*
* @return pointer to gsl_vector
*/
gsl::owner<gsl_vector>* GSL_vector::release() noexcept
{
gsl_vector* raw = vec;
vec = nullptr;
return raw;
}

const gsl_vector* GSL_vector::raw() const noexcept
{
return vec;
Expand Down
1 change: 1 addition & 0 deletions src/gsl_vector.hpp
Expand Up @@ -47,6 +47,7 @@ class 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
gsl::owner<gsl_vector>* release() noexcept; ///< release raw pointer from this object
void set_all(double) noexcept; ///< set all elemets to same value
std::size_t size() const noexcept; ///< number of elements

Expand Down
15 changes: 15 additions & 0 deletions test/test_gsl_vector.cpp
Expand Up @@ -361,3 +361,18 @@ BOOST_AUTO_TEST_CASE( test_range_for )

BOOST_CHECK_EQUAL(sum, 6.);
}

BOOST_AUTO_TEST_CASE( test_release )
{
GSL_vector v(3);
v[0] = 1.;
v[1] = 2.;
v[2] = 3.;

gsl::owner<gsl_vector>* vp = v.release();

BOOST_CHECK(v.raw() == nullptr);
BOOST_CHECK(vp != nullptr);

gsl_vector_free(vp);
}

0 comments on commit 889f65c

Please sign in to comment.