|
Gromacs
2025.3
|
#include <gromacs/math/vectypes.h>
C++ class for 3D vectors.
| ValueType | Type |
This class provides a C++ version of rvec/dvec/ivec that can be put into STL containers etc. It is more or less a drop-in replacement for rvec and friends: it can be used in most contexts that accept the equivalent C type. However, there is one case where explicit conversion is necessary:
For the array conversion to work, the compiler should not add any extra alignment/padding in the layout of this class; that this actually works as intended is tested in the unit tests.
Public Types | |
| using | RawArray = ValueType[3] |
| Underlying raw C array type (rvec/dvec/ivec). | |
Public Member Functions | |
| BasicVector () | |
| Constructs default (uninitialized) vector. | |
| constexpr | BasicVector (ValueType x, ValueType y, ValueType z) |
| Constructs a vector from given values. | |
| constexpr | BasicVector (const RawArray x) |
| Constructs a vector from given values. More... | |
| constexpr | BasicVector (const BasicVector &src)=default |
| Default copy constructor. | |
| constexpr BasicVector & | operator= (const BasicVector &v)=default |
| Default copy assignment operator. | |
| constexpr | BasicVector (BasicVector &&src) noexcept=default |
| Default move constructor. | |
| constexpr BasicVector & | operator= (BasicVector &&v) noexcept=default |
| Default move assignment operator. | |
| constexpr ValueType & | operator[] (int i) |
| Indexing operator to make the class work as the raw array. | |
| constexpr ValueType | operator[] (int i) const |
| Indexing operator to make the class work as the raw array. | |
| constexpr bool | operator== (const BasicVector< ValueType > &right) const |
| Return whether all elements compare equal. | |
| constexpr bool | operator!= (const BasicVector< ValueType > &right) const |
| Return whether any elements compare unequal. | |
|
constexpr BasicVector < ValueType > & | operator+= (const BasicVector< ValueType > &right) |
| Allow inplace addition for BasicVector. | |
|
constexpr BasicVector < ValueType > & | operator-= (const BasicVector< ValueType > &right) |
| Allow inplace subtraction for BasicVector. | |
| constexpr BasicVector< ValueType > | operator+ (const BasicVector< ValueType > &right) const |
| Allow vector addition. | |
| constexpr BasicVector< ValueType > | operator- (const BasicVector< ValueType > &right) const |
| Allow vector subtraction. | |
| constexpr BasicVector< ValueType > | operator/ (const ValueType &right) const |
| Allow vector scalar division. | |
|
constexpr BasicVector < ValueType > & | operator*= (const ValueType &right) |
| Scale vector by a scalar. | |
|
constexpr BasicVector < ValueType > & | operator/= (const ValueType &right) |
| Divide vector by a scalar. | |
| constexpr BasicVector< ValueType > | operator- () const |
| Unary minus. | |
| constexpr ValueType | dot (const BasicVector< ValueType > &right) const |
| Return dot product. | |
| constexpr BasicVector< ValueType > | cross (const BasicVector< ValueType > &right) const |
| Allow vector vector multiplication (cross product) | |
| constexpr BasicVector< ValueType > | unitVector () const |
| Return normalized to unit vector. | |
| constexpr ValueType | norm2 () const |
| Length^2 of vector. | |
| constexpr ValueType | norm () const |
| Norm or length of vector. | |
| constexpr BasicVector< real > | toRVec () const |
| cast to RVec | |
| constexpr BasicVector< int > | toIVec () const |
| cast to IVec | |
| constexpr BasicVector< double > | toDVec () const |
| cast to DVec | |
| constexpr RawArray & | as_vec () |
| Converts to a raw C array where implicit conversion does not work. | |
| constexpr const RawArray & | as_vec () const |
| Converts to a raw C array where implicit conversion does not work. | |
| constexpr | operator RawArray & () |
| Makes BasicVector usable in contexts where a raw C array is expected. | |
| constexpr | operator const RawArray & () const |
| Makes BasicVector usable in contexts where a raw C array is expected. | |
|
inline |
Constructs a vector from given values.
This constructor is not explicit to support implicit conversions that allow, e.g., calling std::vector<RVec>::push_back() directly with an rvec parameter.
1.8.5