![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2007 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtConfigurationCollection.h,v $ $Revision: 1.11 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #ifndef DtConfigurationCollection_H_ 00014 #define DtConfigurationCollection_H_ 00015 00016 #include <vector> 00017 #include <boost/serialization/split_member.hpp> 00018 #include <boost/serialization/set.hpp> 00019 00020 namespace makVrv 00021 { 00023 template <typename ConfigurationType> 00024 class DtConfigurationCollection 00025 { 00026 public: 00027 typedef std::set<ConfigurationType*> Configurations; 00028 //typedef ConfigurationType ConfigurationType; 00029 typedef typename Configurations::iterator iterator; 00030 typedef typename Configurations::const_iterator const_iterator; 00031 00032 DtConfigurationCollection() : myConfigurations() 00033 { 00034 } 00035 00036 DtConfigurationCollection(const DtConfigurationCollection& copy) 00037 : myConfigurations() 00038 { 00039 addConfigurations(copy.myConfigurations); 00040 } 00041 00042 DtConfigurationCollection& operator=(const DtConfigurationCollection& copy) 00043 { 00044 if(this == ©) return *this; 00045 destroyAll(); 00046 addConfigurations(copy.myConfigurations); 00047 return *this; 00048 } 00049 00050 ~DtConfigurationCollection() 00051 { 00052 destroyAll(); 00053 } 00054 00055 00056 friend class boost::serialization::access; 00060 00061 template<class Archive> 00062 void serialize(Archive & ar, const unsigned int version) 00063 { 00064 ar & DT_SERIALIZE_MEMBER(myConfigurations); 00065 } 00066 00067 00069 virtual ConfigurationType& add(const ConfigurationType& orig) 00070 { 00071 typename Configurations::iterator curIter = myConfigurations.begin(); 00072 typename Configurations::iterator endIter = myConfigurations.end(); 00073 for(;curIter != endIter;++curIter) 00074 { 00075 if((*curIter)->name() == orig.name()) 00076 { 00077 DtTHROW_NEW(DtInvalidInput,"A configuration with that name" 00078 "already exists in the collection."); 00079 } 00080 } 00081 00082 ConfigurationType* newConfig = new ConfigurationType(orig); 00083 myConfigurations.insert( newConfig ); 00084 return *newConfig; 00085 } 00086 00100 virtual void destroyConfiguration(ConfigurationType* config) 00101 { 00102 typename Configurations::iterator iter = myConfigurations.find(config); 00103 if(iter == myConfigurations.end()) 00104 { 00105 return; 00106 } 00107 00108 myConfigurations.erase(iter); 00109 delete config; 00110 } 00111 00112 size_t size() const { return myConfigurations.size(); } 00113 00114 iterator begin() { return myConfigurations.begin(); } 00115 const_iterator begin() const { return myConfigurations.begin(); } 00116 00117 iterator end() { return myConfigurations.end(); } 00118 const_iterator end() const { return myConfigurations.end(); } 00119 00120 00122 const Configurations& configurations() const 00123 { 00124 return myConfigurations; 00125 } 00126 00128 void addConfigurations(const Configurations& configs) 00129 { 00130 typename Configurations::const_iterator curIter = configs.begin(); 00131 typename Configurations::const_iterator endIter = configs.end(); 00132 for(;curIter != endIter;++curIter) 00133 { 00134 add(**curIter); 00135 } 00136 } 00137 00139 void destroyAll() 00140 { 00141 typename Configurations::iterator curIter = myConfigurations.begin(); 00142 typename Configurations::iterator endIter = myConfigurations.end(); 00143 for(;curIter != endIter;++curIter) 00144 { 00145 delete *curIter; 00146 } 00147 myConfigurations.clear(); 00148 } 00149 00152 virtual ConfigurationType* findConfiguration(const std::string& name) 00153 { 00154 typename Configurations::iterator curIter = myConfigurations.begin(); 00155 typename Configurations::iterator endIter = myConfigurations.end(); 00156 for(;curIter != endIter;++curIter) 00157 { 00158 if((*curIter)->name() == name) 00159 { 00160 return (*curIter); 00161 } 00162 } 00163 return 0; 00164 } 00165 00168 virtual const ConfigurationType* findConfiguration(const std::string& name) const 00169 { 00170 typename Configurations::const_iterator curIter = myConfigurations.begin(); 00171 typename Configurations::const_iterator endIter = myConfigurations.end(); 00172 for(;curIter != endIter;++curIter) 00173 { 00174 if((*curIter)->name() == name) 00175 { 00176 return (*curIter); 00177 } 00178 } 00179 return 0; 00180 } 00181 00182 protected: 00183 00184 Configurations myConfigurations; 00185 00186 }; 00187 } 00188 00189 #endif 00190