#include <unordered_map>
#include <string>
//#include <utility>
#ifndef CELLVARIABLES_H
#define CELLVARIABLES_H
using namespace std;
class cellVariables{
public:
typedef unordered_map<string,double> Fmap;
cellVariables();
cellVariables(Fmap, string);
double get_values(string);
Fmap get_hash();
cellVariables& operator=(const cellVariables& right_side);
private:
#if ANDERSON
void init_anderson_sans_Ca(Fmap&);
void init_anderson(Fmap&);
#endif
void init_generic(Fmap&);
void init_cressman(Fmap&);
void class_init(Fmap&, string);
void init_frohlich(Fmap&);
public:
string cell_type;
Fmap cell_vars;
double membrane_potential;
double synapse_e;
double synapse_e2;
double synapse_i;
double synapse_i_delayed;
double synapse_i_max_current;
double current_time;
//generic
double potassium_channel;
double sodium_channel;
#if ANDERSON
//Anderson sans Ca
double W;
double X;
double B;
//Anderson
double Ca_U0;
double Ca_U1;
double Ca_U2;
double Ca_U3;
double Ca_U4;
double Ca_U5;
double Ca_U6;
double Ca_C0;
double Ca_C1;
double Ca_C2;
double Ca_C3;
double Ca_C4;
double Ca_C5;
double Ca_C6;
double ICa;
double ICa_next;
#endif
//Cressman
double Na_extracellular;
double Na_intracellular;
double K_extracellular;
double K_intracellular;
//double Cl_extracellular;
//double Cl_intracellular;
double Ca_intracellular;
double VNa_var;
double VK_var;
//double VCl_var;
double VL_var;
double potassium_current;
double sodium_current;
double K_extracellular_diffusion_term;
//Frohlich
double frohlich_buffer;
double glia_current;
double pump_current;
double delta_K;
double tau_now_Ca;
}
;
#endif