00001 #ifndef DCHAIN_LABELEDCANDIDATELIST_H 00002 #define DCHAIN_LABELEDCANDIDATELIST_H 00003 // -*- C++ -*- 00004 // 00005 // Package: DChain 00006 // Module: LabeledCandidateList 00007 // 00008 // Description: Container of `primary'/`conjugate' subclasses of Candidate 00009 // 00010 // Usage: 00011 // <usage> 00012 // 00013 // Author: Simon Patton 00014 // Created: Fri Sep 13 17:58:11 EDT 1996 00015 // $Id: LabeledCandidateList.h,v 1.1.1.1 2009/03/03 06:06:56 maqm Exp $ 00016 // 00017 // Revision history 00018 // 00019 // $Log: LabeledCandidateList.h,v $ 00020 // Revision 1.1.1.1 2009/03/03 06:06:56 maqm 00021 // first import of DecayChain 00022 // 00023 // Revision 1.1 2006/01/11 20:28:28 cdj 00024 // massive class renaming, addition of [] for selection and unit tests 00025 // 00026 // Revision 1.1.1.1 2000/12/18 22:16:53 cdj 00027 // imported DChain 00028 // 00029 // Revision 1.14 1998/08/28 05:19:15 sjp 00030 // Updated to subclass from IndexedLabeled class 00031 // 00032 // Revision 1.13 1998/08/21 00:52:42 sjp 00033 // Modifier to no longer use typedefs 00034 // 00035 // Revision 1.12 1998/08/20 19:59:05 sjp 00036 // Modified to use DChainBoolean 00037 // 00038 // Revision 1.11 1998/08/19 20:39:50 sjp 00039 // Fixed include path for defintions 00040 // 00041 // Revision 1.10 1998/04/17 19:11:04 sjp 00042 // Modified to use latest types 00043 // 00044 // Revision 1.9 1997/08/28 06:59:53 sjp 00045 // Modified files to handle complete templating 00046 // 00047 // Revision 1.8 1997/08/26 04:14:15 sjp 00048 // Made Candidate handling objects into `CandidateClass' Templates 00049 // 00050 // Revision 1.7 1997/08/19 23:02:20 sjp 00051 // Restructured package to be independent of Rock 00052 // 00053 // Revision 1.6 1997/08/15 21:32:24 sjp 00054 // Updated to use <package>/<file>.h include structure. 00055 // Updated to use bug flags specified in Experiement.h 00056 // 00057 // Revision 1.5 1997/01/22 16:27:21 sjp 00058 // Fixed error in pre-processor labels 00059 // 00060 // Revision 1.4 1997/01/21 20:33:52 sjp 00061 // Changed CPP flags and include because of library reorganization 00062 // 00063 // Revision 1.3 1997/01/19 20:28:37 sjp 00064 // Changed LargeCount to Count 00065 // 00066 // Revision 1.2 1996/12/20 21:19:13 sjp 00067 // Extended pathnames for Include files 00068 // 00069 // Revision 1.1 1996/11/04 19:36:00 sjp 00070 // New file for new `List' module 00071 // 00072 00073 // system include files 00074 00075 // user include files 00076 #include "DecayChain/Element/conjugation.h" // enumarator 00077 #include "DecayChain/List/IndexedLabeledCandidates.h" // superclass 00078 00079 #include <vector> 00080 00081 namespace dchain { 00082 template < class CandidateClass > class MuteWholeCandidateItr ; 00083 template < class CandidateClass > class WholeCandidateItr ; 00084 template < class CandidateClass > class DPartialCandidateItr ; 00085 } 00086 00087 namespace dchain { 00088 00089 template < class CandidateClass > class LabeledCandidate ; 00090 00091 template < class CandidateClass > 00092 class LabeledCandidateList 00093 : public IndexedLabeledCandidates< CandidateClass > 00094 { 00095 // friend classses and functions 00096 00097 public: 00098 // constants, enums and typedefs 00099 typedef MuteWholeCandidateItr< CandidateClass > iterator ; 00100 typedef WholeCandidateItr< CandidateClass > const_iterator ; 00101 typedef PartialCandidateItr< CandidateClass > const_partial_iterator ; 00102 00103 typedef LabeledCandidate<CandidateClass> value_type; 00104 00105 // Constructors and destructor 00106 LabeledCandidateList() ; 00107 virtual ~LabeledCandidateList() ; 00108 00109 // member functions 00110 LabeledCandidate< CandidateClass >& operator[]( const int aIndex ) ; 00111 iterator begin() ; 00112 iterator end() ; 00113 void erase( iterator aStart, iterator aFinish ) ; 00114 00115 // const member functions 00116 const LabeledCandidate< CandidateClass >& operator[]( const int aIndex ) const ; 00117 virtual bool empty() const = 0 ; 00118 virtual bool empty( const conjugation::Label aLabel ) const = 0 ; 00119 virtual int size() const = 0 ; 00120 virtual int size( const conjugation::Label aLabel ) const = 0 ; 00121 00122 const_iterator begin() const ; 00123 const_partial_iterator begin( const conjugation::Label aLabel ) const ; 00124 const_iterator end() const ; 00125 const_partial_iterator end( const conjugation::Label aLabel ) const ; 00126 00127 // static member functions 00128 00129 protected: 00130 // protected member functions 00131 virtual LabeledCandidate< CandidateClass >& labeledCandidateClass( const int aIndex ) = 0 ; 00132 virtual void erase_elements( int aStart , 00133 int aFinish ) = 0 ; 00134 00135 // protected const member functions 00136 virtual const LabeledCandidate< CandidateClass >& labeledCandidateClass( const int aIndex ) const = 0 ; 00137 00138 private: 00139 // Constructors and destructor 00140 LabeledCandidateList( const LabeledCandidateList< CandidateClass >& ) ; // stop default 00141 00142 // assignment operator(s) 00143 const LabeledCandidateList& operator=( const LabeledCandidateList< CandidateClass >& ) ; // stop default 00144 00145 // private member functions 00146 00147 // private const member functions 00148 00149 // data members 00150 00151 // static data members 00152 00153 } ; 00154 } 00155 // inline function definitions 00156 00157 // function definitions 00158 #include "DecayChain/List/Template/LabeledCandidateList.cc" 00159 00160 #endif /* DCHAIN_LABELEDCANDIDATELIST_H */