00001 // -*- C++ -*- 00002 00003 #ifndef __OPTIMIZER_H 00004 #define __OPTIMIZER_H 00005 00006 #include <vector> 00007 #include "Configuration.h" 00008 00009 namespace PathEngine { 00010 class PathPlanner; 00011 00017 class Optimizer { 00018 public: 00023 Optimizer(PathPlanner* planner) : planner_(planner) {} 00024 00028 virtual ~Optimizer() {} 00029 00035 virtual std::vector<Configuration> optimize(const std::vector<Configuration> &path)=0; 00036 protected: 00037 PathPlanner *planner_; 00038 }; 00039 00043 typedef Optimizer* (*OptimizerNewFunc)(PathPlanner* planner); 00044 00048 typedef void (*OptimizerDeleteFunc)(Optimizer* optimizer); 00049 00050 template <class _New> 00051 Optimizer* OptimizerCreate(PathPlanner* planner) { 00052 return new _New(planner); 00053 } 00054 00055 template <class _Delete> 00056 void OptimizerDelete(Optimizer* optimizer) { 00057 delete optimizer; 00058 } 00059 }; 00060 00061 #endif