/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */

#ifndef __SIMULATION_H__
#define __SIMULATION_H__

#include "dao.h"

typedef enum {
	MedianErr = 1, ModeErr = 2, StddevErr = 4, VarErr = 8, SkewErr = 16,
	KurtosisErr = 32
} sim_errmask_t;

typedef struct {
	gnm_float *min;
	gnm_float *max;
	gnm_float *mean;
	gnm_float *median;
	gnm_float *mode;
	gnm_float *stddev;
	gnm_float *var;
	gnm_float *skew;
	gnm_float *kurtosis;
	gnm_float *range;
	gnm_float *confidence;
	gnm_float *lower;
	gnm_float *upper;
	int        *errmask;
} simstats_t;

typedef struct {
        int n_input_vars;
        int n_output_vars;
	int n_vars;

        int first_round;
        int last_round;
        int n_iterations;

	int max_time;

	GnmValue    *inputs;
	GnmValue    *outputs;
	GnmRangeRef *ref_inputs;
	GnmRangeRef *ref_outputs;
	GSList   *list_inputs;
	GSList   *list_outputs;
	gchar    **cellnames;

	GTimeVal          start, end;

	simstats_t **stats;
} simulation_t;

gchar const *simulation_tool (WorkbookControl        *wbc,
			      data_analysis_output_t *dao,
			      simulation_t           *sim);
void   simulation_tool_destroy (simulation_t *sim);

#endif

