Back to Top page.

EGTAbstractNode.h

Go to the documentation of this file.
00001 /***************************************************************************
00002 
00003 $Id: EGTAbstractNode.h,v 1.2 2002/11/08 03:47:38 motegi Exp $
00004 Copyright (C) 2002 Higuchi Lab. All rights reserved.
00005 
00006 *****************************************************************************/
00007 #ifndef INCLUDE__ABSTRACTNODE_H__FILE
00008 #define INCLUDE__ABSTRACTNODE_H__FILE
00009 
00010 #include "defs.h"
00011 #include "EGException.h"
00012 #include "EGTVector.h"
00013 
00019 template<class T>
00020 class EGTAbstractNode {
00021 public:
00022   typedef T Term;
00023   typedef EGTVector<T*> Terms;
00024   typedef EGTAbstractNode<T> Self;
00025 
00027   EGTAbstractNode(UInt uNumIn, UInt uNumOut)
00028     : m_tInTerms(uNumIn), m_tOutTerms(uNumOut) { }
00030   EGTAbstractNode(const Self& rhs)
00031     : m_tInTerms(rhs.m_tInTerms), m_tOutTerms(rhs.m_tOutTerms) { }
00033   virtual ~EGTAbstractNode() { }
00034 
00036   UInt GetNumInTerms() const  { return m_tInTerms.Size();  }
00037 
00039   UInt GetNumOutTerms() const { return m_tOutTerms.Size(); }
00040 
00042   Term* GetInTerm(UInt uTermNum) {
00043     CheckNumInTerms(uTermNum, __FILE__, __LINE__);
00044     return m_tInTerms[uTermNum];
00045   }
00047   Term* GetOutTerm(UInt uTermNum) {
00048     CheckNumOutTerms(uTermNum, __FILE__, __LINE__);
00049     return m_tOutTerms[uTermNum];
00050   }
00052   const Term* GetInTerm(UInt uTermNum) const {
00053     CheckNumInTerms(uTermNum, __FILE__, __LINE__);
00054     return m_tInTerms[uTermNum];
00055   }
00057   const Term* GetOutTerm(UInt uTermNum) const {
00058     CheckNumOutTerms(uTermNum, __FILE__, __LINE__);
00059     return m_tOutTerms[uTermNum];
00060   }
00061   void ConnectSrc(UInt uTermNum, Term* src);
00062   void ConnectDest(UInt uTermNum, Term* dest);
00063   virtual void Display(std::ostream& out) const;
00064 
00065 protected:
00067   Terms m_tInTerms;
00069   Terms m_tOutTerms;
00070 
00071   void CheckNumInTerms(UInt uNum, char* filename, UInt uLine) const;
00072   void CheckNumOutTerms(UInt uNum, char* filename, UInt uLine) const;
00073 };
00074 
00075 //===========================================================================
00081 template<class T>
00082 void EGTAbstractNode<T>::ConnectSrc(UInt uTermNum, Term* src)
00083 {
00084   CheckNumInTerms(uTermNum, __FILE__, __LINE__);
00085   Term* pt = GetInTerm(uTermNum);
00086   pt->SetTerm(src);
00087   src->SetTerm(pt);
00088 }
00089 
00090 //============================================================================
00096 template<class T>
00097 void EGTAbstractNode<T>::ConnectDest(UInt uTermNum, Term* dest)
00098 {
00099   CheckNumOutTerms(uTermNum, __FILE__, __LINE__);
00100   Term* pt = GetOutTerm(uTermNum);
00101   pt->SetTerm(dest);
00102   dest->SetTerm(pt);
00103 }
00104 
00105 //============================================================================
00110 template<class T>
00111 void EGTAbstractNode<T>::Display(std::ostream& out) const {
00112   //Outputs the data of input Terminals.
00113   if (GetNumInTerms()) {
00114     out << "Src[";
00115     if (GetInTerm(0)->GetTerm()) {
00116       out << GetInTerm(0)->GetDestNodeID();
00117       out << "(" << GetInTerm(0)->GetDestTermNum() << ")";
00118     }
00119     else {
00120       out << "***";
00121     }
00122     for (UInt i=1; i<GetNumInTerms(); ++i) {
00123       if (GetInTerm(i)->GetTerm()) {
00124         out << ", ";
00125         out << GetInTerm(i)->GetDestNodeID();
00126         out << "(" << GetInTerm(i)->GetDestTermNum() << ")";
00127       }
00128       else {
00129         out << ", ***";
00130       }
00131     }
00132     out << "]";
00133   }
00134   if (GetNumInTerms() && GetNumOutTerms()) {
00135     out << ", ";
00136   }
00137   //Outputs the data of output Terminals.
00138   if (GetNumOutTerms()) {
00139     out << "Dest[";
00140     if (GetOutTerm(0)->GetTerm()) {
00141       out << GetOutTerm(0)->GetDestNodeID();
00142       out << "(" << GetOutTerm(0)->GetDestTermNum() << ")";
00143     }
00144     else {
00145       out << "***";
00146     }
00147     for (UInt i=1; i<GetNumOutTerms(); ++i) {
00148       if (GetOutTerm(i)->GetTerm()) {
00149         out << ", ";
00150         out << GetOutTerm(i)->GetDestNodeID();
00151         out << "(" << GetOutTerm(i)->GetDestTermNum() << ")";
00152       }
00153       else {
00154         out << ", ***";
00155       }
00156     }
00157     out << "]";
00158   }
00159   out << std::endl;
00160 }
00161 
00162 //============================================================================
00170 template<class T>
00171 void EGTAbstractNode<T>::CheckNumInTerms(UInt uNum,
00172                                          char* filename, UInt uLine) const
00173 {
00174 #ifdef DEBUG
00175   if (uNum >= GetNumInTerms()) {
00176     throw EGException("EGAbstractNode, "
00177                       "The input Terminal with the specified ID number "
00178                       "does not exist.",
00179                        filename, uLine);
00180   }
00181 #endif
00182 }
00183 
00184 //============================================================================
00192 template<class T>
00193 void EGTAbstractNode<T>::CheckNumOutTerms(UInt uNum,
00194                                           char* filename, UInt uLine) const 
00195 {
00196 #ifdef DEBUG
00197   if (uNum >= GetNumOutTerms()) {
00198     throw EGException("EGAbstractNode, "
00199                       "The output Terminal with the specified ID number "
00200                       "does not exist.",
00201                       filename, uLine);
00202   }
00203 #endif
00204 }
00205 
00206 #endif //INCLUDE__ABSTRACTNODE_H__FILE