Fixes problem with findpattern() function (issue #498)

This commit is contained in:
Lew Rossman
2019-05-24 10:33:36 -04:00
parent e4e6d49f52
commit 40c39fd3c6
2 changed files with 14 additions and 12 deletions

View File

@@ -7,7 +7,7 @@ Description: parses network data from a line of an EPANET input file
Authors: see AUTHORS Authors: see AUTHORS
Copyright: see AUTHORS Copyright: see AUTHORS
License: see LICENSE License: see LICENSE
Last Updated: 05/15/2019 Last Updated: 05/24/2019
****************************************************************************** ******************************************************************************
*/ */
@@ -95,7 +95,7 @@ int juncdata(Project *pr)
if (n >= 4) if (n >= 4)
{ {
p = findpattern(net, parser->Tok[3]); p = findpattern(net, parser->Tok[3]);
if (p == 0) return setError(parser, 3, 205); if (p < 0) return setError(parser, 3, 205);
} }
// Save junction data // Save junction data
@@ -170,7 +170,7 @@ int tankdata(Project *pr)
if (n == 3) if (n == 3)
{ {
pattern = findpattern(net, parser->Tok[2]); pattern = findpattern(net, parser->Tok[2]);
if (pattern == 0) return setError(parser, 2, 205); if (pattern < 0) return setError(parser, 2, 205);
} }
} }
else if (n < 6) return 201; else if (n < 6) return 201;
@@ -420,7 +420,7 @@ int pumpdata(Project *pr)
else if (match(parser->Tok[m - 1], w_PATTERN)) // Speed/status pattern else if (match(parser->Tok[m - 1], w_PATTERN)) // Speed/status pattern
{ {
p = findpattern(net, parser->Tok[m]); p = findpattern(net, parser->Tok[m]);
if (p == 0) return setError(parser, m, 205); if (p < 0) return setError(parser, m, 205);
pump->Upat = p; pump->Upat = p;
} }
else if (match(parser->Tok[m - 1], w_SPEED)) // Speed setting else if (match(parser->Tok[m - 1], w_SPEED)) // Speed setting
@@ -557,7 +557,7 @@ int patterndata(Project *pr)
else else
{ {
i = findpattern(net, parser->Tok[0]); i = findpattern(net, parser->Tok[0]);
if (i == 0) return setError(parser, 0, 205); if (i <= 0) return setError(parser, 0, 205);
pattern = &(net->Pattern[i]); pattern = &(net->Pattern[i]);
if (pattern->Comment == NULL && parser->Comment[0]) if (pattern->Comment == NULL && parser->Comment[0])
{ {
@@ -718,7 +718,7 @@ int demanddata(Project *pr)
if (n >= 3) if (n >= 3)
{ {
p = findpattern(net, parser->Tok[2]); p = findpattern(net, parser->Tok[2]);
if (p == 0) return setError(parser, 2, 205); if (p < 0) return setError(parser, 2, 205);
} }
// Replace any demand entered in [JUNCTIONS] section // Replace any demand entered in [JUNCTIONS] section
@@ -904,7 +904,7 @@ int sourcedata(Project *pr)
strcmp(parser->Tok[i + 1], "*") != 0) strcmp(parser->Tok[i + 1], "*") != 0)
{ {
p = findpattern(net, parser->Tok[i + 1]); p = findpattern(net, parser->Tok[i + 1]);
if (p == 0) return setError(parser, i + 1, 205); if (p < 0) return setError(parser, i + 1, 205);
} }
// Destroy any existing source assigned to node // Destroy any existing source assigned to node
@@ -1358,7 +1358,7 @@ int energydata(Project *pr)
else if (match(parser->Tok[n - 2], w_PATTERN)) else if (match(parser->Tok[n - 2], w_PATTERN))
{ {
p = findpattern(net, parser->Tok[n - 1]); p = findpattern(net, parser->Tok[n - 1]);
if (p == 0) return setError(parser, n - 1, 205); if (p < 0) return setError(parser, n - 1, 205);
if (j == 0) hyd->Epat = p; if (j == 0) hyd->Epat = p;
else Pump[j].Epat = p; else Pump[j].Epat = p;
return 0; return 0;

View File

@@ -7,7 +7,7 @@
Authors: see AUTHORS Authors: see AUTHORS
Copyright: see AUTHORS Copyright: see AUTHORS
License: see LICENSE License: see LICENSE
Last Updated: 05/15/2019 Last Updated: 05/24/2019
****************************************************************************** ******************************************************************************
*/ */
@@ -815,17 +815,19 @@ int findpattern(Network *network, char *id)
/*---------------------------------------------------------------- /*----------------------------------------------------------------
** Input: id = time pattern ID ** Input: id = time pattern ID
** Output: none ** Output: none
** Returns: time pattern index, or 0 if pattern not found ** Returns: time pattern index, or -1 if pattern not found
** Purpose: finds index of time pattern given its ID ** Purpose: finds index of time pattern given its ID
**---------------------------------------------------------------- **----------------------------------------------------------------
*/ */
{ {
int i; int i;
for (i = 1; i <= network->Npats; i++)
// Don't forget to include the "dummy" pattern 0 in the search
for (i = 0; i <= network->Npats; i++)
{ {
if (strcmp(id, network->Pattern[i].ID) == 0) return i; if (strcmp(id, network->Pattern[i].ID) == 0) return i;
} }
return 0; return -1;
} }
int findcurve(Network *network, char *id) int findcurve(Network *network, char *id)