00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #if !defined(GTTLIST_HPP)
00016 #define GTTLIST_HPP
00017
00018 #include "gtypes.h"
00019 #include <iostream.h>
00020 #include <stdlib.h>
00021 #include "gtbuffer.hpp"
00022 #include "gtvector.hpp"
00023
00024
00025 #if !defined(FBuffList)
00026 # define FBuffList GTTList<GDOUBLE,GBuffer>
00027 #endif
00028
00029 #if !defined(IBuffList)
00030 # define IBuffList GTTList<GINT ,GBuffer>
00031 #endif
00032
00033 #if !defined(BTBuffList)
00034 # define BTBuffList GTTList<BDYTYPE,GBuffer>
00035 #endif
00036
00037 #if !defined(GVecList)
00038 # define GVecList GTTList<GDOUBLE,GTVector>
00039 #endif
00040
00041
00042 #if !defined(TTLINKELEM)
00043 #define TTLINKELEM
00044 #define TTLinkElem LinkElemTT<TL,TT>
00045 template<class TL, template<class> class TT> class LinkElemTT {
00046 public:
00047 GINT id;
00048 GBOOL cf;
00049 TT<TL> *member;
00050 TTLinkElem *next;
00051 TTLinkElem *prev;
00052 };
00053 #endif
00054
00055 template<class TL, template<class> class TT> class GTTList
00056 {
00057 public:
00058 GTTList(GBOOL renumber_on_delete=FALSE);
00059 GTTList(GINT nelems, GBOOL renumber_on_delete=FALSE);
00060 GTTList(const GTTList &){};
00061 ~GTTList();
00062
00063 void operator=(TL a);
00064 void operator=(GTTList<TL,TT> &v);
00065 void add();
00066 void add(TT<TL> *c, GBOOL delete_here);
00067 void add(TL *c, GINT n, GBOOL delete_here);
00068 TT<TL> *del(TTLinkElem *e);
00069 TT<TL> *del(TT<TL> *c);
00070 TT<TL> *del(GINT id);
00071 void start(TTLinkElem *p=NULL);
00072 GINT size() ;
00073 TT<TL> *member();
00074 TT<TL> *member(GINT id);
00075 TTLinkElem *next();
00076 TTLinkElem *curr();
00077 TTLinkElem *find(GINT id);
00078 TTLinkElem *find(TT<TL> *);
00079 TL &operator()(const GINT iElem, const GINT i);
00080 TT<TL> *&operator()(const GINT iElem);
00081 TT<TL> *&operator[](const GINT iElem);
00082 GINT dim(const GINT iElem);
00083 GBOOL renumber();
00084 void empty();
00085 friend ostream& operator<<(ostream&, GTTList<GDOUBLE,GBuffer>&);
00086 friend ostream& operator<<(ostream&, GTTList<GINT ,GBuffer>&);
00087 friend ostream& operator<<(ostream&, GTTList<BDYTYPE,GBuffer>&);
00088 friend ostream& operator<<(ostream&, GTTList<GDOUBLE ,GTVector>&);
00089 #if 0
00090 friend ostream& operator<<(ostream&, GTTList<TL,TT>&);
00091 #endif
00092
00093 private:
00094
00095
00096
00097 GINT nid;
00098 GINT num;
00099 GBOOL doRenumber;
00100 TTLinkElem *pStart;
00101 TTLinkElem *pCurr;
00102 TTLinkElem *pEnd;
00103
00104 };
00105 # if defined(_LINUX) || defined(_AIX)
00106 template class GTTList<GDOUBLE,GBuffer>;
00107 template class GTTList<GINT ,GBuffer>;
00108 template class GTTList<BDYTYPE,GBuffer>;
00109 template class GTTList<GDOUBLE,GTVector>;
00110 ostream &operator <<(ostream&, GTTList<GDOUBLE,GBuffer>&);
00111 ostream &operator <<(ostream&, GTTList<GINT ,GBuffer>&);
00112 ostream &operator <<(ostream&, GTTList<BDYTYPE,GBuffer>&);
00113 ostream &operator <<(ostream&, GTTList<GDOUBLE,GTVector>&);
00114 # endif
00115 # if 0
00116 GTTList<GDOUBLE,GBuffer> __dec_SEFBList;
00117 GTTList<GINT ,GBuffer> __dec_SEIList;
00118 GTTList<BDYTYPE,GBuffer> __dec_SEBTList;
00119 GTTList<GDOUBLE,GTVector> __dec_GVecList;
00120 ostream &operator <<(ostream&, GTTList<GDOUBLE,GBuffer>&);
00121 ostream &operator <<(ostream&, GTTList<GINT ,GBuffer>&);
00122 ostream &operator <<(ostream&, GTTList<BDYTYPE,GBuffer>&);
00123 ostream &operator <<(ostream&, GTTList<GDOUBLE,GTVector>&);
00124 # endif
00125 #endif
00126