• Main Page
  • Classes
  • Files
  • File List

D:/Radagast_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     mPrimitives_[prim->getName()] = prim;
00023     prim = (PrimitiveP) (new Primitives::Sub);
00024     mPrimitives_[prim->getName()] = prim;
00025     prim = (PrimitiveP) (new Primitives::Mul);
00026     mPrimitives_[prim->getName()] = prim;
00027     prim = (PrimitiveP) (new Primitives::Div);
00028     mPrimitives_[prim->getName()] = prim;
00029     prim = (PrimitiveP) (new Primitives::Sin);
00030     mPrimitives_[prim->getName()] = prim;
00031     prim = (PrimitiveP) (new Primitives::Cos);
00032     mPrimitives_[prim->getName()] = prim;
00033     prim = (PrimitiveP) (new Primitives::Pos);
00034     mPrimitives_[prim->getName()] = prim;
00035     prim = (PrimitiveP) (new Primitives::Neg);
00036     mPrimitives_[prim->getName()] = prim;
00037     prim = (PrimitiveP) (new Primitives::Max);
00038     mPrimitives_[prim->getName()] = prim;
00039     prim = (PrimitiveP) (new Primitives::Min);
00040     mPrimitives_[prim->getName()] = prim;
00041 
00042     prim_iter primIter;
00043     for(primIter = mPrimitives_.begin(); primIter != mPrimitives_.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     int rez = state_->getRandomizer()->getRandomInteger((int) functionSet_.size());
00060     return functionSet_[rez];
00061 }
00062 
00063 
00064 PrimitiveP PrimitiveSet::getRandomTerminal()
00065 {
00066     return terminalSet_[state_->getRandomizer()->getRandomInteger((int) terminalSet_.size())];
00067 }
00068 
00069 
00070 PrimitiveP PrimitiveSet::getRandomPrimitive()
00071 {
00072     return primitives_[state_->getRandomizer()->getRandomInteger((int) primitives_.size())];
00073 }
00074 
00075 
00076 PrimitiveP PrimitiveSet::getFunctionByName(std::string name)
00077 {
00078     uint s = (uint) functionSet_.size();
00079     for(uint i = 0; i < s; i++)
00080         if(functionSet_[i]->getName() == name)
00081             return functionSet_[i];
00082     
00083     return PrimitiveP();
00084 }
00085 
00086 
00087 PrimitiveP PrimitiveSet::getTerminalByName(std::string name)
00088 {
00089     uint s = (uint) terminalSet_.size();
00090     for(uint i = 0; i < s; i++)
00091         if(terminalSet_[i]->getName() == name)
00092             return terminalSet_[i];
00093     
00094     return PrimitiveP();
00095 }
00096 
00097 
00098 PrimitiveP PrimitiveSet::getPrimitiveByName(std::string name)
00099 {
00100     uint s = (uint) primitives_.size();
00101     for(uint i = 0; i < s; i++)
00102         if(primitives_[i]->getName() == name)
00103             return primitives_[i];
00104 
00105     return PrimitiveP();
00106 }
00107 
00108 
00113 void PrimitiveSet::addFunction(PrimitiveP functionPrimitive)
00114 {
00115     if(functionPrimitive->getNumberOfArguments() == 0)
00116         terminalSet_.push_back(functionPrimitive);
00117     else
00118         functionSet_.push_back(functionPrimitive);
00119     primitives_.push_back(functionPrimitive);
00120 }
00121 
00122 
00127 bool PrimitiveSet::addFunction(std::string name)
00128 {
00129     prim_iter iter = mPrimitives_.find(name);
00130     if(iter == mPrimitives_.end())
00131         return false;
00132 
00133     if(iter->second->getNumberOfArguments() == 0)
00134         terminalSet_.push_back(iter->second);
00135     else
00136         functionSet_.push_back(iter->second);
00137     primitives_.push_back(iter->second);
00138 
00139     return true;
00140 }
00141 
00142 
00146 void PrimitiveSet::addTerminal(PrimitiveP terminalPrimitive)
00147 {
00148     terminalSet_.push_back(terminalPrimitive);
00149     primitives_.push_back(terminalPrimitive);
00150 }
00151 
00152 
00153 uint PrimitiveSet::getFunctionSetSize()
00154 {
00155     return (uint) functionSet_.size();
00156 }
00157 
00158 
00159 uint PrimitiveSet::getTerminalSetSize()
00160 {
00161     return (uint) terminalSet_.size();
00162 }
00163 
00164 
00165 uint PrimitiveSet::getPrimitivesSize()
00166 {
00167     return (uint) primitives_.size();
00168 }
00169 
00170 }

Generated on Wed Sep 1 2010 14:31:21 for ECF by  doxygen 1.7.1