00001 00009 #ifndef _SMP_SYSTEM_SINGLE_INTEGRATOR_H_ 00010 #define _SMP_SYSTEM_SINGLE_INTEGRATOR_H_ 00011 00012 #include <smp/components/extenders/state_array_double.h> 00013 #include <smp/components/extenders/input_array_double.h> 00014 #include <smp/components/extenders/base.h> 00015 00016 00017 namespace smp { 00018 00019 00021 00029 template <int NUM_DIMENSIONS> 00030 class state_single_integrator : public state_array_double<NUM_DIMENSIONS> { 00031 00032 }; 00033 00034 00035 00037 00045 class input_single_integrator : public input_array_double<1> { 00046 00047 }; 00048 00049 00050 00052 00060 template< class typeparams, int NUM_DIMENSIONS > 00061 class extender_single_integrator : public extender_base< typeparams > { 00062 00063 00064 00065 typedef typename typeparams::state state_t; 00066 typedef typename typeparams::input input_t; 00067 typedef typename typeparams::vertex_data vertex_data_t; 00068 typedef typename typeparams::edge_data edge_data_t; 00069 00070 typedef vertex<typeparams> vertex_t; 00071 typedef edge<typeparams> edge_t; 00072 00073 typedef trajectory< typeparams > trajectory_t; 00074 00075 double max_length; 00076 00077 00078 public: 00079 00080 extender_single_integrator (); 00081 ~extender_single_integrator (); 00082 00083 00084 int ex_update_insert_vertex (vertex_t *vertex_in); 00085 00086 00087 int ex_update_insert_edge (edge_t *edge_in); 00088 00089 00090 int ex_update_delete_vertex (vertex_t *vertex_in); 00091 00092 00093 int ex_update_delete_edge (edge_t *edge_in); 00094 00095 00096 int extend (state_t *state_from_in, state_t *state_towards_in, 00097 int *exact_connection_out, trajectory_t *trajectory_out, 00098 list<state_t*> *intermediate_vertices_out); 00099 00112 int set_max_length (double max_length_in); 00113 00114 00115 }; 00116 00117 00118 } 00119 00120 #endif