Gromacs
2018.8
|
#include <gromacs/utility/arrayref.h>
STL-like container for an interface to a C array of T (or part of a std::vector<T, A> or std::array<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 container. | |
typedef size_t | size_type |
Type for representing size of the container. | |
typedef ptrdiff_t | difference_type |
Type for representing difference between two container indices. | |
typedef const T & | const_reference |
Const reference to a container element. | |
typedef const T * | const_pointer |
Const pointer to a container element. | |
typedef const T * | const_iterator |
Const iterator type for the container. | |
typedef T & | reference |
Reference to a container element. | |
typedef T * | pointer |
Pointer to a container element. | |
typedef T * | iterator |
Iterator type for the container. | |
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 container. | |
iterator | begin () const |
Returns an iterator to the beginning of the container. | |
iterator | end () const |
Returns an iterator to the end of the container. | |
reverse_iterator | rbegin () const |
Returns an iterator to the reverse beginning of the container. | |
reverse_iterator | rend () const |
Returns an iterator to the reverse end of the container. | |
size_type | size () const |
Returns the size of the container. | |
size_type | capacity () const |
Identical to size(). | |
bool | empty () const |
Whether the container is empty. | |
reference | operator[] (size_type n) const |
Access container element. | |
reference | at (size_type n) const |
Access container element (throws on out-of-range error). | |
reference | front () const |
Returns the first element in the container. | |
reference | back () const |
Returns the first element in the container. | |
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 |