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 Optimizer; 00011 class PathPlanner; 00012 00016 typedef Optimizer* (*OptimizerNewFunc)(PathPlanner* planner); 00017 00021 typedef void (*OptimizerDeleteFunc)(Optimizer* optimizer); 00022 00023 template <class _New> 00024 Optimizer* OptimizerCreate(PathPlanner* planner) { 00025 return new _New(planner); 00026 } 00027 00028 template <class _Delete> 00029 void OptimizerDelete(Optimizer* optimizer) { 00030 delete optimizer; 00031 } 00032 00038 class Optimizer { 00039 public: 00044 Optimizer(PathPlanner* planner) : planner_(planner) {} 00045 00049 virtual ~Optimizer() {} 00050 00056 virtual std::vector<Configuration> optimize(const std::vector<Configuration> &path)=0; 00057 protected: 00058 PathPlanner *planner_; 00059 }; 00060 }; 00061 00062 #endif