Chombo + EB  3.2
LayoutIterator.H
Go to the documentation of this file.
1 #ifdef CH_LANG_CC
2 /*
3  * _______ __
4  * / ___/ / ___ __ _ / / ___
5  * / /__/ _ \/ _ \/ V \/ _ \/ _ \
6  * \___/_//_/\___/_/_/_/_.__/\___/
7  * Please refer to Copyright.txt, in Chombo's root directory.
8  */
9 #endif
10 
11 #ifndef _LAYOUTITERATOR_H_
12 #define _LAYOUTITERATOR_H_
13 
14 #include "DataIndex.H"
15 #include "BoxLayout.H"
16 
17 #include "NamespaceHeader.H"
18 
19 ///An Iterator based on a BoxLayout object.
20 /**
21  An Iterator based on a BoxLayout object. It does not
22  support a dereferencing operation(1), since it is intended
23  to work with all of BoxLayouts, DisjointBoxLayouts, BoxLayoutDatas
24  LevelData's, and any object that is built on top
25  of a BoxLayout object. LayoutIterator accesses the data in a BoxLayout-based
26  object in a NON-data-parallel manner (i.e. every processor iterates through
27  \b all the Boxes in the BoxLayout). This differs from the DataIterator class.
28 
29  BoxLayout-based objects can act as the Factory for the LayoutIterator.
30 
31  (1) STL-speak. not critical for comprehension, but can help people
32  familiar with STL iterators and expecting similar behaviour.
33 
34 */
36 {
37 public:
38  /// a null constructed LayoutIterator will return false on ok()
40  {}
41 
42  // Default copy and null constructor should be fine.
43  // Not useful to someone using the iterator. Used by
44  // other classes in Chombo. Could make it private and
45  // let BoxLayout have access....
46 
47  virtual ~LayoutIterator()
48  {}
49 
50  /// return the index that this iterator is at
51  const LayoutIndex& operator () () const;
52 
53  /// return a copy of the index that this iterator is at
54  LayoutIndex i() const
55  {
56  return this->operator()();
57  }
58 
59  /// move the iterator to the next Box in the layout
60  virtual void operator ++ ();
61 
62  /// move the iterator to the next Box in the layout
63  void incr()
64  {
65  ++(*this);
66  }
67 
68  /// return true if this iterator is still in its Layout
69  virtual bool ok() const;
70 
71  /// initialize this iterator to the first Box in its Layout
72  void begin();
73 
74  /// same as begin()
75  void reset();
76 
77  /// move this iterator to after the last Box in the layout
78  /** The iterator will be !ok() afterwards. */
79  void end();
80 
81 
82 
83  const LayoutIndex& operator[](int ivec) const
84  {
85  return (*this->m_indicies)[ivec];
86  }
87 
89  {
90  return (*this->m_indicies)[ivec];
91  }
92 
93 protected:
94  friend class BoxLayout;
95  friend class DisjointBoxLayout;
96  friend class TimedDataIterator;
97  LayoutIterator(const BoxLayout& a_boxlayout,
98  const int* a_layoutID);
99 
102 
103  unsigned int m_current;
104 };
105 
107 {
108  CH_assert(ok());
109  return (*m_indicies)[m_current];
110 }
111 
113 {
114  ++m_current;
115 }
116 
117 inline bool LayoutIterator::ok() const
118 {
119  return m_current < m_layout.size();
120 }
121 
123 {
124  m_current = 0;
125 }
126 
127 #include "NamespaceFooter.H"
128 #endif
A reference-counting handle class.
Definition: RefCountedPtr.H:173
void incr()
move the iterator to the next Box in the layout
Definition: LayoutIterator.H:63
#define CH_assert(cond)
Definition: CHArray.H:37
const LayoutIndex & operator()() const
return the index that this iterator is at
Definition: LayoutIterator.H:106
A not-necessarily-disjoint collective of boxes.
Definition: BoxLayout.H:145
void end()
move this iterator to after the last Box in the layout
void begin()
initialize this iterator to the first Box in its Layout
Definition: LayoutIterator.H:122
const LayoutIndex & operator[](int ivec) const
Definition: LayoutIterator.H:83
unsigned int size() const
Returns the total number of boxes in the BoxLayout.
An Iterator based on a BoxLayout object.
Definition: LayoutIterator.H:35
LayoutIndex & operator[](int ivec)
Definition: LayoutIterator.H:88
void reset()
same as begin()
LayoutIterator()
a null constructed LayoutIterator will return false on ok()
Definition: LayoutIterator.H:39
unsigned int m_current
Definition: LayoutIterator.H:103
BoxLayout m_layout
Definition: LayoutIterator.H:100
virtual void operator++()
move the iterator to the next Box in the layout
Definition: LayoutIterator.H:112
A BoxLayout that has a concept of disjointedness.
Definition: DisjointBoxLayout.H:30
LayoutIndex i() const
return a copy of the index that this iterator is at
Definition: LayoutIterator.H:54
An index for LayoutIterator.
Definition: DataIndex.H:30
virtual bool ok() const
return true if this iterator is still in its Layout
Definition: LayoutIterator.H:117
virtual ~LayoutIterator()
Definition: LayoutIterator.H:47
Definition: TimedDataIterator.H:23
RefCountedPtr< Vector< LayoutIndex > > m_indicies
Definition: LayoutIterator.H:101