diff options
Diffstat (limited to 'dnn/Criterion.cc')
-rwxr-xr-x | dnn/Criterion.cc | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/dnn/Criterion.cc b/dnn/Criterion.cc new file mode 100755 index 0000000..edef576 --- /dev/null +++ b/dnn/Criterion.cc @@ -0,0 +1,142 @@ +/* + * DNN - Data News Network + * + * by Stephane Chatty + * + * Copyright 1993-1995 + * Centre d'Etudes de la Navigation Aerienne (CENA) + * + * Criteria. + * + * $Id$ + * $CurLog$ + */ + +#include "Criterion.h" + +DnnBaseCriterion :: DnnBaseCriterion () +{ +} + +DnnBaseCriterion :: ~DnnBaseCriterion () +{ +} + + +DnnAndCriterion :: DnnAndCriterion () +: DnnBaseCriterion (), + Conditions () +{ +} + +DnnAndCriterion :: ~DnnAndCriterion () +{ +} + +DnnAndCriterion& +DnnAndCriterion :: operator &= (DnnBaseCriterion& b) +{ + Conditions.Append (&b); + return *this; +} + +DnnAndCriterion& +DnnAndCriterion :: operator &= (DnnOrCriterion& b) +{ + Conditions.Append (&b); + return *this; +} + +DnnAndCriterion& +DnnAndCriterion :: operator &= (DnnAndCriterion& b) +{ + CcuListIterOf <DnnBaseCriterion> li = b.Conditions; + while (++li) + Conditions.Append (*li); + return *this; +} + +bool +DnnAndCriterion :: Test (DnnEvent& ev) +{ + bool res = true; + CcuListIterOf <DnnBaseCriterion> li = Conditions; + while (res && ++li) +#ifdef CPLUS_BUG22 + res = bool (res && (*li)->Test (ev)); +#else + res = res && (*li)->Test (ev); +#endif + return res; +} + + +DnnOrCriterion :: DnnOrCriterion () +: DnnBaseCriterion (), + Alternatives () +{ +} + +DnnOrCriterion :: ~DnnOrCriterion () +{ +} + +DnnOrCriterion& +DnnOrCriterion :: operator |= (DnnOrCriterion& b) +{ + CcuListIterOf <DnnBaseCriterion> li = b.Alternatives; + while (++li) + Alternatives.Append (*li); + return *this; +} + +DnnOrCriterion& +DnnOrCriterion :: operator |= (DnnBaseCriterion& b) +{ + Alternatives.Append (&b); + return *this; +} + +DnnOrCriterion& +DnnOrCriterion :: operator |= (DnnAndCriterion& b) +{ + Alternatives.Append (&b); + return *this; +} + +bool +DnnOrCriterion :: Test (DnnEvent& ev) +{ + bool res = false; + CcuListIterOf <DnnBaseCriterion> li = Alternatives; + while (!res && ++li) +#ifdef CPLUS_BUG22 + res = bool (res || (*li)->Test (ev)); +#else + res = res || (*li)->Test (ev); +#endif + return res; +} + + +DnnBasicCriterion :: DnnBasicCriterion () +: DnnBaseCriterion (), + Check (0) +{ +} + +DnnBasicCriterion :: DnnBasicCriterion (bool (*c) (DnnEvent&)) +: DnnBaseCriterion (), + Check (c) +{ +} + +DnnBasicCriterion :: ~DnnBasicCriterion () +{ +} + +bool +DnnBasicCriterion :: Test (DnnEvent& e) +{ + return Check ? (*Check) (e) : false; +} |