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

gtlistarray.hpp

Go to the documentation of this file.
00001 //************************************************************************************
00002 // Module       : gtlistarray.hpp
00003 // Date         : 4/19/05 (DLR)
00004 // Copyright    : 2005-2006 Copyright University Corporation for Atmospheric
00005 //                Research
00006 // Description  : Encapsulates the methods and data associated with
00007 //                a simple template linked list of linked lists. 
00008 // Derived From : none.
00009 // Modifications:
00010 //************************************************************************************
00011 #if !defined(GTLISTARRAY_HPP)
00012 #define GTLISTARRAY_HPP
00013 
00014 #include <iostream.h>
00015 #include <string>
00016 #include <stdlib.h>
00017 #include "gtypes.h"
00018 #include "gelemlist.hpp"
00019 #include "gfieldlist.hpp"
00020 #include "gneighbor.hpp"
00021 
00022 #if !defined(GFieldListArray)
00023 #  define GFieldListArray GTListArray<GFieldList>
00024 #endif
00025 
00026 #if !defined(GElemListArray)
00027 #  define GElemListArray GTListArray<GElemList>
00028 #endif
00029 
00030 #if !defined(LISTARRAYELEM_T)
00031 #define LISTARRAYELEM_T
00032 #define TListArrayElem ListArrayElemT<TT>
00033 template<class TT> class ListArrayElemT {
00034 public:
00035 GINT           id;
00036 GBOOL          cf;
00037 TT             *member;
00038 TListArrayElem *next;
00039 TListArrayElem *prev;
00040 };
00041 #endif
00042 
00043 template <class TT> class GTListArray
00044 {
00045 
00046 public:
00047                           GTListArray(GBOOL renumber_on_delete=FALSE);
00048                           GTListArray(GINT  nelems, GBOOL renumber_on_delete=FALSE);
00049                           GTListArray(const GTListArray &);
00050                          ~GTListArray();
00051 
00052          friend ostream&  operator<<(ostream&, GTListArray<TT>&);
00053          void             add();
00054          void             add(TT *c, GBOOL delete_here=FALSE);
00055          TT               *del(TListArrayElem *e);
00056          TT               *del(TT *c);
00057          TT               *del(GINT  id);
00058          void             start(TListArrayElem *p=NULL);
00059          GINT             size() ;
00060          TT               *member();
00061          TT               *member(GINT  id);
00062          TListArrayElem   *next();
00063          TListArrayElem   *curr();
00064 inline   TListArrayElem   *find(GINT  id){ TListArrayElem *p=pCurr;
00065          if ( p && p->id == id ) return p;
00066          else if ( p && p->next && p->next->id == id ) {
00067          next(); return p->next; }
00068 
00069          start(NULL);
00070          while ( (p=curr()) != NULL ) {
00071          if ( p->id == id ) return p; next(); }
00072           return NULL; }
00073 inline   TListArrayElem  *find(TT *c) { TListArrayElem *p=pCurr;
00074          if ( p && p->member == c ) return p;
00075          else if ( p && p->next && p->next->member == c ) {
00076          next(); return p->next; }
00077   
00078          start(NULL);
00079          while ( (p=curr()) != NULL ) {
00080          if ( p->member == c ) return p; next(); }
00081          return NULL; }
00082          TT               &operator()(const GINT iElem);
00083          TT               &operator[](const GINT iElem);
00084          GBOOL            renumber();
00085          void             empty();
00086 //       GBOOL            inlist(GSHORT  iproc, GINT  ielem);
00087 
00088 
00089 private:
00090 // Private methods:
00091 
00092 
00093 
00094 // Private data:
00095         GINT              nid;
00096         GINT              num;
00097         GBOOL             doRenumber;
00098         TListArrayElem    *pStart;
00099         TListArrayElem    *pCurr;
00100         TListArrayElem    *pEnd;
00101 
00102 };
00103 #  if defined(_LINUX) || defined(_AIX)
00104 template class GTListArray<GFieldList>;
00105 ostream &operator <<(ostream&, GTListArray<GFieldList>&);
00106 template class GTListArray<GElemList>;
00107 ostream &operator <<(ostream&, GTListArray<GElemList>&);
00108 template class GTListArray<GNeighbor>;
00109 ostream &operator <<(ostream&, GTListArray<GNeighbor>&);
00110 # endif
00111 #endif
00112 

Generated on Wed Dec 21 16:00:48 2005 for Geophysics & Astrophysics Spectral Element Adaptive Refinement (GASpAR) 2D Code by  doxygen 1.4.4