Reference documentation for deal.II version Git d51799cb54 2020-09-28 09:22:08 +0200
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
TriaActiveIterator< Accessor > Class Template Reference

#include <deal.II/grid/tria_iterator.h>

Inheritance diagram for TriaActiveIterator< Accessor >:
[legend]

Public Types

using iterator_category = typename TriaIterator< Accessor >::iterator_category
 
using value_type = typename TriaIterator< Accessor >::value_type
 
using pointer = typename TriaIterator< Accessor >::pointer
 
using reference = typename TriaIterator< Accessor >::reference
 
using difference_type = typename TriaIterator< Accessor >::difference_type
 
using AccessorType = Accessor
 

Public Member Functions

 TriaActiveIterator ()
 
 TriaActiveIterator (const TriaActiveIterator< Accessor > &)
 
 TriaActiveIterator (const TriaRawIterator< Accessor > &)
 
 TriaActiveIterator (const TriaIterator< Accessor > &)
 
 TriaActiveIterator (const Triangulation< Accessor::dimension, Accessor::space_dimension > *parent, const int level, const int index, const typename Accessor::AccessorData *local_data=0)
 
template<typename OtherAccessor >
 TriaActiveIterator (const TriaActiveIterator< OtherAccessor > &i)
 
 TriaActiveIterator (const TriaAccessorBase< Accessor::structure_dimension, Accessor::dimension, Accessor::space_dimension > &tria_accessor, const typename Accessor::AccessorData *local_data)
 
template<typename OtherAccessor >
 TriaActiveIterator (const TriaRawIterator< OtherAccessor > &i)
 
TriaActiveIterator< Accessor > & operator= (const TriaActiveIterator< Accessor > &)
 
TriaActiveIterator< Accessor > & operator= (const TriaIterator< Accessor > &)
 
TriaActiveIterator< Accessor > & operator= (const TriaRawIterator< Accessor > &)
 
template<class OtherAccessor >
TriaActiveIterator< Accessor > & operator= (const TriaActiveIterator< OtherAccessor > &)
 
template<class OtherAccessor >
TriaActiveIterator< Accessor > & operator= (const TriaRawIterator< OtherAccessor > &)
 
template<class OtherAccessor >
TriaActiveIterator< Accessor > & operator= (const TriaIterator< OtherAccessor > &)
 
TriaActiveIterator< Accessor > & operator++ ()
 
template<typename OtherAccessor = Accessor>
std::enable_if< std::is_convertible< OtherAccessor, Accessor >::value, bool >::type operator== (const TriaRawIterator< OtherAccessor > &) const
 
bool operator!= (const TriaRawIterator &) const
 
bool operator< (const TriaRawIterator &) const
 
bool operator> (const TriaRawIterator &) const
 
IteratorState::IteratorStates state () const
 
template<class StreamType >
void print (StreamType &out) const
 
std::size_t memory_consumption () const
 
Advancement of iterators
TriaActiveIterator< Accessor > operator++ (int)
 
TriaActiveIterator< Accessor > & operator-- ()
 
TriaActiveIterator< Accessor > operator-- (int)
 
Dereferencing
const Accessor & operator* () const
 
Accessor & operator* ()
 
const Accessor * operator-> () const
 
Accessor * operator-> ()
 
const Accessor & access_any () const
 

Static Public Member Functions

static ::ExceptionBaseExcAssignmentOfInactiveObject ()
 
static ::ExceptionBaseExcAssignmentOfUnusedObject ()
 
Exceptions
static ::ExceptionBaseExcDereferenceInvalidCell (Accessor arg1)
 
static ::ExceptionBaseExcDereferenceInvalidObject (Accessor arg1)
 
static ::ExceptionBaseExcAdvanceInvalidObject ()
 
static ::ExceptionBaseExcInvalidComparison ()
 

Protected Attributes

Accessor accessor
 

Detailed Description

template<typename Accessor>
class TriaActiveIterator< Accessor >

This specialization of TriaIterator provides access only to the active lines, quads, cells, etc. An active cell is a cell which is not refined and thus a cell on which calculations on the finest level are done.

Definition at line 759 of file tria_iterator.h.

Member Typedef Documentation

◆ iterator_category

template<typename Accessor>
using TriaActiveIterator< Accessor >::iterator_category = typename TriaIterator<Accessor>::iterator_category

Declare some alias which are standard for iterators and are used by algorithms to enquire about the specifics of the iterators they work on.

Definition at line 936 of file tria_iterator.h.

◆ value_type

template<typename Accessor>
using TriaActiveIterator< Accessor >::value_type = typename TriaIterator<Accessor>::value_type

Definition at line 937 of file tria_iterator.h.

◆ pointer

template<typename Accessor>
using TriaActiveIterator< Accessor >::pointer = typename TriaIterator<Accessor>::pointer

Definition at line 938 of file tria_iterator.h.

◆ reference

template<typename Accessor>
using TriaActiveIterator< Accessor >::reference = typename TriaIterator<Accessor>::reference

Definition at line 939 of file tria_iterator.h.

◆ difference_type

template<typename Accessor>
using TriaActiveIterator< Accessor >::difference_type = typename TriaIterator<Accessor>::difference_type

Definition at line 940 of file tria_iterator.h.

◆ AccessorType

template<typename Accessor>
using TriaRawIterator< Accessor >::AccessorType = Accessor
inherited

Declare the type of the Accessor for use in the outside world. This way other functions can use the Accessor's type without knowledge of how the exact implementation actually is.

Definition at line 238 of file tria_iterator.h.

Constructor & Destructor Documentation

◆ TriaActiveIterator() [1/8]

template<typename Accessor>
TriaActiveIterator< Accessor >::TriaActiveIterator ( )

Default constructor. This constructor creates an iterator pointing to an invalid object. The iterator is consequently not usable.

◆ TriaActiveIterator() [2/8]

template<typename Accessor>
TriaActiveIterator< Accessor >::TriaActiveIterator ( const TriaActiveIterator< Accessor > &  )

Copy constructor.

◆ TriaActiveIterator() [3/8]

template<typename Accessor>
TriaActiveIterator< Accessor >::TriaActiveIterator ( const TriaRawIterator< Accessor > &  )

Conversion constructor creating an active iterator from an iterators pointing to a potentially non-active object (or at least from which it is not apparent from the type alone that it is active).

Precondition
The argument passed to this constructor must either be (i) a past-the-end iterator; or (ii) it must point to an active object. All other cases will result in an exception.

◆ TriaActiveIterator() [4/8]

template<typename Accessor>
TriaActiveIterator< Accessor >::TriaActiveIterator ( const TriaIterator< Accessor > &  )

Conversion constructor creating an active iterator from an iterators pointing to a potentially non-active object (or at least from which it is not apparent from the type alone that it is active).

Precondition
The argument passed to this constructor must either be (i) a past-the-end iterator; or (ii) it must point to an active object. All other cases will result in an exception.

◆ TriaActiveIterator() [5/8]

template<typename Accessor>
TriaActiveIterator< Accessor >::TriaActiveIterator ( const Triangulation< Accessor::dimension, Accessor::space_dimension > *  parent,
const int  level,
const int  index,
const typename Accessor::AccessorData *  local_data = 0 
)

Constructor, initialized with the triangulation, the level and index of the object pointed to. The last parameter is of a type declared by the accessor class used by the current iterator.

Precondition
The argument passed to this constructor must either be (i) a past-the-end iterator; or (ii) it must point to an active object. All other cases will result in an exception.

◆ TriaActiveIterator() [6/8]

template<typename Accessor >
template<typename OtherAccessor >
TriaActiveIterator< Accessor >::TriaActiveIterator ( const TriaActiveIterator< OtherAccessor > &  i)
inline

This is a conversion operator (constructor) which takes another iterator type and copies the data; this conversion works, if there is a conversion path from the OtherAccessor class to the Accessor class of this object. One such path would be derived class to base class, which for example may be used to get a Triangulation::active_cell_iterator from a DoFHandler::active_cell_iterator, since the DoFAccessor class is derived from the TriaAccessorBase class.

Definition at line 1193 of file tria_iterator.h.

◆ TriaActiveIterator() [7/8]

template<typename Accessor>
TriaActiveIterator< Accessor >::TriaActiveIterator ( const TriaAccessorBase< Accessor::structure_dimension, Accessor::dimension, Accessor::space_dimension > &  tria_accessor,
const typename Accessor::AccessorData *  local_data 
)

Another conversion operator, where we use the pointers to the Triangulation from a TriaAccessorBase object, while the additional data is used according to the actual type of Accessor.

◆ TriaActiveIterator() [8/8]

template<typename Accessor >
template<typename OtherAccessor >
TriaActiveIterator< Accessor >::TriaActiveIterator ( const TriaRawIterator< OtherAccessor > &  i)
inline

Similar conversion operator to the above one, but does a check whether the iterator points to a used element, and is active, which is necessary for raw iterators. Since usual iterators are also raw iterators, this constructor works also for parameters of type TriaIterator<OtherAccessor>.

Precondition
The argument passed to this constructor must either be (i) a past-the-end iterator; or (ii) it must point to an active object. All other cases will result in an exception.

Definition at line 1202 of file tria_iterator.h.

Member Function Documentation

◆ operator=() [1/6]

template<typename Accessor>
TriaActiveIterator<Accessor>& TriaActiveIterator< Accessor >::operator= ( const TriaActiveIterator< Accessor > &  )

Assignment operator.

◆ operator=() [2/6]

template<typename Accessor>
TriaActiveIterator<Accessor>& TriaActiveIterator< Accessor >::operator= ( const TriaIterator< Accessor > &  )

Cross assignment operator. This assignment is only valid if the given iterator points to an active element.

◆ operator=() [3/6]

template<typename Accessor>
TriaActiveIterator<Accessor>& TriaActiveIterator< Accessor >::operator= ( const TriaRawIterator< Accessor > &  )

Cross assignment operator. This assignment is only valid if the given iterator points to an active element or past the end.

◆ operator=() [4/6]

template<typename Accessor>
template<class OtherAccessor >
TriaActiveIterator<Accessor>& TriaActiveIterator< Accessor >::operator= ( const TriaActiveIterator< OtherAccessor > &  )

Assignment operator. Requires, that Accessor can be copied from OtherAccessor.

◆ operator=() [5/6]

template<typename Accessor>
template<class OtherAccessor >
TriaActiveIterator<Accessor>& TriaActiveIterator< Accessor >::operator= ( const TriaRawIterator< OtherAccessor > &  )

Cross assignment operator. This assignment is only valid if the given iterator points to an active element or past the end. Requires, that Accessor can be copied from OtherAccessor.

◆ operator=() [6/6]

template<typename Accessor>
template<class OtherAccessor >
TriaActiveIterator<Accessor>& TriaActiveIterator< Accessor >::operator= ( const TriaIterator< OtherAccessor > &  )

Cross assignment operator. This assignment is only valid if the given iterator points to an active element. Requires, that Accessor can be copied from OtherAccessor.

◆ operator++() [1/2]

template<typename Accessor>
TriaActiveIterator<Accessor>& TriaActiveIterator< Accessor >::operator++ ( )

Prefix ++ operator: ++i. This operator advances the iterator to the next active element and returns a reference to *this.

◆ operator++() [2/2]

template<typename Accessor>
TriaActiveIterator<Accessor> TriaActiveIterator< Accessor >::operator++ ( int  )

Postfix ++ operator: i++. This operator advances the iterator to the next active element, but returns an iterator to the element previously pointed to. Since this involves a temporary and a copy operation and since an active_iterator is quite a large object for a pointer, use the prefix operator ++i whenever possible, especially in the head of for loops (for (; i!=end; ++i)) since there you normally never need the returned value.

◆ operator--() [1/2]

template<typename Accessor>
TriaActiveIterator<Accessor>& TriaActiveIterator< Accessor >::operator-- ( )

Prefix -- operator: --i. This operator advances the iterator to the previous active element and returns a reference to *this.

◆ operator--() [2/2]

template<typename Accessor>
TriaActiveIterator<Accessor> TriaActiveIterator< Accessor >::operator-- ( int  )

Postfix -- operator: i--.

◆ operator*() [1/2]

template<typename Accessor >
const Accessor & TriaRawIterator< Accessor >::operator* ( ) const
inlineinherited

Dereferencing operator, returns a reference to an accessor. Usage is thus like (*i).index ();

This function has to be specialized explicitly for the different Pointees, to allow an iterator<1,TriangulationLevel<1>::LinesData> to point to tria->lines.cells[index] while for one dimension higher it has to point to tria->quads.cells[index].

You must not dereference invalid or past the end iterators.

Definition at line 995 of file tria_iterator.h.

◆ operator*() [2/2]

template<typename Accessor >
Accessor & TriaRawIterator< Accessor >::operator* ( )
inlineinherited

Dereferencing operator, non-const version.

Definition at line 1010 of file tria_iterator.h.

◆ operator->() [1/2]

template<typename Accessor >
const Accessor * TriaRawIterator< Accessor >::operator-> ( ) const
inlineinherited

Dereferencing operator, returns a reference of the cell pointed to. Usage is thus like i->index ();

There is a const and a non-const version.

Definition at line 1034 of file tria_iterator.h.

◆ operator->() [2/2]

template<typename Accessor >
Accessor * TriaRawIterator< Accessor >::operator-> ( )
inlineinherited

Dereferencing operator, non-const version.

Definition at line 1042 of file tria_iterator.h.

◆ access_any()

template<typename Accessor >
const Accessor & TriaRawIterator< Accessor >::access_any ( ) const
inlineinherited

In order be able to assign end-iterators for different accessors to each other, we need an access function which returns the accessor regardless of its state.

Warning
This function should not be used in application programs. It is only intended for limited purposes inside the library and it makes debugging much harder.

Definition at line 1026 of file tria_iterator.h.

◆ operator==()

template<typename Accessor>
template<typename OtherAccessor = Accessor>
std::enable_if<std::is_convertible<OtherAccessor, Accessor>::value, bool>::type TriaRawIterator< Accessor >::operator== ( const TriaRawIterator< OtherAccessor > &  ) const
inherited

Compare for equality.

◆ operator!=()

template<typename Accessor>
bool TriaRawIterator< Accessor >::operator!= ( const TriaRawIterator< Accessor > &  ) const
inherited

Compare for inequality.

◆ operator<()

template<typename Accessor >
bool TriaRawIterator< Accessor >::operator< ( const TriaRawIterator< Accessor > &  other) const
inlineinherited

Ordering relation for iterators.

This relation attempts a total ordering of cells.

The relation is defined as follows:

For objects of Accessor::structure_dimension < Accessor::dimension, we simply compare the index of such an object. The ordering is lexicographic according to the following hierarchy (in the sense, that the next test is only applied if the previous was inconclusive):

  1. The past-the-end iterator is always ordered last. Two past-the-end iterators rank the same, thus false is returned in that case.

  2. The level of the cell.
  3. The index of a cell inside the level.
Note
The ordering is not consistent between different processor in a parallel::distributed::Triangulation because we rely on index(), which is likely not the same.

Definition at line 1061 of file tria_iterator.h.

◆ operator>()

template<typename Accessor >
bool TriaRawIterator< Accessor >::operator> ( const TriaRawIterator< Accessor > &  other) const
inlineinherited

Another comparison operator, implementing with the same ordering as operator<.

Definition at line 1085 of file tria_iterator.h.

◆ state()

template<typename Accessor >
IteratorState::IteratorStates TriaRawIterator< Accessor >::state ( ) const
inlineinherited

Return the state of the iterator.

Definition at line 1051 of file tria_iterator.h.

◆ print()

template<typename Accessor >
template<class StreamType >
void TriaRawIterator< Accessor >::print ( StreamType &  out) const
inlineinherited

Print the iterator to a stream out. The format is level.index.

Definition at line 1119 of file tria_iterator.h.

◆ memory_consumption()

template<typename Accessor >
std::size_t TriaRawIterator< Accessor >::memory_consumption ( ) const
inlineinherited

Determine an estimate for the memory consumption (in bytes) of this object.

Definition at line 1131 of file tria_iterator.h.

Member Data Documentation

◆ accessor

template<typename Accessor>
Accessor TriaRawIterator< Accessor >::accessor
protectedinherited

Object holding the real data.

Definition at line 551 of file tria_iterator.h.


The documentation for this class was generated from the following file: