![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtModelDefinition.h,v $ $Revision: 1.17 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #ifndef DtModelDefinition_H_ 00014 #define DtModelDefinition_H_ 00015 00016 #include <vrvCore/vrvCore.h> 00017 #include <makArchives/DtSerialize.h> 00018 #include <vrvUtil/DtKeywordMixin.h> 00019 #include <makArchives/DtModelDefinitionRecord.h> 00020 00021 #include <boost/serialization/version.hpp> 00022 #include <boost/serialization/set.hpp> 00023 #include <boost/serialization/map.hpp> 00024 #include <boost/unordered_map.hpp> 00025 #include <map> 00026 #include <string> 00027 #include <set> 00028 00029 namespace makVrv 00030 { 00031 class DtVirtualBaseClass; 00032 00037 class DT_DLL_VRVCORE DtModelDefinition : public DtKeywordMixin 00038 { 00039 public: 00040 00041 //Global public empty string. 00042 static const std::string theEmptyString; 00043 00044 typedef std::map<std::string,std::string> ParameterMap; 00045 00050 DtModelDefinition(const std::string& modelName = ""); 00051 00053 DtModelDefinition(const DtModelDefinition& copy); 00054 00056 DtModelDefinition(const std::string& modelName,const DtModelDefinition& copy); 00057 00059 ~DtModelDefinition(); 00060 00063 DtModelDefinition& operator=(const DtModelDefinition&); 00064 00066 virtual void getRecord(makArchives::DtModelDefinitionRecord& rec); 00067 00069 virtual void setFromRecord(const makArchives::DtModelDefinitionRecord& rec); 00070 00081 DT_DECLARE_serialize_FUNCTIONS 00082 DT_DECLARE_PORTABLE_serialize_FUNCTIONS 00083 00087 void clearCache(); 00088 00091 DtVirtualBaseClass* findCachedData(const std::string& name); 00092 00096 void setCachedData(const std::string& name,DtVirtualBaseClass* data); 00097 00099 inline void deleteCachedData(const std::string& name) 00100 { 00101 setCachedData(name,0); 00102 } 00103 00109 void setParameter(const std::string& parameterName, 00110 const std::string& parameterValue); 00111 00116 bool clearParameter(const std::string& parameterName); 00117 00122 const std::string& parameter(const std::string& parameterName) const; 00123 00130 const std::string* findParameter(const std::string& parameterName) const; 00131 00135 std::string* findParameter(const std::string& parameterName); 00136 00138 const ParameterMap& parameters() const; 00139 00141 const std::string& name() const; 00142 00144 const std::string& schema() const; 00145 00147 void setSchema(const std::string& schemaStr); 00148 00150 void setPersistent(bool persistent); 00151 00153 bool persistent() const; 00154 00156 bool modified() const; 00157 void setModified(bool); 00158 00160 //void addKeyWord( const std::string& keyword); 00161 00163 //void removeKeyWord( const std::string& keyword); 00164 00166 //const std::set<std::string>& keyWords() const; 00167 00171 //bool hasKeyWords(const std::set<std::string>&) const; 00172 00173 protected: 00174 00175 static std::string cleanName(const std::string& name); 00176 00177 class SerializableParameterMap : public ParameterMap 00178 { 00179 public: 00180 template <typename Archive> 00181 void serialize(Archive& ar,unsigned int version) 00182 { 00183 ar & DT_SERIALIZE_BASE(ParameterMap); 00184 } 00185 }; 00186 00187 typedef boost::unordered_map<std::string,DtVirtualBaseClass*> CacheMap; 00188 00189 template <typename Archive> 00190 void _serialize(Archive& ar,unsigned int version) 00191 { 00192 ar & DT_SERIALIZE_MEMBER(myName); 00193 00194 //If not initial version. 00195 if(version > 1) 00196 { 00197 ar& DT_SERIALIZE_MEMBER(mySchema); 00198 } 00199 ar & DT_SERIALIZE_MEMBER(myParameters); 00200 00201 if(version > 2) 00202 { 00203 ar & DT_SERIALIZE_MEMBER(myKeywords); 00204 } 00205 00206 //We're no longer modified if we save or load. 00207 myModifiedFlag = false; 00208 } 00209 00210 std::string myName; 00211 std::string mySchema; 00212 SerializableParameterMap myParameters; 00213 00215 00217 CacheMap myRuntimeCache; 00218 bool myPersistentFlag; 00219 bool myModifiedFlag; 00220 }; 00221 } 00222 00223 BOOST_CLASS_VERSION(makVrv::DtModelDefinition,3) 00224 00225 #endif