00001 #ifndef PrimitiveSet_h
00002 #define PrimitiveSet_h
00003 #include <vector>
00004 #include "Primitive.h"
00005
00006
00007 namespace Tree
00008 {
00009
00013 class PrimitiveSet
00014 {
00015 friend class Tree;
00016 public:
00017 PrimitiveSet();
00018 virtual ~PrimitiveSet();
00019
00020 bool initialize(StateP state);
00021
00022 void addFunction(PrimitiveP functionPrimitive);
00023 bool addFunction(std::string name);
00024 void addTerminal(PrimitiveP terminalPrimitive);
00025
00026 PrimitiveP getRandomTerminal();
00027 PrimitiveP getRandomFunction();
00028 PrimitiveP getRandomPrimitive();
00029
00030 PrimitiveP getTerminalByName(std::string name);
00031 PrimitiveP getFunctionByName(std::string name);
00032 PrimitiveP getPrimitiveByName(std::string name);
00033
00034 uint getFunctionSetSize();
00035 uint getTerminalSetSize();
00036 uint getPrimitivesSize();
00037
00038 protected:
00039 StateP state_;
00040
00041 std::map <std::string, PrimitiveP> mPrimitives_;
00042 std::map <std::string, Primitives::terminal_type> mTypeNames_;
00043
00044 std::vector<PrimitiveP> terminalSet_;
00045 std::vector<PrimitiveP> functionSet_;
00046 std::vector<PrimitiveP> primitives_;
00047 };
00048 typedef boost::shared_ptr<PrimitiveSet> PrimitiveSetP;
00049
00050 typedef std::map <std::string, PrimitiveP>::iterator prim_iter;
00051 typedef std::map <std::string, Primitives::terminal_type>::iterator type_iter;
00052
00053 }
00054 #endif