@@ -49,9 +49,11 @@ void SimVars::create(size_t dim_real, size_t dim_int, size_t dim_bool, size_t di
4949 // allocate memory for all model variables
5050 if (dim_string > 0 ) {
5151 _string_vars = new string[dim_string];
52+ _pre_string_vars = new string[dim_string];
5253 }
5354 else {
5455 _string_vars = NULL ;
56+ _pre_string_vars = NULL ;
5557 }
5658 if (dim_bool > 0 ) {
5759 _bool_vars = (bool *)alignedMalloc (sizeof (bool ) * dim_bool, 64 );
@@ -105,6 +107,8 @@ SimVars::~SimVars()
105107 alignedFree (_bool_vars);
106108 if (_string_vars)
107109 delete [] _string_vars;
110+ if (_pre_string_vars)
111+ delete [] _pre_string_vars;
108112}
109113
110114ISimVars* SimVars::clone ()
@@ -203,6 +207,13 @@ const bool& SimVars::getBoolVar(size_t i)
203207 else
204208 throw std::runtime_error (" Wrong variable index" );
205209}
210+ const std::string& SimVars::getStringVar (size_t i)
211+ {
212+ if (i < _dim_string)
213+ return _string_vars[i];
214+ else
215+ throw std::runtime_error (" Wrong variable index" );
216+ }
206217
207218string& SimVars::initStringVar (size_t i)
208219{
@@ -445,6 +456,8 @@ void SimVars::savePreVariables()
445456 std::copy (_int_vars, _int_vars + _dim_int, _pre_int_vars);
446457 if (_dim_bool > 0 )
447458 std::copy (_bool_vars, _bool_vars + _dim_bool, _pre_bool_vars);
459+ if (_dim_string > 0 )
460+ std::copy (_string_vars, _string_vars + _dim_string, _pre_string_vars);
448461}
449462/* *
450463* \brief Initializes access to pre variables
@@ -473,6 +486,12 @@ bool& SimVars::getPreVar(const bool& var)
473486 return _pre_bool_vars[i];
474487}
475488
489+ std::string& SimVars::getPreVar (const std::string& var)
490+ {
491+ size_t i = &var - _string_vars;
492+ return _pre_string_vars[i];
493+ }
494+
476495/* *\brief returns a pointer to a real simvar variable in simvar array
477496* \param [in] i index of simvar in simvar array
478497* \return pointer to simvar
0 commit comments