00001 //## begin module.cm preserve=no 00002 // %X% %Q% %Z% %W% 00003 //## end module.cm 00004 00005 //## Module: Commissioner; Package specification 00006 // Implementation of the Commissioner class 00007 //## Subsystem: utilities 00008 //## Source file: d:\code\glastsim\utilities\Commissioner.h 00009 00010 #ifndef Commissioner_h 00011 #define Commissioner_h 1 00012 00013 #include "Adapter.h" 00014 //## begin module.declarations preserve=no 00015 //## end module.declarations 00016 00017 00018 //## Class: Commissioner; Parameterized Class 00019 // Class used to select other classes based on some 00020 // specific attribute within those classes. This is 00021 // implemented by setting some parameter within this class 00022 // of type _Ty and creating an Action object, of return 00023 // type _Ty and encapsulated within the Subject class which 00024 // gives access to that object. 00025 //## Category: utilities 00026 //## Subsystem: utilities 00027 //## Persistence: Transient 00028 //## Cardinality/Multiplicity: n 00029 00030 template <class Commissionee, class Criteria> 00031 class Commissioner 00032 { 00033 //## begin Commissioner.initialDeclarations preserve=yes 00034 //## end Commissioner.initialDeclarations 00035 00036 public: 00037 //## Constructors (specified) 00038 //## Operation: Commissioner%894312587 00039 // constructor 00040 Commissioner (Action<Commissionee, Criteria> aSelector, Criteria aCriteria) 00041 //## begin Commissioner::Commissioner%894312587.hasinit preserve=no 00042 //## end Commissioner::Commissioner%894312587.hasinit 00043 //## begin Commissioner::Commissioner%894312587.initialization preserve=yes 00044 : itsSelector(aSelector), itsCriteria(aCriteria) 00045 //## end Commissioner::Commissioner%894312587.initialization 00046 { 00047 //## begin Commissioner::Commissioner%894312587.body preserve=yes 00048 //## end Commissioner::Commissioner%894312587.body 00049 } 00050 00051 00052 //## Other Operations (specified) 00053 //## Operation: select%894312588 00054 // executes its selection criteria on the object passed to 00055 // it. 00056 bool select (Commissionee* aCommissionee) 00057 { 00058 //## begin Commissioner::select%894312588.body preserve=yes 00059 return (itsCriteria == itsSelector.execute(aCommissionee)); 00060 //## end Commissioner::select%894312588.body 00061 } 00062 00063 //## Operation: select%894312589 00064 // performs its selection using the criteria passed in to 00065 // the funciton 00066 bool select (Commissionee* aCommissionee, Criteria aCriteria) const 00067 { 00068 //## begin Commissioner::select%894312589.body preserve=yes 00069 return (aCriteria == itsSelector.execute(aCommissionee)); 00070 //## end Commissioner::select%894312589.body 00071 } 00072 00073 // Additional Public Declarations 00074 //## begin Commissioner.public preserve=yes 00075 //## end Commissioner.public 00076 00077 protected: 00078 // Additional Protected Declarations 00079 //## begin Commissioner.protected preserve=yes 00080 //## end Commissioner.protected 00081 00082 private: 00083 // Additional Private Declarations 00084 //## begin Commissioner.private preserve=yes 00085 //## end Commissioner.private 00086 00087 private: //## implementation 00088 // Data Members for Associations 00089 00090 //## Association: utilities::<unnamed>%3550EE700380 00091 //## Role: Commissioner::itsSelector 00092 // action function used to select Subjects 00093 //## begin Commissioner::itsSelector.role preserve=no private: Action { -> VHN} 00094 Action<Commissionee, Criteria> itsSelector; 00095 //## end Commissioner::itsSelector.role 00096 00097 //## Association: utilities::<unnamed>%3550F03B007D 00098 //## Role: Commissioner::<the_Command> 00099 //## begin Commissioner::<the_Command>.role preserve=no public: Command {0..1 -> RHG} 00100 //## end Commissioner::<the_Command>.role 00101 00102 // Additional Implementation Declarations 00103 //## begin Commissioner.implementation preserve=yes 00104 Criteria itsCriteria; 00105 //## end Commissioner.implementation 00106 00107 }; 00108 00109 //## begin Commissioner.postscript preserve=yes 00110 //## end Commissioner.postscript 00111 00112 00113 00114 #endif