Author: sveinung Date: Fri Oct 21 12:35:05 2016 New Revision: 34197 URL: http://svn.gna.org/viewcvs/freeciv?rev=34197&view=rev Log: requirements: x contradicts !x.
Exact opposite requirements will always contradict each other. Use this fact to speed up are_requirements_contradictions(). See patch #7852 Modified: trunk/common/requirements.c Modified: trunk/common/requirements.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=34197&r1=34196&r2=34197&view=diff ============================================================================== --- trunk/common/requirements.c (original) +++ trunk/common/requirements.c Fri Oct 21 12:35:05 2016 @@ -1013,7 +1013,7 @@ } /* No special knowledge. */ - return are_requirements_opposites(impr_req, genus_req); + return FALSE; } /************************************************************************** @@ -1026,6 +1026,11 @@ bool are_requirements_contradictions(const struct requirement *req1, const struct requirement *req2) { + if (are_requirements_opposites(req1, req2)) { + /* The exact opposite. */ + return TRUE; + } + switch (req1->source.kind) { case VUT_IMPROVEMENT: if (req2->source.kind == VUT_IMPR_GENUS) { @@ -1033,7 +1038,7 @@ } /* No special knowledge. */ - return are_requirements_opposites(req1, req2); + return FALSE; break; case VUT_IMPR_GENUS: if (req2->source.kind == VUT_IMPROVEMENT) { @@ -1041,7 +1046,7 @@ } /* No special knowledge. */ - return are_requirements_opposites(req1, req2); + return FALSE; break; case VUT_DIPLREL: if (req2->source.kind != VUT_DIPLREL) { @@ -1084,9 +1089,9 @@ } break; default: - /* No special knowledge exists. All that can be done is to detect if - * the requirements are opposite to each other. */ - return are_requirements_opposites(req1, req2); + /* No special knowledge exists. The requirements aren't the exact + * opposite of each other per the initial check. */ + return FALSE; break; } } _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits