16 #define SOT_FACTORY_TEMPLATE_ENTITY_PLUGIN_EULER(sotClassType, sotSigType,     \    17                                                  sotCoefType, className)       \    19   std::string sotClassType<sotSigType, sotCoefType>::getTypeName(void) {       \    23   const std::string sotClassType<sotSigType, sotCoefType>::CLASS_NAME =        \    26   const std::string &sotClassType<sotSigType, sotCoefType>::getClassName(void) \    31   Entity *regFunction##_##sotSigType##_##sotCoefType(                          \    32       const std::string &objname) {                                            \    33     return new sotClassType<sotSigType, sotCoefType>(objname);                 \    35   EntityRegisterer regObj##_##sotSigType##_##sotCoefType(                      \    36       sotClassType<sotSigType, sotCoefType>::CLASS_NAME,                       \    37       ®Function##_##sotSigType##_##sotCoefType);                            \    44                                          "IntegratorEulerDoubleDouble")
    46                                          "IntegratorEulerVectorMatrix")
    48                                          "IntegratorEulerVectorDouble")
    50 template class IntegratorEuler<
double, 
double>;
    51 template class IntegratorEuler<Vector, 
double>;
    52 template class IntegratorEuler<Vector, Matrix>;
 
integrates an ODE using a naive Euler integration. TODO: change the integration method. For the moment, the highest derivative of the output signal is computed using the previous values of the other derivatives and the input signal, then integrated n times, which will most certainly induce a huge drift for ODEs with a high order at the denominator. 
SOT_FACTORY_TEMPLATE_ENTITY_PLUGIN_EULER(IntegratorEuler, double, double, "IntegratorEulerDoubleDouble") SOT_FACTORY_TEMPLATE_ENTITY_PLUGIN_EULER(IntegratorEuler