This is an automated email from the git hooks/post-receive script. hmmr-guest pushed a commit to branch WIP in repository cnrun.
commit 5699a22a5268dd570e9a490f71c8c8bdcdc8c0b0 Author: andrei zavada <[email protected]> Date: Tue Jul 8 15:44:47 2014 +0300 WIP --- upstream/configure.ac | 2 +- upstream/src/cnrun/main.cc | 516 +++++++++++++++++++++++----------------- upstream/src/cnrun/runner.hh | 207 +++++++--------- upstream/src/libcn/base-unit.cc | 10 - upstream/src/libcn/model.hh | 77 ++++-- 5 files changed, 455 insertions(+), 357 deletions(-) diff --git a/upstream/configure.ac b/upstream/configure.ac index ccdd2f3..b5b3dfc 100644 --- a/upstream/configure.ac +++ b/upstream/configure.ac @@ -1,7 +1,7 @@ AC_COPYRIGHT([Copyright (c) 2008-14 Andrei Zavada <[email protected]>]) AC_INIT([cnrun], [1.1.15_rc], [[email protected]]) -AC_CONFIG_SRCDIR([src/cnrun/runner-main.cc]) +AC_CONFIG_SRCDIR([src/cnrun/main.cc]) AC_CONFIG_MACRO_DIR([m4]) AC_PREREQ(2.61) diff --git a/upstream/src/cnrun/main.cc b/upstream/src/cnrun/main.cc index 1d2dd2c..5047c4e 100644 --- a/upstream/src/cnrun/main.cc +++ b/upstream/src/cnrun/main.cc @@ -1,17 +1,21 @@ /* - * Author: Andrei Zavada <[email protected]> + * File name: cnrun/main.cc + * Project: cnrun + * Author: Andrei Zavada <[email protected]> + * Initial version: 2008-09-02 * - * License: GPL-2+ + * Purpose: function main * - * Initial version: 2008-09-02 - * - * CNModel runner (main, cmdline parser) + * License: GPL */ -#include <cstdarg> #include <unistd.h> +#include <stdlib.h> +#include <argp.h> +#include <cstdarg> #include <list> +#include <string> #include "libstilton/exprparser.hh" #include "runner.hh" @@ -25,234 +29,320 @@ using namespace std; using namespace cnrun; + +// argparse + +const char + *argp_program_version = PACKAGE_STRING; + *argp_program_bug_address = PACKAGE_BUGREPORT; + +static char doc[] = + PACKAGE " -- a neuronal network model runner"; + +namespace opt { +enum TOptChar { + list_units = 'U', + dump_model_units = 'u', + dir = 'C', + listen_dt = 'E', + log_spiking = 'k', + log_spiking_threshold = 0, + log_option = 'L', + precision = 'e', + dt_max = 'M', + dt_min = 'm', + dt_xcap = 0, + sort_units = 0, + verbosely = 'v', + help = 'h', +}; +} // namespace opt, strictly to enclose enum TOptChar + +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#pragma GCC diagnostic push +static struct argp_option options[] = { + {"list-units", opt::list_units, NULL, 0, + "List all available units and exit." }, + + {"chdir", opt::dir, "DIR", 0, + "Change to DIR before executing script."}, + + {"dump-model-units", opt::dump_model_units, NULL, 0, + "Dump all unit types in the model and exit."}, + + {"listen-dt", opt::listen_dt, "MSEC", 0, + "Listen at this interval (default 1 msec; set to 0 " + "to listen every cycle, which can slow cnrun down considerably)."}, + + {"log-spiking", opt::log_spiking, "l|0", 0, + "Write a model-wide log of spiking neurons, using labels (l) " + "or unit ids (0)."}, + + {"log-spiking-threshold", opt::log_spiking_threshold, "", 0, + "Write a model-wide log of spiking neurons, using labels (l) " + "or unit ids (0)."}, + + {"log-option", opt::log_option, "1dbL", 0, + "1, only log the first variable; " + "d, defer writing to disk until done rather than write continuously; " + "b, write in native binary form rather than in ASCII; " + "L, log integrator dt."}, + + {"precision", opt::precision, "N", 0, + "Precision for floating point printed output."}, + + {"dt-max", opt::dt_max, "MSEC", 0, + "Max time step (default 0.5)."}, + {"dt-min", opt::dt_min, "MSEC", 0, + "Min time step (default 1e-5)."}, + {"dt-xcap", opt::dt_xcap, "TIMES", 0, + "Cap dt increase by current dt value x this (default 5)."}, + + {"sort-units", opt::sort_units, NULL, 0, + "Sort units in any bulk output." }, + + {"define", opt::defvar, "VAR=EXPR", 0, + "Define a variable with an initial value."}, + + {"verbose", opt::verbosely, "LEVEL", 0, + "Verbosity level (default 1; values up to 7 are meaningful). Use a" + " negative value to show the progress percentage only," + " indented on the line at -8 x this value."}, + + { 0 } +}; +#pragma GCC diagnostic pop + +static char args_doc[] = "SCRIPTFILE(S)"; + +static error_t parse_opt( int, char*, struct argp_state*); + +static struct argp argp = { + options, + parse_opt, + args_doc, + doc +}; + + +static error_t +parse_opt( int key, const char *arg, struct argp_state *state) +{ + auto& Q = *(SOptions*)state->input; + + char *endp = nullptr; + switch ( key ) { + case opt::dt_max: + if ( Q.integration_dt_max = strtof( arg, &endp), *endp ) { + fprintf( stderr, "Expected an FP value for dt-max arg, got \"%s\"", arg); + return (error_t)ARGP_ERR_UNKNOWN; + } + break; + case opt::dt_min: + if ( Q.integration_dt_min = strtof( arg, &endp), *endp ) { + fprintf( stderr, "Expected an FP value for dt-min arg, got \"%s\"", arg); + return (error_t)ARGP_ERR_UNKNOWN; + } + break; + case opt::dt_xcap: + if ( Q.integration_dt_max_cap = strtof( arg, &endp), *endp ) { + fprintf( stderr, "Expected an FP value for dt-xcap arg, got \"%s\"", arg); + return (error_t)ARGP_ERR_UNKNOWN; + } + break; + + case opt::log_option: + if ( strchr( arg, 'd') ) + Q.listen_deferwrite = true; + if ( strchr( arg, '1') ) + Q.listen_1varonly = true; + if ( strchr( arg, 'b') ) + Q.listen_binary = true; + if ( strchr( arg, 'L') ) + Q.log_dt = true; + break; + + case opt::listen_dt: + if ( Q.listen_dt( arg, &endp), *endp ) { + fprintf( stderr, "Expected an FP value for listen-dt arg, got \"%s\"", arg); + return (error_t)ARGP_ERR_UNKNOWN; + } + break; + + case opt::precision: + Q.precision = strtoul( arg, &endp, 10); + if ( *endp || Q.precision > 16 ) { + fprintf( stderr, "Expected an unsigned int <= 16, got \"%s\"", arg); + return (error_t)ARGP_ERR_UNKNOWN; + } + break; + + case opt::log_spiking: + Q.log_spikers = true; + switch ( *arg ) { + case '0': Q.log_spikers_use_serial_id = true; break; + case 'l': Q.log_spikers_use_serial_id = false; break; + default: + fprintf( stderr, "Expecting a '0' or 'l' for log-spiking spec, got \"%s\"", arg); + return (error_t)ARGP_ERR_UNKNOWN; + } + break; + case opt::log_spiking_threshold: + Q.spike_threshold = strtof( arg+1, &endp); + if ( *endp ) { + fprintf( stderr, "Expecting an FP value for log-spiking-threshold, got \"%s\"", arg); + return (error_t)ARGP_ERR_UNKNOWN; + } + break; + + case opt::list_units: + Q.list_units = true; + break; + + case opt::sort_units: + Q.sort_units = true; + break; + + case opt::chdir: + Q.working_dir = arg; + break; + + case opt::defvar: + { + double unused; + CExpression + expr; + if ( expr( arg, unused, &Variables) ) { + fprintf( stderr, "Malformed variable assignment with -D"); + return CNRUN_CLPARSE_ERROR; + } + } + break; + + case opt::verbosely: + Q.verbosely = strtol( arg, &endp, 10); + break; + + case ARGP_KEY_ARG: + Q.scripts.emplace_back(arg); + break; + + default: + return (error_t)ARGP_ERR_UNKNOWN; + } + + return (error_t)0; +} + + void cnrun:: -lprintf( int level, const char* fmt, ...) +lprintf( int level, int verbosely, const char* fmt, ...) { - if ( level > Options.verbosely ) { - va_list ap; - va_start (ap, fmt); - vprintf( fmt, ap); - va_end (ap); + if ( level > verbosely ) { + va_list ap; + va_start (ap, fmt); + vprintf( fmt, ap); + va_end (ap); } } -CModel *cnrun::Model; - - -SCNRunnerOptions cnrun::Options; -const char *ScriptFileName = ""; // CNRUN_DEFAULT_SCRIPT; - - - -#define CNRUN_CLPARSE_HELP_REQUEST -1 -#define CNRUN_CLPARSE_ERROR -2 -#define CNRUN_DUMP_PARAMS -3 - -namespace { -static int parse_options( int argc, char **argv, list<SVariable>&); -static void usage( const char *argv0); -} - -#define CNRUN_EARGS -1 -#define CNRUN_ESETUP -2 -#define CNRUN_ETRIALFAIL -3 +// #include "print-version.hh" void print_version( const char* appname); int main( int argc, char *argv[]) { - print_version( "cnrun"); - - int retval = 0; - - list<SVariable> Variables; - switch ( parse_options( argc, argv, Variables) ) { - case CNRUN_CLPARSE_ERROR: - fprintf( stderr, "Problem parsing command line or sanitising values; try -h for help\n"); - return CNRUN_EARGS; - case CNRUN_CLPARSE_HELP_REQUEST: - usage( argv[0]); - return 0; - } + print_version( "cnrun"); + + cnrun::SOptions Options; + argp_parse( &argp, argc, argv, 0, NULL, (void*)&Options); // purely informational, requires no model - if ( Options.list_units ) { - cnmodel_dump_available_units(); - return 0; - } + if ( Q.list_units ) { + cnmodel_dump_available_units(); + return 0; + } // cd as requested - char *pwd = nullptr; - if ( Options.working_dir ) { - pwd = getcwd( nullptr, 0); - if ( chdir( Options.working_dir) ) { - fprintf( stderr, "Failed to cd to \"%s\"", Options.working_dir); - return CNRUN_EARGS; - } - } - - __cn_verbosely = Options.verbosely; - __cn_default_unit_precision = Options.precision; - - interpreter_run( ScriptFileName, 0, Options.interp_howstrict, - true, true, Variables); - - delete Model; - - if ( pwd ) - if ( chdir( pwd) ) - ; - - return retval; -} - - - - -namespace { -int -parse_options( int argc, char **argv, list<SVariable>& Variables) -{ - int c; - - while ( (c = getopt( argc, argv, "e:t::L:E:g:k:UsC:n:D:v:h")) != -1 ) - switch ( c ) { - - case 'e': ScriptFileName = optarg; break; - - case 't': switch ( optarg[0] ) { - case 'T': if ( sscanf( optarg+1, "%lg", &Options.integration_dt_max) != 1 ) { - fprintf( stderr, "-tT takes a double"); - return CNRUN_CLPARSE_ERROR; - } break; - case 't': if ( sscanf( optarg+1, "%lg", &Options.integration_dt_min) != 1 ) { - fprintf( stderr, "-tt takes a double"); - return CNRUN_CLPARSE_ERROR; - } break; - case 'x': if ( sscanf( optarg+1, "%lg", &Options.integration_dt_max_cap) != 1 ) { - fprintf( stderr, "-tx takes a double"); - return CNRUN_CLPARSE_ERROR; - } break; - default: fprintf( stderr, "Unrecognised option modifier for -i"); - return CNRUN_CLPARSE_ERROR; - } break; - - case 'L': if ( strchr( optarg, 'd') != nullptr ) - Options.listen_deferwrite = true; - if ( strchr( optarg, '1') != nullptr ) - Options.listen_1varonly = true; - if ( strchr( optarg, 'b') != nullptr ) - Options.listen_binary = true; - if ( strchr( optarg, 'L') != nullptr ) - Options.log_dt = true; break; - - case 'E': if ( sscanf( optarg, "%g", &Options.listen_dt) != 1 ) { - fprintf( stderr, "-E takes a double"); - return CNRUN_CLPARSE_ERROR; - } break; - case 'g': if ( sscanf( optarg, "%u", &Options.precision) != 1 ) { - fprintf( stderr, "-g takes a short unsigned int"); - return CNRUN_CLPARSE_ERROR; - } break; - - case 'n': if ( optarg && *optarg == 'c' ) - Options.dont_coalesce = true; break; - - case 'k': Options.log_spikers = true; - switch ( *optarg ) { - case '0': Options.log_spikers_use_serial_id = true; break; - case 'l': Options.log_spikers_use_serial_id = false; break; - case 'S': if ( sscanf( optarg+1, "%g", &Options.spike_threshold) != 1 ) { - fprintf( stderr, "-kS takes a double"); - return CNRUN_CLPARSE_ERROR; - } - default: fprintf( stderr, "Expecting 0, l, or S<double> after -k"); - return CNRUN_CLPARSE_ERROR; - } break; - - case 'U': Options.list_units = true; break; - - - case 's': Options.sort_units = true; break; - - - case 'C': Options.working_dir = optarg; break; - - case 'D': { - double unused; - CExpression expr; - if ( expr( optarg, unused, &Variables) ) { - fprintf( stderr, "Malformed variable assignment with -D"); - return CNRUN_CLPARSE_ERROR; - } - } - - case 'v': Options.verbosely = strtol( optarg, nullptr, 10); - { char *p; - if ( (p = strchr( optarg, '%')) ) - Options.display_progress_percent = (*(p+1) != '-'); - if ( (p = strchr( optarg, 't')) ) - Options.display_progress_time = (*(p+1) != '-'); - } - break; - case 'h': - return CNRUN_CLPARSE_HELP_REQUEST; - case '?': - default: - return CNRUN_CLPARSE_ERROR; - } - - return 0; + char *pwd = nullptr; + if ( Q.working_dir ) { + pwd = getcwd( nullptr, 0); + if ( chdir( Q.working_dir.c_str()) ) { + fprintf( stderr, "Failed to cd to \"%s\"", Q.working_dir.c_str()); + return -1; + } + } + + __cn_verbosely = Q.verbosely; + __cn_default_unit_precision = Q.precision; + + for ( const auto& F : Options.scripts ) + interpreter_run( + F, 0, Options, + true, true); + + if ( pwd ) + if ( chdir( pwd) ) + fprintf( stderr, "Failed to cd back to \"%s\"", pwd); + + return 0; } -void -usage( const char *argv0) -{ - cout << "Usage: " << argv0 << "\n" << - " -e <script_fname>\tExecute script\n" - " -D \t\t\tDump all unit types in the model and exit\n" - " -C <dir>\t\tWork in dir\n" - " -s \t\t\tSort units\n" - "\n" - " -L[d1Lx] \t\tLogging & listeners:\n" - " d \t\t\tdefer writing to disk until done rather than writing continuously\n" - " 1\t\t\tonly log the first variable\n" - " x\t\t\twrite in native binary form rather than in ASCII\n" - " L\t\t\tlog integrator dt\n" - " -E<double>\t\tListen at this interval (default " << Options.listen_dt << ";\n" - "\t\t\t set to 0 to listen every cycle)\n" - "\n" - " -kl \t\t\tWrite a model-wide log of spiking neurons, using labels\n" - " -k0 \t\t\t... use unit id instead\n" - " -kS<double>\t\tSpike detection threshold (default " << Options.spike_threshold << ")\n" - "\n" - " -e <uint>\t\tSet precision for all output (default " << Options.precision << ")\n" - "\n" - " -tT <double>\t\tdt_max (default " << Options.integration_dt_max << ")\n" - " -tt <double>\t\tdt_min (default " << Options.integration_dt_min << ")\n" - " -tx <double>\t\tCap dt by current dt value x this (default " << Options.integration_dt_max_cap << ")\n" - "\n" - " -D EXPR\t\tAny valid expression, will inject whatever variables get assigned in it\n" - "\n" - " -v <int>\t\tSet verbosity level (default " << Options.verbosely << ")\n" - "\t\t\t Use a negative value to show the progress percentage only,\n" - " -v[%[-]t[-]]\t\tDisplay (with -, suppress) progress percent and/or time\n" - "\t\t\t indented on the line at 8 x (minus) this value.\n" - "\n" - " -U \t\t\tList available unit types with parameter names\n" - "\t\t\t and values, and exit\n" - " -h \t\t\tDisplay this help\n" - "\n"; -} -} // namespace - - -// EOF +// namespace { +// void +// usage( const char *argv0) +// { +// cout << "Usage: " << argv0 << "\n" << +// " -e <script_fname>\tExecute script\n" +// " -D \t\t\tDump all unit types in the model and exit\n" +// " -C <dir>\t\tWork in dir\n" +// " -s \t\t\tSort units\n" +// "\n" +// " -L[d1Lx] \t\tLogging & listeners:\n" +// " d \t\t\tdefer writing to disk until done rather than writing continuously\n" +// " 1\t\t\tonly log the first variable\n" +// " x\t\t\twrite in native binary form rather than in ASCII\n" +// " L\t\t\tlog integrator dt\n" +// " -E<double>\t\tListen at this interval (default " << Options.listen_dt << ";\n" +// "\t\t\t set to 0 to listen every cycle)\n" +// "\n" +// " -kl \t\t\tWrite a model-wide log of spiking neurons, using labels\n" +// " -k0 \t\t\t... use unit id instead\n" +// " -kS<double>\t\tSpike detection threshold (default " << Options.spike_threshold << ")\n" +// "\n" +// " -e <uint>\t\tSet precision for all output (default " << Options.precision << ")\n" +// "\n" +// " -tT <double>\t\tdt_max (default " << Options.integration_dt_max << ")\n" +// " -tt <double>\t\tdt_min (default " << Options.integration_dt_min << ")\n" +// " -tx <double>\t\tCap dt by current dt value x this (default " << Options.integration_dt_max_cap << ")\n" +// "\n" +// " -D EXPR\t\tAny valid expression, will inject whatever variables get assigned in it\n" +// "\n" +// " -v <int>\t\tSet verbosity level (default " << Options.verbosely << ")\n" +// "\t\t\t Use a negative value to show the progress percentage only,\n" +// " -v[%[-]t[-]]\t\tDisplay (with -, suppress) progress percent and/or time\n" +// "\t\t\t indented on the line at 8 x (minus) this value.\n" +// "\n" +// " -U \t\t\tList available unit types with parameter names\n" +// "\t\t\t and values, and exit\n" +// " -h \t\t\tDisplay this help\n" +// "\n"; +// } +// } // namespace + + + + +// Local Variables: +// indent-tabs-mode: nil +// tab-width: 8 +// c-basic-offset: 8 +// End: diff --git a/upstream/src/cnrun/runner.hh b/upstream/src/cnrun/runner.hh index a98488b..123d8d3 100644 --- a/upstream/src/cnrun/runner.hh +++ b/upstream/src/cnrun/runner.hh @@ -1,19 +1,19 @@ /* - * Author: Andrei Zavada <[email protected]> + * File name: cnrun/runner.hh + * Project: cnrun + * Author: Andrei Zavada <[email protected]> + * Initial version: 2008-11-04 * - * License: GPL-2+ + * Purpose: interpreter * - * Initial version: 2008-11-04 - * - * CNModel runner + * License: GPL */ -#ifndef CN_RUNNER_H -#define CN_RUNNER_H +#ifndef CN_CNRUN_RUNNER_H_ +#define CN_CNRUN_RUNNER_H_ -#include <vector> #include <list> -#include <iostream> +#include <string> #include "libstilton/exprparser.hh" @@ -26,120 +26,97 @@ namespace cnrun { -enum { - CN_INTRP_STRICT, - CN_INTRP_LOOSE +struct SInitOptions + : public cnrun::SModelOptions { + bool dump_params:1, + list_units:1; + string working_dir; + + list<string> + scripts; + + SInitOptions () + : dump_params(false), list_units (false) + working_dir (".") + {} }; -struct SCNRunnerOptions { - bool listen_1varonly:1, - listen_deferwrite:1, - listen_binary:1, - dump_params:1, - list_units:1, - sort_units:1, - log_dt:1, - log_spikers:1, - log_spikers_use_serial_id:1, - log_sdf:1, - display_progress_percent:1, - display_progress_time:1, - dont_coalesce:1; - const char *working_dir; - unsigned precision; - float spike_threshold, - spike_lapse, - listen_dt; - double //discrete_dt, - integration_dt_max, - integration_dt_min, - integration_dt_max_cap; - float sxf_start_delay, - sxf_sample, - sdf_sigma; - int interp_howstrict, - verbosely; - - SCNRunnerOptions() - : listen_1varonly (true), listen_deferwrite (false), listen_binary (false), - dump_params(false), list_units (false), - sort_units (false), - log_dt (false), - log_spikers (false), log_spikers_use_serial_id (false), - log_sdf (false), - display_progress_percent (true), - display_progress_time (false), - dont_coalesce (false), - working_dir ("."), - precision (8), - spike_threshold (0.), spike_lapse (3.), - listen_dt(1.), - //discrete_dt(.5), - integration_dt_max (.5), integration_dt_min (1e-5), integration_dt_max_cap (5.), - sxf_start_delay (0.), sxf_sample (0.), sdf_sigma (0.), - interp_howstrict (CN_INTRP_LOOSE), - verbosely (1) - {} + +enum class TInterpStrictness { + strict, + loose }; -#define CNRUN_DEFAULT_SCRIPT "./Default.cnsh" - -extern SCNRunnerOptions Options; - - - -extern CModel *Model; - -int interpreter_run( const char *script_fname, int level, int howstrict, - bool env_import, bool env_export, list<cnrun::SVariable> &varlist); - - -enum { - CNCMD__noop = -1, - CNCMD_new_model = 0, - CNCMD_load_nml, - CNCMD_merge_nml, - CNCMD_add_neuron, - CNCMD_add_synapse, - CNCMD_reset, - CNCMD_reset_revert_params, - CNCMD_reset_state_units, - CNCMD_advance_until, - CNCMD_advance, - CNCMD_putout, - CNCMD_decimate, - CNCMD_start_listen, - CNCMD_stop_listen, - CNCMD_listen_dt, - CNCMD_listen_mode, - CNCMD_integration_dt_min, - CNCMD_integration_dt_max, - CNCMD_integration_dt_cap, - CNCMD_start_log_spikes, - CNCMD_stop_log_spikes, - CNCMD_set_sxf_params, - CNCMD_new_source, - CNCMD_show_sources, - CNCMD_connect_source, - CNCMD_disconnect_source, - CNCMD_set_parm_neuron, - CNCMD_set_parm_synapse, - CNCMD_cull_deaf_synapses, - CNCMD_describe_model, - CNCMD_show_units, - CNCMD_exec, - CNCMD_verbosity, - CNCMD_show_vars, - CNCMD_clear_vars, - CNCMD_pause, - CNCMD_exit +class CInterpreter : public SOptions { + CModel* model; + + public: + CState () + : CModel (nullptr) + {} + ~CState () + { + if ( model ) + delete model; + } + + private: + bool regenerate_unit_labels, + regenerate_var_names, + regenerate_source_ids; }; + + + extern const char* const cnrun_cmd[]; -extern bool regenerate_unit_labels; -extern bool regenerate_var_names; -extern bool regenerate_source_ids; +int interpreter_run( const char *script_fname, const SOptions&, + bool env_import, bool env_export); + + +enum class TInterpCommand { + noop, + new_model, + load_nml, + merge_nml, + add_neuron, + add_synapse, + reset, + reset_revert_params, + reset_state_units, + advance_until, + advance, + putout, + decimate, + start_listen, + stop_listen, + listen_dt, + listen_mode, + integration_dt_min, + integration_dt_max, + integration_dt_cap, + start_log_spikes, + stop_log_spikes, + set_sxf_params, + new_source, + show_sources, + connect_source, + disconnect_source, + set_parm_neuron, + set_parm_synapse, + cull_deaf_synapses, + describe_model, + show_units, + exec, + verbosity, + show_vars, + clear_vars, + pause, + exit +}; + + char** cnrun_completion( const char *text, int start, int end); diff --git a/upstream/src/libcn/base-unit.cc b/upstream/src/libcn/base-unit.cc index 56ec66d..92bdf36 100644 --- a/upstream/src/libcn/base-unit.cc +++ b/upstream/src/libcn/base-unit.cc @@ -29,16 +29,6 @@ using namespace std; -double cnrun::__cn_dummy_double; - -unsigned short cnrun::__cn_default_unit_precision = 8; - -int cnrun::__cn_verbosely = 2; - - - -// mind that child - cnrun::C_BaseUnit:: C_BaseUnit( TUnitType intype, const char *inlabel, CModel* inM, int s_mask) diff --git a/upstream/src/libcn/model.hh b/upstream/src/libcn/model.hh index 2dd17a8..a1b2926 100644 --- a/upstream/src/libcn/model.hh +++ b/upstream/src/libcn/model.hh @@ -20,8 +20,8 @@ parameters. --------------------------------------------------------------------------*/ -#ifndef LIBCN_MODEL_H -#define LIBCN_MODEL_H +#ifndef CN_LIBCN_MODEL_H_ +#define CN_LIBCN_MODEL_H_ #include <csignal> #include <list> @@ -49,29 +49,66 @@ parameters. using namespace std; namespace cnrun { -// CModel _status bits -#define CN_MDL_LOGDT (1 << 0) -#define CN_MDL_LOGSPIKERS (1 << 1) -#define CN_MDL_LOGUSINGID (1 << 2) -#define CN_MDL_SORTUNITS (1 << 3) -#define CN_MDL_ALLOWNOISE (1 << 4) -#define CN_MDL_NOTREADY (1 << 5) -#define CN_MDL_DISKLESS (1 << 6) -#define CN_MDL_HAS_DDTB_UNITS (1 << 7) -#define CN_MDL_DISPLAY_PROGRESS_PERCENT (1 << 8) -#define CN_MDL_DISPLAY_PROGRESS_TIME (1 << 9) -#define CN_MDL_DONT_COALESCE (1 << 10) + +struct SModelOptions { + bool listen_1varonly:1, + listen_deferwrite:1, + listen_binary:1, + sort_units:1, + log_dt:1, + log_spikers:1, + log_spikers_use_serial_id:1, + log_sdf:1, + display_progress_percent:1, + display_progress_time:1; + int precision; + float spike_threshold, + spike_lapse, + listen_dt; + double //discrete_dt, + integration_dt_max, + integration_dt_min, + integration_dt_max_cap; + float sxf_start_delay, + sxf_sample, + sdf_sigma; + int verbosely; + + list<SVariable> + variables; + + SOptions () + : listen_1varonly (true), listen_deferwrite (false), listen_binary (false), + sort_units (true), + log_dt (false), + log_spikers (false), log_spikers_use_serial_id (false), + log_sdf (false), + display_progress_percent (true), + display_progress_time (false), + dont_coalesce (false), + precision (8), + spike_threshold (0.), spike_lapse (3.), + listen_dt(1.), + //discrete_dt(.5), + integration_dt_max (.5), integration_dt_min (1e-5), integration_dt_max_cap (5.), + sxf_start_delay (0.), sxf_sample (0.), sdf_sigma (0.), + verbosely (1) + {} +}; class CModel { public: - string name; + string name; private: - int _status; + int _status; public: - int status() { return _status; } + int status() const + { + return _status; + } // structure ------ friend class C_BaseSynapse; @@ -708,4 +745,8 @@ CSynapseMxMap::preadvance() #endif -// EOF +// Local Variables: +// indent-tabs-mode: nil +// tab-width: 8 +// c-basic-offset: 8 +// End: -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/cnrun.git _______________________________________________ debian-med-commit mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit
