simplify Variable::parse_args() by using Tokenizer class

This commit is contained in:
Axel Kohlmeyer
2021-03-23 16:47:04 -04:00
parent 16c08516a7
commit 014f9ad527
2 changed files with 5 additions and 29 deletions

View File

@ -4708,42 +4708,19 @@ double Variable::constant(char *word)
int Variable::parse_args(char *str, char **args)
{
char *ptrnext;
int narg = 0;
char *ptr = str;
Tokenizer values(str,",");
while (ptr && narg < MAXFUNCARG) {
ptrnext = find_next_comma(ptr);
if (ptrnext) *ptrnext = '\0';
args[narg] = utils::strdup(ptr);
while (values.has_next() && narg < MAXFUNCARG) {
args[narg] = utils::strdup(values.next());
narg++;
ptr = ptrnext;
if (ptr) ptr++;
}
if (ptr) error->all(FLERR,"Too many args in variable function");
if (values.has_next())
error->all(FLERR,"Too many args in variable function");
return narg;
}
/* ----------------------------------------------------------------------
find next comma in str
skip commas inside one or more nested parenthesis
only return ptr to comma at level 0, else nullptr if not found
------------------------------------------------------------------------- */
char *Variable::find_next_comma(char *str)
{
int level = 0;
for (char *p = str; *p; ++p) {
if ('(' == *p) level++;
else if (')' == *p) level--;
else if (',' == *p && !level) return p;
}
return nullptr;
}
/* ----------------------------------------------------------------------
helper routine for printing variable name with error message
------------------------------------------------------------------------- */

View File

@ -125,7 +125,6 @@ class Variable : protected Pointers {
int is_constant(char *);
double constant(char *);
int parse_args(char *, char **);
char *find_next_comma(char *);
void print_var_error(const std::string &, int, const std::string &,
int, int global=1);
void print_tree(Tree *, int);