aboutsummaryrefslogtreecommitdiff
path: root/chaos/src/ode_base.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'chaos/src/ode_base.hpp')
-rw-r--r--chaos/src/ode_base.hpp42
1 files changed, 19 insertions, 23 deletions
diff --git a/chaos/src/ode_base.hpp b/chaos/src/ode_base.hpp
index 5fdd6d1..6fa7e27 100644
--- a/chaos/src/ode_base.hpp
+++ b/chaos/src/ode_base.hpp
@@ -24,14 +24,15 @@
#include "chaos_base.hpp"
class ode_base
- : protected chaos_base
+ : public chaos_base
{
public:
void set_method(int i)
{
if (i >=0 && i <4)
m_method = (unsigned char) i;
- post("no such method");
+ else
+ post("no such method");
}
t_int get_method()
@@ -39,44 +40,39 @@ public:
return (int) m_method;
}
- void set_dt(t_float f)
- {
- if (f >= 0)
- m_dt = (data_t)f;
- else
- post("invalid value for dt: %f", f);
- }
-
- t_float get_dt()
+ CHAOS_SYSPAR_FUNCS_PRED(dt, m_pred_dt);
+
+ bool m_pred_dt(t_float f)
{
- return (t_float) m_dt;
+ return (f >= 0);
}
- void m_step();
+ virtual void m_step();
protected:
unsigned char m_method; /* 0: rk1, 1: rk2, 3: rk4 */
- data_t m_dt; /* step width */
data_t* m_k[3]; /* temporary arrays for runge kutta */
data_t* m_tmp;
- virtual void m_system (data_t* deriv, data_t* data);
+ virtual void m_system (data_t* deriv, data_t* data)
+ {
+ }
void rk1 ();
void rk2 ();
void rk4 ();
};
-#define ODE_CALLBACKS \
-CHAOS_CALLBACKS; \
-FLEXT_CALLVAR_I(m_system->get_method, m_system->set_method); \
-FLEXT_CALLVAR_F(m_system->get_dt, m_system->set_dt);
+#define ODE_CALLBACKS \
+CHAOS_CALLBACKS; \
+CHAOS_SYS_CALLBACKS_I(method); \
+CHAOS_SYS_CALLBACKS(dt);
-#define ODE_ATTRIBUTES \
-CHAOS_ATTRIBUTES; \
-FLEXT_ADDATTR_VAR("method", m_system->get_method, m_system->set_method); \
-FLEXT_ADDATTR_VAR("dt",m_system->get_dt, m_system->set_dt);
+#define ODE_ATTRIBUTES \
+CHAOS_ATTRIBUTES; \
+CHAOS_SYS_ATTRIBUTE(method); \
+CHAOS_SYS_ATTRIBUTE(dt);
#define __ode_base_hpp