![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2007 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: readerWriterFactory.h,v $ $Revision: 1.5 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #ifndef readerWriterFactory_h 00015 #define readerWriterFactory_h 00016 00017 #include "vrfutil/vrfutilDefines.h" 00018 #include <map> 00019 #include <vlutil/vlString.h> 00020 00021 class DtReaderWriterRegistry; 00022 class DtReaderWriter; 00023 00035 class DT_DLL_vrfutil DtReaderWriterFactory 00036 { 00037 public: 00038 typedef DtReaderWriter* (*DtRWCreatorFcn)(const DtString& name, DtReaderWriterRegistry* parentRegistry); 00039 typedef void (*DtRWCopyFcn)(const DtReaderWriter* source, DtReaderWriter* dest); 00040 00041 struct DtRwFunctions 00042 { 00043 DtRWCreatorFcn creatorFcn; 00044 DtRWCopyFcn copyFcn; 00045 }; 00046 00047 typedef std::map<DtString, DtRwFunctions> DtRwFunctionMap; 00048 00049 public: 00050 DtReaderWriterFactory(); 00051 00055 virtual DtReaderWriter* createItem(const DtString& type, const DtString& name, 00056 DtReaderWriterRegistry* parentRegistry) const; 00057 00062 virtual bool copyReaderWriter(const DtReaderWriter* sourceRw, DtReaderWriter* destRw) const; 00063 00069 virtual DtReaderWriter* cloneReaderWriter(const DtString& name, 00070 const DtReaderWriter* sourceRw, DtReaderWriterRegistry* parentRegistry) const; 00071 00074 void addDefaultRwCreators(); 00075 00080 template<typename T_RWType> 00081 void registerType(const DtString& rwTypeString); 00082 00083 const DtRwFunctionMap& functionMap() const; 00084 00086 bool typeRegistered(const DtString& rwTypeString) const; 00087 00088 protected: 00091 template <typename T_RWType> 00092 static DtReaderWriter* createRWType(const DtString& name, DtReaderWriterRegistry* parentRegistry); 00093 00095 template <typename T_RWType> 00096 static void copyRwType(const DtReaderWriter* sourceRw, DtReaderWriter* destRw); 00097 00098 protected: 00099 DtRwFunctionMap myRwFunctionMap; 00100 }; 00101 00102 #define readerWriterFactory_inl_ 00103 #include "vrfutil/readerWriterFactory.inl" 00104 #undef readerWriterFactory_inl_ 00105 00106 #endif