flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
gsl_vector.hpp
Go to the documentation of this file.
1// ====================================================================
2// This file is part of FlexibleSUSY.
3//
4// FlexibleSUSY is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published
6// by the Free Software Foundation, either version 3 of the License,
7// or (at your option) any later version.
8//
9// FlexibleSUSY is distributed in the hope that it will be useful, but
10// WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with FlexibleSUSY. If not, see
16// <http://www.gnu.org/licenses/>.
17// ====================================================================
18
19#ifndef GSL_VECTOR_H
20#define GSL_VECTOR_H
21
22#include "gsl.hpp"
23#include <gsl/gsl_vector.h>
24#include <initializer_list>
25#include <iosfwd>
26#include <cstddef>
27
28namespace flexiblesusy {
29
31public:
32 GSL_vector() = default;
33 GSL_vector(std::size_t);
34 GSL_vector(const gsl_vector*);
35 GSL_vector(const GSL_vector&);
36 GSL_vector(GSL_vector&&) noexcept;
37 GSL_vector(std::initializer_list<double>);
38 ~GSL_vector() noexcept;
39
40 GSL_vector& operator=(const GSL_vector&);
41 GSL_vector& operator=(GSL_vector&&) noexcept;
42 double& operator[](std::size_t);
43 double operator[](std::size_t) const;
44 double& operator()(std::size_t);
45 double operator()(std::size_t) const;
46
47 bool empty() const noexcept;
48 const gsl_vector* raw() const noexcept;
49 gsl_vector* raw() noexcept;
50 gsl::owner<gsl_vector>* release() noexcept;
51 void set_all(double) noexcept;
52 std::size_t size() const noexcept;
53
54private:
55 gsl::owner<gsl_vector>* vec{nullptr};
56
57 void assign(const gsl_vector*);
58 void move_assign(GSL_vector&&) noexcept;
59 void range_check(std::size_t) const;
60};
61
62double* begin(GSL_vector&);
63double* end(GSL_vector&);
64
65const double* cbegin(const GSL_vector&);
66const double* cend(const GSL_vector&);
67
69bool is_finite(const GSL_vector&);
70
71std::ostream& operator<<(std::ostream&, const GSL_vector&);
72
73} // namespace flexiblesusy
74
75#endif
void assign(const gsl_vector *)
assign from gsl_vector
Definition: gsl_vector.cpp:100
void set_all(double) noexcept
set all elemets to same value
Definition: gsl_vector.cpp:201
const gsl_vector * raw() const noexcept
get raw pointer
Definition: gsl_vector.cpp:191
void range_check(std::size_t) const
Definition: gsl_vector.cpp:230
bool empty() const noexcept
check if empty
Definition: gsl_vector.cpp:123
gsl::owner< gsl_vector > * release() noexcept
release raw pointer from this object
Definition: gsl_vector.cpp:184
void move_assign(GSL_vector &&) noexcept
move assign
Definition: gsl_vector.cpp:224
std::size_t size() const noexcept
number of elements
Definition: gsl_vector.cpp:169
gsl::owner< gsl_vector > * vec
raw gsl_vector
Definition: gsl_vector.hpp:55
Implementation of Guideline Support Library.
double * end(GSL_vector &v)
iterator to end of GSL_vector
Definition: gsl_vector.cpp:254
double * begin(GSL_vector &v)
iterator to begin of GSL_vector
Definition: gsl_vector.cpp:245
bool is_finite(const gsl_vector *x)
Returns true if GSL vector contains only finite elements, false otherwise.
Definition: gsl_utils.cpp:32
const double * cbegin(const GSL_vector &v)
const iterator to begin of GSL_vector
Definition: gsl_vector.cpp:264
const double * cend(const GSL_vector &v)
const iterator to end of GSL_vector
Definition: gsl_vector.cpp:273