![]() |
00001 // Copyright (C) 2004 Johan Hoffman and Anders Logg. 00002 // Licensed under the GNU GPL Version 2. 00003 00004 #ifndef __ELEMENT_ITERATOR_H 00005 #define __ELEMENT_ITERATOR_H 00006 00007 #include <dolfin/NewArray.h> 00008 00009 namespace dolfin 00010 { 00011 00012 class Element; 00013 class ElementGroup; 00014 class ElementGroupList; 00015 00016 typedef Element* ElementPointer; 00017 00020 00021 class ElementIterator 00022 { 00023 public: 00024 00026 ElementIterator(ElementGroupList& groups); 00027 00029 ElementIterator(ElementGroup& group); 00030 00032 ~ElementIterator(); 00033 00035 operator ElementPointer() const; 00036 00038 ElementIterator& operator++(); 00039 00041 Element& operator*() const; 00042 00044 Element* operator->() const; 00045 00047 bool end(); 00048 00050 class GenericElementIterator 00051 { 00052 public: 00053 virtual void operator++() = 0; 00054 virtual Element& operator*() const = 0; 00055 virtual Element* operator->() const = 0; 00056 virtual Element* pointer() const = 0; 00057 virtual bool end() = 0; 00058 }; 00059 00061 class ElementGroupListElementIterator : public GenericElementIterator 00062 { 00063 public: 00064 ElementGroupListElementIterator(ElementGroupList& groups); 00065 void operator++(); 00066 Element& operator*() const; 00067 Element* operator->() const; 00068 Element* pointer() const; 00069 bool end(); 00070 private: 00071 Element* element; 00072 NewArray<Element*>::iterator element_it; 00073 NewArray<Element*>::iterator element_at_end; 00074 NewArray<ElementGroup*>::iterator group_it; 00075 NewArray<ElementGroup*>::iterator group_at_end; 00076 }; 00077 00079 class ElementGroupElementIterator : public GenericElementIterator 00080 { 00081 public: 00082 ElementGroupElementIterator(ElementGroup& group); 00083 void operator++(); 00084 Element& operator*() const; 00085 Element* operator->() const; 00086 Element* pointer() const; 00087 bool end(); 00088 private: 00089 NewArray<Element*>::iterator it; 00090 NewArray<Element*>::iterator at_end; 00091 }; 00092 00093 private: 00094 00095 GenericElementIterator* it; 00096 00097 }; 00098 00099 } 00100 00101 #endif
Documentation automatically generated with Doxygen on 10 Sep 2004.