Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

ElementIterator.h

Go to the documentation of this file.
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.