Gromacs
2023-rc1
|
#include <gromacs/utility/arrayref.h>
STL-like interface to a C array of T (or part of a std container of T).
T | Value type of elements. |
This class provides an interface similar to std::vector<T, A>
, with the following main differences:
This class is useful for writing wrappers that expose a view of the internal data stored as a single vector/array, which can be a whole or part of the underlying storage.
Methods in this class do not throw, except where indicated.
Note that due to a Doxygen limitation, the constructor that takes a C array whose size is known at compile time does not appear in the documentation.
To refer to const data of type T, ArrayRef<const T> is used. For both const and non-const std::vector and std::array an ArrayRef view can be created. Attempting to create a non-const ArrayRef of a const vector/array will result in a compiler error in the respective constructor.
For SIMD types there is template specialization available (e.g. ArrayRef<SimdReal>) in gromacs/simd/simd_memory.h which should have the same functionality as much as possible.
Public Types | |
typedef T | value_type |
Type of values stored in the reference. | |
typedef size_t | size_type |
Type for representing size of the reference. | |
typedef ptrdiff_t | difference_type |
Type for representing difference between two indices. | |
typedef const T & | const_reference |
Const reference to an element. | |
typedef const T * | const_pointer |
Const pointer to an element. | |
typedef ArrayRefIter< const T > | const_iterator |
Const iterator type to an element. | |
typedef T & | reference |
Reference to an element. | |
typedef T * | pointer |
Pointer to an element. | |
typedef ArrayRefIter< T > | iterator |
Iterator type to an element. | |
typedef std::reverse_iterator < iterator > | reverse_iterator |
Standard reverse iterator. | |
typedef std::reverse_iterator < const_iterator > | const_reverse_iterator |
Standard reverse iterator. | |
Public Member Functions | |
ArrayRef () | |
Constructs an empty reference. | |
template<typename U , typename = std::enable_if_t<std::is_convertible<typename std::remove_reference_t<U>::pointer, pointer>::value>> | |
ArrayRef (U &&o) | |
Constructs a reference to a container or reference. More... | |
ArrayRef (pointer begin, pointer end) | |
Constructs a reference to a particular range. More... | |
ArrayRef (iterator begin, iterator end) | |
Constructs a reference to a particular range. More... | |
ArrayRef | subArray (size_type start, size_type count) const |
Returns a reference to part of the memory. | |
iterator | begin () const |
Returns an iterator to the beginning of the reference. | |
iterator | end () const |
Returns an iterator to the end of the reference. | |
reverse_iterator | rbegin () const |
Returns an iterator to the reverse beginning of the reference. | |
reverse_iterator | rend () const |
Returns an iterator to the reverse end of the reference. | |
size_type | size () const |
Returns the size of the reference. More... | |
difference_type | ssize () const |
Returns the signed size of the reference. | |
size_type | capacity () const |
Identical to size(). | |
bool | empty () const |
Whether the reference refers to no memory. | |
reference | operator[] (size_type n) const |
Access an element. | |
reference | at (size_type n) const |
Access an element (throws on out-of-range error). | |
reference | front () const |
Returns the first element. | |
reference | back () const |
Returns the first element. | |
pointer | data () const |
Returns a raw pointer to the contents of the array. | |
void | swap (ArrayRef< T > &other) |
Swaps referenced memory with the other object. More... | |
Related Functions | |
(Note that these are not member functions.) | |
template<typename T > | |
ArrayRef< T > | arrayRefFromArray (T *begin, size_t size) |
Constructs a reference to a C array. More... | |
template<typename T > | |
ArrayRef< const T > | constArrayRefFromArray (const T *begin, size_t size) |
Constructs a reference to a C array. More... | |
|
inline |
Constructs a reference to a container or reference.
[in] | o | container to reference. |
Can be used to create a reference to a whole vector, std::array or an ArrayRef. The destination has to have a convertible pointer type (identical besides const or base class).
Passed container must remain valid and not be reallocated for the lifetime of this object.
This constructor is not explicit to allow directly passing a container to a method that takes ArrayRef.
|
inline |
Constructs a reference to a particular range.
[in] | begin | Pointer to the beginning of a range. |
[in] | end | Pointer to the end of a range. |
Passed pointers must remain valid for the lifetime of this object.
|
inline |
Constructs a reference to a particular range.
[in] | begin | Iterator to the beginning of a range. |
[in] | end | iterator to the end of a range. |
Passed iterators must remain valid for the lifetime of this object.
|
inline |
Returns the size of the reference.
|
inline |
Swaps referenced memory with the other object.
The actual memory areas are not modified, only the references are swapped.
|
related |
Constructs a reference to a C array.
[in] | begin | Pointer to the beginning of array. |
[in] | size | Number of elements in array. |
Passed array must remain valid for the lifetime of this object. If begin
is nullptr, return an empty ArrayRef.
|
related |
Constructs a reference to a C array.
[in] | begin | Pointer to the beginning of array. |
[in] | size | Number of elements in array. |
Passed array must remain valid for the lifetime of this object. If begin
is nullptr, return an empty ArrayRef.