simplify Variable::parse_args() by using Tokenizer class
This commit is contained in:
@ -4708,42 +4708,19 @@ double Variable::constant(char *word)
|
|||||||
|
|
||||||
int Variable::parse_args(char *str, char **args)
|
int Variable::parse_args(char *str, char **args)
|
||||||
{
|
{
|
||||||
char *ptrnext;
|
|
||||||
int narg = 0;
|
int narg = 0;
|
||||||
char *ptr = str;
|
Tokenizer values(str,",");
|
||||||
|
|
||||||
while (ptr && narg < MAXFUNCARG) {
|
while (values.has_next() && narg < MAXFUNCARG) {
|
||||||
ptrnext = find_next_comma(ptr);
|
args[narg] = utils::strdup(values.next());
|
||||||
if (ptrnext) *ptrnext = '\0';
|
|
||||||
args[narg] = utils::strdup(ptr);
|
|
||||||
narg++;
|
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;
|
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
|
helper routine for printing variable name with error message
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -125,7 +125,6 @@ class Variable : protected Pointers {
|
|||||||
int is_constant(char *);
|
int is_constant(char *);
|
||||||
double constant(char *);
|
double constant(char *);
|
||||||
int parse_args(char *, char **);
|
int parse_args(char *, char **);
|
||||||
char *find_next_comma(char *);
|
|
||||||
void print_var_error(const std::string &, int, const std::string &,
|
void print_var_error(const std::string &, int, const std::string &,
|
||||||
int, int global=1);
|
int, int global=1);
|
||||||
void print_tree(Tree *, int);
|
void print_tree(Tree *, int);
|
||||||
|
|||||||
Reference in New Issue
Block a user