• 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 
00058 PrimitiveP PrimitiveSet::getRandomFunction()
00059 {
00060     return functionSet_[state_->getRandomizer()->getRandomInteger((int) functionSet_.size())];
00061 }
00062 
00063 
00065 PrimitiveP PrimitiveSet::getRandomTerminal()
00066 {
00067     return terminalSet_[state_->getRandomizer()->getRandomInteger((int) terminalSet_.size())];
00068 }
00069 
00070 
00072 PrimitiveP PrimitiveSet::getRandomPrimitive()
00073 {
00074     return primitives_[state_->getRandomizer()->getRandomInteger((int) primitives_.size())];
00075 }
00076 
00077 
00079 PrimitiveP PrimitiveSet::getFunctionByName(std::string name)
00080 {
00081     prim_iter iter = mFunctionSet_.find(name);
00082     if(iter == mFunctionSet_.end())
00083         return PrimitiveP();
00084 
00085     return iter->second;
00086 }
00087 
00088 
00090 PrimitiveP PrimitiveSet::getTerminalByName(std::string name)
00091 {
00092     prim_iter iter = mTerminalSet_.find(name);
00093     if(iter == mTerminalSet_.end())
00094         return PrimitiveP();
00095 
00096     return iter->second;
00097 }
00098 
00099 
00101 PrimitiveP PrimitiveSet::getPrimitiveByName(std::string name)
00102 {
00103     prim_iter iter = mPrimitiveSet_.find(name);
00104     if(iter == mPrimitiveSet_.end())
00105         return PrimitiveP();
00106 
00107     return iter->second;
00108 }
00109 
00110 
00111 //void PrimitiveSet::addFunction(PrimitiveP functionPrimitive)
00112 //{
00113 //  if(functionPrimitive->getNumberOfArguments() == 0) {
00114 //      terminalSet_.push_back(functionPrimitive);
00115 //      mTerminalSet_[functionPrimitive->getName()] = functionPrimitive;
00116 //  }
00117 //  else {
00118 //      functionSet_.push_back(functionPrimitive);
00119 //      mFunctionSet_[functionPrimitive->getName()] = functionPrimitive;
00120 //  }
00121 //
00122 //  primitives_.push_back(functionPrimitive);
00123 //  mPrimitives_[functionPrimitive->getName()] = functionPrimitive;
00124 //}
00125 
00126 
00131 bool PrimitiveSet::addFunction(std::string name)
00132 {
00133     prim_iter iter = mAllPrimitives_.find(name);
00134     if(iter == mAllPrimitives_.end())
00135         return false;
00136 
00137     if(iter->second->getNumberOfArguments() == 0) {
00138         terminalSet_.push_back(iter->second);
00139         mTerminalSet_[iter->first] = iter->second;
00140     }
00141     else {
00142         functionSet_.push_back(iter->second);
00143         mFunctionSet_[iter->first] = iter->second;
00144     }
00145 
00146     primitives_.push_back(iter->second);
00147     mPrimitiveSet_[iter->first] = iter->second;
00148 
00149     return true;
00150 }
00151 
00152 
00156 void PrimitiveSet::addTerminal(PrimitiveP terminalPrimitive)
00157 {
00158     terminalSet_.push_back(terminalPrimitive);
00159     mTerminalSet_[terminalPrimitive->getName()] = terminalPrimitive;
00160 
00161     primitives_.push_back(terminalPrimitive);
00162     mPrimitiveSet_[terminalPrimitive->getName()] = terminalPrimitive;
00163 }
00164 
00165 
00167 uint PrimitiveSet::getFunctionSetSize()
00168 {
00169     return (uint) functionSet_.size();
00170 }
00171 
00172 
00174 uint PrimitiveSet::getTerminalSetSize()
00175 {
00176     return (uint) terminalSet_.size();
00177 }
00178 
00179 
00181 uint PrimitiveSet::getPrimitivesSize()
00182 {
00183     return (uint) primitives_.size();
00184 }
00185 
00186 }

Generated on Tue Nov 4 2014 13:04:31 for ECF by  doxygen 1.7.1