From bcb19dbd53973ff7efd9b2838de121d1e23430f4 Mon Sep 17 00:00:00 2001 From: chatty Date: Tue, 28 Nov 2000 14:52:15 +0000 Subject: Lots of files were added around '96 --- dnn/Criterion.h | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100755 dnn/Criterion.h (limited to 'dnn/Criterion.h') diff --git a/dnn/Criterion.h b/dnn/Criterion.h new file mode 100755 index 0000000..92dd48a --- /dev/null +++ b/dnn/Criterion.h @@ -0,0 +1,103 @@ +/* + * DNN - Data News Network + * + * by Stephane Chatty + * + * Copyright 1993-1995 + * Centre d'Etudes de la Navigation Aerienne (CENA) + * + * Criteria. + * + * $Id$ + * $CurLog$ + * Removed pragma interfaces + */ + +#ifndef DnnCriterion_H_ +#define DnnCriterion_H_ + +#include "cplus_bugs.h" +#include "ccu/bool.h" +#include "ccu/List.h" +class DnnEvent; + +class DnnBaseCriterion { +friend class DnnAndCriterion; +friend class DnnOrCriterion; +protected: + DnnBaseCriterion (); + ~DnnBaseCriterion (); +public: +virtual bool Test (DnnEvent&) = 0; +}; + +class DnnOrCriterion; + +class DnnAndCriterion : public DnnBaseCriterion { +friend class DnnOrCriterion; +protected: + CcuListOf Conditions; + bool Test (DnnEvent&); +public: + DnnAndCriterion (); + ~DnnAndCriterion (); + DnnAndCriterion& operator &= (DnnBaseCriterion&); + DnnAndCriterion& operator &= (DnnOrCriterion&); + DnnAndCriterion& operator &= (DnnAndCriterion&); +}; + +class DnnOrCriterion : public DnnBaseCriterion { +friend class DnnAndCriterion; +protected: + CcuListOf Alternatives; + bool Test (DnnEvent&); +public: + DnnOrCriterion (); + ~DnnOrCriterion (); + DnnOrCriterion& operator |= (DnnBaseCriterion&); + DnnOrCriterion& operator |= (DnnOrCriterion&); + DnnOrCriterion& operator |= (DnnAndCriterion&); +}; + +class DnnBasicCriterion : public DnnBaseCriterion { +protected: + bool (*Check) (DnnEvent&); + bool Test (DnnEvent& e); + +public: + DnnBasicCriterion (); + DnnBasicCriterion (bool (*c) (DnnEvent&)); + ~DnnBasicCriterion (); +inline void ChangeCriterion (bool (*c) (DnnEvent&)) {Check = c; } +}; + +template class DnnCriterionOf : public DnnBaseCriterion { +protected: + T& Object; + void (T::*Check) (DnnEvent&); + +public: + DnnCriterionOf (T& o, void (T::*c) (DnnEvent&)) : DnnBaseCriterion (), Object (o), Check (c) {} + ~DnnCriterionOf () {} + bool Test (DnnEvent& ev) { return (Object.*Check) (ev); } +}; + +#define SpecializedCriterion(R,S) \ +\ +class R : public DnnBaseCriterion { \ +\ +protected: \ +\ + S& Body; \ + bool (S::*SpecializedCheck) (DnnEvent&); \ +\ +public: \ +\ + R (S& s, bool (S::*sc) (DnnEvent&)) : DnnBaseCriterion (), Body (s), SpecializedCheck (sc) {} \ + ~R () {} \ +\ + bool Test (DnnEvent& e) { return (Body.*SpecializedCheck) (e); } \ +\ +}; + +#endif /* DnnCriterion_H_ */ -- cgit v1.1