Advanced Multi-Physics (AMP)
On-Line Documentation
MeshElementVector.h
Go to the documentation of this file.
1#ifndef included_AMP_MeshElementVector
2#define included_AMP_MeshElementVector
3
4#include "AMP/utils/UtilityMacros.h"
5
6#include <initializer_list>
7#include <memory>
8#include <vector>
9
10
11namespace AMP::Mesh {
12
13
14class MeshElement;
15class MeshElementVectorIterator;
16
17
23{
24public:
26 virtual ~MeshElementVectorBase() = default;
27 inline bool empty() const { return d_size == 0; }
28 inline size_t size() const { return d_size; }
29 virtual const MeshElement &operator[]( size_t ) const = 0;
30
31protected:
33
34protected:
35 size_t d_size = 0;
36};
37
38
43template<class TYPE>
45{
46public:
47 MeshElementVector() = default;
49 {
50 d_size = N;
51 d_data = new TYPE[N];
52 }
53 MeshElementVector( const TYPE &x ) : MeshElementVector( 1 ) { d_data[0] = x; }
55 virtual ~MeshElementVector() { delete[] d_data; }
56 const MeshElement &operator[]( size_t i ) const override
57 {
59 return d_data[i];
60 }
61 TYPE &operator[]( size_t i )
62 {
64 return d_data[i];
65 }
66
67protected:
68 TYPE *d_data = nullptr;
69};
70
71
77{
78public:
79 template<class T>
80 MeshElementVectorPtr( std::unique_ptr<MeshElementVector<T>> p ) : ptr( std::move( p ) )
81 {
82 }
83 MeshElementVectorPtr( std::unique_ptr<MeshElementVectorBase> p ) : ptr( std::move( p ) ) {}
89 inline bool empty() const { return ptr ? ptr->empty() : true; }
90 inline size_t size() const { return ptr->size(); }
91 inline const MeshElement &operator[]( size_t i ) const { return ptr->operator[]( i ); }
94
95protected:
96 std::unique_ptr<MeshElementVectorBase> ptr;
97};
98
99
107{
108public: // iterator_traits
110 using iterator_category = std::random_access_iterator_tag;
112 using difference_type = ptrdiff_t;
115
116public:
118 size_t pos = 0 );
119 virtual ~MeshElementVectorIterator() = default;
122 Iterator &operator+=( int N ); // Arithmetic operator+=
123 bool operator==( const Iterator &rhs ) const;
124 bool operator!=( const Iterator &rhs ) const;
125 Iterator begin() const;
126 Iterator end() const;
127 inline size_t size() const { return d_data->size(); }
128 const MeshElement &operator*() const;
129
130protected:
131 size_t d_pos = 0;
132 size_t d_size = 0;
134};
135
136
137} // namespace AMP::Mesh
138
139#endif
A base class for a vector of MeshElements.
bool empty() const
Is the vector empty.
virtual ~MeshElementVectorBase()=default
Destructor.
virtual const MeshElement & operator[](size_t) const =0
Access the desired element.
size_t size() const
Return the number of elements.
MeshElementVectorBase(const MeshElementVectorBase &)=delete
Copy constructor.
A class used to iterate over a set of mesh elements.
std::random_access_iterator_tag iterator_category
bool operator==(const Iterator &rhs) const
size_t d_pos
Dereference the iterator.
bool operator!=(const Iterator &rhs) const
Check if two iterators are equal.
const MeshElementVectorBase * d_data
Iterator begin() const
Check if two iterators are not equal.
Iterator & operator+=(int N)
Decrement.
Iterator & operator++()
Destructor.
Iterator & operator--()
Increment.
size_t size() const
Return an iterator to the begining.
const MeshElement & operator*() const
Return the size of the iterator.
virtual ~MeshElementVectorIterator()=default
Default constructor.
Iterator end() const
Return an iterator to the begining.
MeshElementVectorIterator(const MeshElementVectorBase *ptr, size_t pos=0)
A pointer class to wrap a MeshElementVector.
MeshElementVectorPtr(MeshElementVectorPtr &&)=default
MeshElementVectorPtr & operator=(MeshElementVectorPtr &&)=default
MeshElementVectorPtr(std::unique_ptr< MeshElementVectorBase > p)
bool empty() const
Is the vector empty.
MeshElementVectorPtr(std::unique_ptr< MeshElementVector< T > > p)
const MeshElement & operator[](size_t i) const
MeshElementVectorPtr(const MeshElementVectorPtr &)=delete
MeshElementVectorPtr & operator=(const MeshElementVectorPtr &)=delete
size_t size() const
Return the number of elements.
MeshElementVectorIterator begin() const
std::unique_ptr< MeshElementVectorBase > ptr
MeshElementVectorIterator end() const
A base class for a vector of MeshElements.
MeshElementVector(const MeshElementVector &)=delete
const MeshElement & operator[](size_t i) const override
Access the desired element.
#define AMP_DEBUG_ASSERT(EXP)
Assert error (debug only)



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:40.
Comments on this page