• Main Page
  • Modules
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/ECF/tree/PrimitiveSet.cpp

00001 #include "../ECF_base.h"
00002 #include "Tree.h"
00003 
00004 
00005 namespace Tree
00006 {
00007 
00008 PrimitiveSet::PrimitiveSet()
00009 {   }
00010 
00011 
00012 PrimitiveSet::~PrimitiveSet()
00013 {   }
00014 
00015 
00016 bool PrimitiveSet::initialize(StateP state)
00017 {
00018     state_ = state;
00019 
00020     // register existing primitives
00021     PrimitiveP prim = (PrimitiveP) (new Primitives::Add);
00022     mAllPrimitives_[prim->getName()] = prim;
00023     prim = (PrimitiveP) (new Primitives::Sub);
00024     mAllPrimitives_[prim->getName()] = prim;
00025     prim = (PrimitiveP) (new Primitives::Mul);
00026     mAllPrimitives_[prim->getName()] = prim;
00027     prim = (PrimitiveP) (new Primitives::Div);
00028     mAllPrimitives_[prim->getName()] = prim;
00029     prim = (PrimitiveP) (new Primitives::Sin);
00030     mAllPrimitives_[prim->getName()] = prim;
00031     prim = (PrimitiveP) (new Primitives::Cos);
00032     mAllPrimitives_[prim->getName()] = prim;
00033     prim = (PrimitiveP) (new Primitives::Pos);
00034     mAllPrimitives_[prim->getName()] = prim;
00035     prim = (PrimitiveP) (new Primitives::Neg);
00036     mAllPrimitives_[prim->getName()] = prim;
00037     prim = (PrimitiveP) (new Primitives::Max);
00038     mAllPrimitives_[prim->getName()] = prim;
00039     prim = (PrimitiveP) (new Primitives::Min);
00040     mAllPrimitives_[prim->getName()] = prim;
00041 
00042     prim_iter primIter;
00043     for(primIter = mAllPrimitives_.begin(); primIter != mAllPrimitives_.end(); primIter++)
00044         primIter->second->initialize(state);
00045     
00046     // register terminal types
00047     mTypeNames_.insert(std::pair<std::string, Primitives::terminal_type>("DOUBLE", Primitives::Double));
00048     mTypeNames_.insert(std::pair<std::string, Primitives::terminal_type>("INT", Primitives::Int));
00049     mTypeNames_.insert(std::pair<std::string, Primitives::terminal_type>("BOOL", Primitives::Bool));
00050     mTypeNames_.insert(std::pair<std::string, Primitives::terminal_type>("CHAR", Primitives::Char));
00051     mTypeNames_.insert(std::pair<std::string, Primitives::terminal_type>("STRING", Primitives::String));
00052 
00053     return true;
00054 }
00055 
00056 
00057 PrimitiveP PrimitiveSet::getRandomFunction()
00058 {
00059     return functionSet_[state_->getRandomizer()->getRandomInteger((int) functionSet_.size())];
00060 }
00061 
00062 
00063 PrimitiveP PrimitiveSet::getRandomTerminal()
00064 {
00065     return terminalSet_[state_->getRandomizer()->getRandomInteger((int) terminalSet_.size())];
00066 }
00067 
00068 
00069 PrimitiveP PrimitiveSet::getRandomPrimitive()
00070 {
00071     return primitives_[state_->getRandomizer()->getRandomInteger((int) primitives_.size())];
00072 }
00073 
00074 
00075 PrimitiveP PrimitiveSet::getFunctionByName(std::string name)
00076 {
00077     prim_iter iter = mTerminalSet_.find(name);
00078     if(iter == mTerminalSet_.end())
00079         return PrimitiveP();
00080 
00081     return iter->second;
00082 }
00083 
00084 
00085 PrimitiveP PrimitiveSet::getTerminalByName(std::string name)
00086 {
00087     prim_iter iter = mTerminalSet_.find(name);
00088     if(iter == mTerminalSet_.end())
00089         return PrimitiveP();
00090 
00091     return iter->second;
00092 }
00093 
00094 
00095 PrimitiveP PrimitiveSet::getPrimitiveByName(std::string name)
00096 {
00097     prim_iter iter = mPrimitiveSet_.find(name);
00098     if(iter == mPrimitiveSet_.end())
00099         return PrimitiveP();
00100 
00101     return iter->second;
00102 }
00103 
00104 
00105 //void PrimitiveSet::addFunction(PrimitiveP functionPrimitive)
00106 //{
00107 //  if(functionPrimitive->getNumberOfArguments() == 0) {
00108 //      terminalSet_.push_back(functionPrimitive);
00109 //      mTerminalSet_[functionPrimitive->getName()] = functionPrimitive;
00110 //  }
00111 //  else {
00112 //      functionSet_.push_back(functionPrimitive);
00113 //      mFunctionSet_[functionPrimitive->getName()] = functionPrimitive;
00114 //  }
00115 //
00116 //  primitives_.push_back(functionPrimitive);
00117 //  mPrimitives_[functionPrimitive->getName()] = functionPrimitive;
00118 //}
00119 
00120 
00125 bool PrimitiveSet::addFunction(std::string name)
00126 {
00127     prim_iter iter = mAllPrimitives_.find(name);
00128     if(iter == mAllPrimitives_.end())
00129         return false;
00130 
00131     if(iter->second->getNumberOfArguments() == 0) {
00132         terminalSet_.push_back(iter->second);
00133         mTerminalSet_[iter->first] = iter->second;
00134     }
00135     else {
00136         functionSet_.push_back(iter->second);
00137         mFunctionSet_[iter->first] = iter->second;
00138     }
00139 
00140     primitives_.push_back(iter->second);
00141     mPrimitiveSet_[iter->first] = iter->second;
00142 
00143     return true;
00144 }
00145 
00146 
00150 void PrimitiveSet::addTerminal(PrimitiveP terminalPrimitive)
00151 {
00152     terminalSet_.push_back(terminalPrimitive);
00153     mTerminalSet_[terminalPrimitive->getName()] = terminalPrimitive;
00154 
00155     primitives_.push_back(terminalPrimitive);
00156     mPrimitiveSet_[terminalPrimitive->getName()] = terminalPrimitive;
00157 }
00158 
00159 
00160 uint PrimitiveSet::getFunctionSetSize()
00161 {
00162     return (uint) functionSet_.size();
00163 }
00164 
00165 
00166 uint PrimitiveSet::getTerminalSetSize()
00167 {
00168     return (uint) terminalSet_.size();
00169 }
00170 
00171 
00172 uint PrimitiveSet::getPrimitivesSize()
00173 {
00174     return (uint) primitives_.size();
00175 }
00176 
00177 }

Generated on Thu Oct 6 2011 13:41:01 for ECF by  doxygen 1.7.1