Gromacs
2019
|
#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 index | 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 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 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. | |
ArrayRef (const EmptyArrayRef &) | |
Constructs an empty reference. More... | |
template<typename U , typename = typename std::enable_if< std::is_convertible<typename std::remove_reference<U>::type::pointer, pointer>::value>::type> | |
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 | 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. | |
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) |
template<typename T > | |
ArrayRef< const T > | constArrayRefFromArray (const T *begin, size_t size) |
|
inline |
Constructs an empty reference.
This is provided for convenience, such that EmptyArrayRef can be used to initialize any ArrayRef, without specifying the template type. It is not explicit to enable that usage.
|
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 |
Swaps referenced memory with the other object.
The actual memory areas are not modified, only the references are swapped.
|
related |
|
related |