Merge pull request #2 from OpenWaterAnalytics/dev

updates dev
This commit is contained in:
Sam Hatchett
2019-05-08 14:42:37 -04:00
committed by GitHub
5 changed files with 74 additions and 18 deletions

View File

@@ -1,11 +1,6 @@
MIT License MIT License
<<<<<<< HEAD
Works are copyright (c) 2018 their respective AUTHORS,
unless such work is in the Public Domain (again, see AUTHORS)
=======
Copyright (c) 2017 Open Water Analytics Copyright (c) 2017 Open Water Analytics
>>>>>>> master
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -1867,16 +1867,15 @@ int DLLEXPORT EN_deletenode(EN_Project p, int index, int actionCode)
// Can't delete a water quality trace node // Can't delete a water quality trace node
if (index == p->quality.TraceNode) return 260; if (index == p->quality.TraceNode) return 260;
// Count number of simple & rule-based controls that contain the node // Do not delete a node contained in a control or is connected to a link
if (actionCode == EN_CONDITIONAL) if (actionCode == EN_CONDITIONAL)
{ {
actionCode = incontrols(p, NODE, index); if (incontrols(p, NODE, index)) return 261;
for (i = 1; i <= net->Nlinks; i++) for (i = 1; i <= net->Nlinks; i++)
{ {
if (net->Link[i].N1 == index || if (net->Link[i].N1 == index ||
net->Link[i].N2 == index) actionCode += incontrols(p, LINK, i); net->Link[i].N2 == index) return 259;
} }
if (actionCode > 0) return 261;
} }
// Get a reference to the node & its type // Get a reference to the node & its type

View File

@@ -54,6 +54,7 @@ DAT(253,"nonexistent demand category")
DAT(254,"node with no coordinates") DAT(254,"node with no coordinates")
DAT(257,"nonexistent rule") DAT(257,"nonexistent rule")
DAT(258,"nonexistent rule clause") DAT(258,"nonexistent rule clause")
DAT(259,"attempt to delete a node that still has links connected to it")
DAT(260,"attempt to delete node assigned as a Trace Node") DAT(260,"attempt to delete node assigned as a Trace Node")
DAT(261,"attempt to delete a node or link contained in a control") DAT(261,"attempt to delete a node or link contained in a control")
DAT(262,"attempt to modify network structure while solver is active") DAT(262,"attempt to modify network structure while solver is active")

View File

@@ -110,6 +110,10 @@ void initrules(Project *pr)
//-------------------------------------------------------------- //--------------------------------------------------------------
{ {
pr->rules.RuleState = r_PRIORITY; pr->rules.RuleState = r_PRIORITY;
pr->rules.LastPremise = NULL;
pr->rules.LastThenAction = NULL;
pr->rules.LastElseAction = NULL;
pr->rules.ActionList = NULL;
pr->network.Rule = NULL; pr->network.Rule = NULL;
} }
@@ -169,8 +173,14 @@ void freerules(Project *pr)
//-------------------------------------------------------------- //--------------------------------------------------------------
{ {
int i; int i;
// Already freed
if (pr->network.Rule == NULL)
return;
for (i = 1; i <= pr->network.Nrules; i++) clearrule(pr, i); for (i = 1; i <= pr->network.Nrules; i++) clearrule(pr, i);
free(pr->network.Rule); free(pr->network.Rule);
pr->network.Rule = NULL;
} }
int ruledata(Project *pr) int ruledata(Project *pr)
@@ -199,6 +209,12 @@ int ruledata(Project *pr)
break; break;
case r_RULE: case r_RULE:
// Missing the rule label
if (parser->Ntokens != 2)
{
err = 201;
break;
}
net->Nrules++; net->Nrules++;
newrule(pr); newrule(pr);
rules->RuleState = r_RULE; rules->RuleState = r_RULE;
@@ -302,24 +318,24 @@ void ruleerrmsg(Project *pr)
// Get label of rule being parsed // Get label of rule being parsed
if (net->Nrules > 0) if (net->Nrules > 0)
{ {
strcpy(label, t_RULE); strncpy(label, t_RULE, MAXMSG);
strcat(label, " "); strncat(label, " ", MAXMSG);
strcat(label, net->Rule[net->Nrules].label); strncat(label, net->Rule[net->Nrules].label, MAXMSG);
} }
else strcpy(label, t_RULES_SECT); else strncpy(label, t_RULES_SECT, MAXMSG);
// Write rule label and error message to status report // Write rule label and error message to status report
sprintf(pr->Msg, "%s", msg); snprintf(pr->Msg, MAXMSG, "%s", msg);
strcat(pr->Msg, label); strncat(pr->Msg, label, MAXMSG);
strcat(pr->Msg, ":"); strncat(pr->Msg, ":", MAXMSG);
writeline(pr, pr->Msg); writeline(pr, pr->Msg);
// Write text of rule clause being parsed to status report // Write text of rule clause being parsed to status report
strcpy(msg, Tok[0]); strcpy(msg, Tok[0]);
for (i = 1; i < parser->Ntokens; i++) for (i = 1; i < parser->Ntokens; i++)
{ {
strcat(msg, " "); strncat(msg, " ", MAXLINE);
strcat(msg, Tok[i]); strncat(msg, Tok[i], MAXLINE);
} }
writeline(pr, msg); writeline(pr, msg);
} }

View File

@@ -0,0 +1,45 @@
rem : set the path to CMAKE
SET CMAKE_PATH=cmake.exe
SET Build_PATH=%CD%
rem : set genarator
SET GENERATOR=Visual Studio 15 2017
rem : the directory where the program will be compiled to
SET COMPILE_PATH_WIN64TMP=%Build_PATH%\tmp64\
SET COMPILE_PATH_WIN64=%Build_PATH%\64bit\
rem : the directory where the program will be compiled to
SET COMPILE_PATH_WIN32TMP=%Build_PATH%\tmp32\
SET COMPILE_PATH_WIN32=%Build_PATH%\32bit\
rem : CMAKE the root directory of the EPANET project
rem : 64 bit
MKDIR "%COMPILE_PATH_WIN64TMP%"
CD "%COMPILE_PATH_WIN64TMP%"
MKDIR "%COMPILE_PATH_WIN64%"
%CMAKE_PATH% -G "%GENERATOR% Win64" ../../../
rem : %CMAKE_PATH% --build . --config Debug
%CMAKE_PATH% --build . --config Release
XCOPY "%COMPILE_PATH_WIN64TMP%bin\Release\epanet2.dll" "%COMPILE_PATH_WIN64%epanet2.dll*" /y
XCOPY "%COMPILE_PATH_WIN64TMP%bin\Release\runepanet.exe" "%COMPILE_PATH_WIN64%epanet2.exe*" /y
rem : CMAKE the root directory of the EPANET project
rem : 32 bit
MKDIR "%COMPILE_PATH_WIN32TMP%"
CD "%COMPILE_PATH_WIN32TMP%"
MKDIR "%COMPILE_PATH_WIN32%"
%CMAKE_PATH% -G "%GENERATOR%" ../../../
rem : %CMAKE_PATH% --build . --config Debug
%CMAKE_PATH% --build . --config Release
XCOPY "%COMPILE_PATH_WIN32TMP%bin\Release\epanet2.dll" "%COMPILE_PATH_WIN32%epanet2.dll*" /y
XCOPY "%COMPILE_PATH_WIN32TMP%bin\Release\runepanet.exe" "%COMPILE_PATH_WIN32%epanet2.exe*" /y
CD "%Build_PATH%"
rem : cleaning
RMDIR /s /q "%COMPILE_PATH_WIN64TMP%"
RMDIR /s /q "%COMPILE_PATH_WIN32TMP%"