VR-Forces 4.0.4 Class Documentation
include/vrvUtil/DtConfigurationCollection.h
Go to the documentation of this file.
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 == &copy) 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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)