Back to Top page.

EGTNode.h

Go to the documentation of this file.
00001 /****************************************************************************
00002 
00003 $Id: EGTNode.h,v 1.6 2002/11/25 14:31:40 motegi Exp $
00004 Copyright (C) 2002 Higuchi Lab. All rights reserved.
00005 
00006 *****************************************************************************/
00007 #ifndef INCLUDE__NODE_H__FILE
00008 #define INCLUDE__NODE_H__FILE
00009 
00010 #include "defs.h"
00011 #include "EGTAbstractNode.h"
00012 #include "EGTVector.h"
00013 #include <string>
00014 
00023 template<class T>
00024 class EGTNode : public EGTAbstractNode<T> {
00025 public:
00026   typedef EGTAbstractNode<T> Base;
00027   typedef EGTNode<T>         Self;
00028   typedef T                  Term;
00029   typedef EGTVector<T*>      Terms;
00030 
00031   EGTNode(UInt uFuncID, UInt uNumInTerms, UInt uNumOutTerms, UInt uNO);
00032   EGTNode(const Self&);
00033   virtual ~EGTNode();
00034 
00036   UInt GetFuncID() const   { return m_uFuncID; }
00038   void SetNodeID(UInt n)   { m_uNodeID = n;  }
00040   UInt GetNodeID() const   { return m_uNodeID; }
00042   void SetNO(UInt n)       { m_uNO = n;   }
00044   UInt GetNO() const       { return m_uNO;  }
00045 
00046   void SetOrigin(UInt n) { m_uOrigin = n; }
00047   UInt GetOrigin() { return m_uOrigin; }
00048 
00049   virtual bool IsCandidate() const {
00050     if (m_uNO == 0) {
00051       return true;
00052     }
00053     return false;
00054   }
00055 
00056   virtual void SaveExtraData(std::ostream& out) const { ; }
00057   virtual bool LoadExtraData(std::istream& in) { return true; }
00058 
00059   virtual void Display(std::ostream&) const;
00060   virtual const std::string GetName() const      { return ""; }
00061   virtual const std::string GetInLabel(UInt) const { return ""; }
00062   virtual const std::string GetOutLabel(UInt) const { return ""; }
00063 
00065   virtual Self* CreateNode() = 0;
00067   virtual Self* CreateNode(UInt uFuncID) = 0;
00069   virtual Self* CreateNodeDiff(Int iDiff) = 0;
00071   virtual Self* CreateInputNode(UInt n) = 0;
00073   virtual Self* CreateOutputNode(UInt n) = 0;
00074 
00075 private:
00077   UInt m_uFuncID;    
00079   UInt m_uNodeID;
00085   UInt m_uNO;
00087   Self& operator=(const Self&);
00088 
00089   UInt m_uOrigin; // see enum ORIGIN in "defs.h"
00090 };
00091 
00092 //============================================================================
00100 template<class T>
00101 EGTNode<T>:: EGTNode(UInt uFuncID, UInt uNumIn, UInt uNumOut, UInt uNO)
00102   : Base(uNumIn, uNumOut), m_uFuncID(uFuncID), m_uNodeID(0), m_uNO(uNO), 
00103   m_uOrigin(ORI_UNDEF)
00104 {
00105   for (UInt i=0; i<uNumIn; ++i) {
00106     m_tInTerms[i] = new Term;
00107     GetInTerm(i)->SetTermNum(i);
00108   }
00109   for (UInt i=0; i<uNumOut; ++i) {
00110     m_tOutTerms[i] = new Term;
00111     GetOutTerm(i)->SetTermNum(i);
00112   }
00113 }
00114 
00115 //============================================================================
00120 template<class T>
00121 EGTNode<T>::EGTNode(const Self& rhs)
00122   : Base(rhs), 
00123   m_uFuncID(rhs.m_uFuncID), m_uNodeID(rhs.m_uNodeID), m_uNO(rhs.m_uNO),
00124   m_uOrigin(ORI_UNDEF)
00125 {
00126   UInt uNumInTerms = GetNumInTerms();
00127   for (UInt i=0; i<uNumInTerms; ++i) {
00128     m_tInTerms[i] = new Term;
00129     GetInTerm(i)->SetTermNum(i);
00130     GetInTerm(i)->SetTerm(0);  //Sets to 0.
00131   }
00132   UInt uNumOutTerms = GetNumOutTerms();
00133   for (UInt i=0; i<uNumOutTerms; ++i) {
00134     m_tOutTerms[i] = new Term;
00135     GetOutTerm(i)->SetTermNum(i);
00136     GetOutTerm(i)->SetTerm(0);
00137   }
00138 }
00139 
00140 //============================================================================
00144 template<class T>
00145 EGTNode<T>::~EGTNode()
00146 {
00147   UInt uNumIn = GetNumInTerms();
00148   for (UInt i=0; i<uNumIn; ++i) {
00149     delete m_tInTerms[i];
00150   }
00151   UInt uNumOut = GetNumOutTerms();
00152   for (UInt i=0; i<uNumOut; ++i) {
00153     delete m_tOutTerms[i];
00154   }
00155 }
00156 
00157 //============================================================================
00162 template<class T>
00163 void EGTNode<T>::Display(std::ostream& out) const
00164 {
00165   if (m_uNodeID > 9) {
00166     out <<  m_uNodeID << ": ";
00167   }
00168   else {
00169     out << " " << m_uNodeID << ": ";
00170   }
00171   if (m_uFuncID > 9) {
00172     out << "FuncID:"  << m_uFuncID << ", ";
00173   }
00174   else {
00175     out << "FuncID: " << m_uFuncID << ", ";
00176   }
00177   out << "I/O: ("    << GetNumInTerms() << "," << GetNumOutTerms() << "), ";
00178   out << "NO:" << m_uNO << "  ";
00179 
00180   Base::Display(out);
00181 }
00182 
00183 #endif  //INCLUDE__NODE_H__FILE