/* See {nmsim_firing_func.h} */ /* Last edited on 2017-08-02 20:28:15 by jstolfi */ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include struct nmsim_firing_func_t *nmsim_firing_func_new ( char *class, double deg, double V_M, double D_M ) { nmsim_firing_func_t *Phi = NULL; if ((strcmp(class, "Gauss") == 0) || (strcmp(class, "gauss") == 0)) { demand(deg == 0, "invalid degree for Gauss Phi"); Phi = nmsim_firing_func_gauss_new(V_M, D_M); } else { demand(FALSE, "invalid class"); } return Phi; } void nmsim_firing_func_eval ( nmsim_firing_func_t *Phi, double V, double *prP, double *dprP ) { Phi->eval(V, Phi->deg, Phi->V_M, Phi->D_M, prP, dprP); } double nmsim_firing_func_eval_inv(struct nmsim_firing_func_t *Phi, double pr) { demand((pr >= 0) && (pr <= 1), "invalid probability"); return Phi->eval_inv(pr, Phi->deg, Phi->V_M, Phi->D_M); } nmsim_firing_func_t *nmsim_firing_func_new_gen ( nmsim_firing_func_eval_proc_t *eval, nmsim_firing_func_eval_inv_proc_t *eval_inv, double deg, double V_M, double D_M, char *descr ) { nmsim_firing_func_t *Phi = notnull(malloc(sizeof(nmsim_firing_func_t)), "no mem"); (*Phi) = (nmsim_firing_func_t){ .eval = eval, .eval_inv = eval_inv, .deg = deg, .V_M = V_M, .D_M = D_M, .descr = descr }; return Phi; }