![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2007 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: archiver.h,v $ $Revision: 1.11 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DTARCHIVER_H_ 00013 #define DTARCHIVER_H_ 00014 00015 #include "archiver/archiverDefines.h" 00016 #include "archiver/archivableObject.h" 00017 00018 #include "ngutil/dtqlist.h" 00019 #include "archiver/archiverDefines.h" 00020 #include "archiver/archivableDictionaryObject.h" 00021 00022 #include <QtCore/QObject> 00023 #include <QtCore/QRect> 00024 #include <QtGui/QColor> 00025 #include <QtCore/QString> 00026 #include <QtCore/QTextStream> 00027 #include <QtCore/QLinkedList> 00028 #include <QtCore/QList> 00029 #include <QtCore/QHash> 00030 00031 class DtArchiveObject; 00032 class DtArchivableObject; 00033 00034 class QPen; 00035 class QString; 00036 class QPoint; 00037 class QStringList; 00038 class QColor; 00039 class QPointF; 00040 class QTextStream; 00041 00046 00047 class DtArchivableCreatorInfo; 00048 00049 typedef void (*DtArchiverFunction)(QTextStream& ts, DtArchiveObject* obj); 00050 00051 class DT_DLL_archiver DtArchiver : public QObject 00052 { 00053 public: 00054 DtArchiver(QString name); 00055 virtual ~DtArchiver(); 00056 00058 public: 00059 virtual void add(QString value, int* toWrite); 00060 virtual void add(QString value, short* toWrite); 00061 virtual void add(QString value, DtArchivableObject* toWrite); 00062 virtual void add(QString value, QPen* toWrite); 00063 virtual void add(QString value, QColor* toWrite); 00064 virtual void add(QString value, double* toWrite); 00065 virtual void add(QString value, bool* toWrite); 00066 virtual void add(QString value, float* toWrite); 00067 virtual void add(QString value, QString* toWrite); 00068 virtual void add(QString value, char* toWrite); 00069 virtual void add(QString value, QPoint* toWrite); 00070 virtual void add(QString value, QPointF* toWrite); 00071 00072 virtual void add(QString value, QRect* toWrite); 00073 00074 virtual void add(QString value, QStringList* toWrite); 00075 00076 virtual void add(QString value, void* toWrite, 00077 DtArchiverFunction write, DtArchiverFunction read, bool writeLevel = false); 00078 00080 template <typename Key, typename Value> void add(QString value, 00081 QHash<Key, Value>* toWrite); 00082 00083 template <typename T> void add(QString value, QList<T>* toWrite); 00084 template <typename T> void add(QString value, QLinkedList<T>* toWrite); 00085 template <typename T> void add(QString value, QVector<T>* toWrite); 00086 00088 virtual void remove(void* toWrite); 00089 00090 virtual void setLevel(int iLevel); 00091 virtual int level() const; 00092 00093 virtual void setName(QString name); 00094 virtual QString name() const; 00095 00096 static void addCreator(const QString& name, DtArchivableObjectCreator fnc); 00097 static bool hasCreatorFor(DtArchivableObject* obj); 00098 static DtArchivableCreatorInfo* creatorFor(const QString& name); 00099 static DtArchivableObject* createObject(const QString& name); 00100 00103 static void cleanupCreators(); 00104 00105 public: 00107 virtual void read(QTextStream& ts); 00108 virtual void write(QTextStream& ts); 00109 virtual void writeObject(QTextStream& ts, int level, DtArchiveObject* obj); 00110 virtual void readObject(DtArchiveObject* obj); 00111 00112 protected: 00113 virtual void writeLevel(QTextStream& ts, int iLevel); 00114 00120 virtual void parseBlock(QTextStream& ts); 00121 00123 virtual QString readBlock(QTextStream& ts); 00124 00126 virtual QString readNamedBlock(QString& name, QTextStream& ts); 00127 00130 virtual void buildArchiveDictionary(QTextStream& block); 00131 00132 protected: 00133 DtPtrQList<DtArchiveObject*> myArchivableObjects; 00134 QHash<QString, QString> myArchiveBlocks; 00135 static QHash<QString, DtArchivableCreatorInfo>* myObjectCreators; 00136 00137 int myLevel; 00138 QString myName; 00139 }; 00140 00141 class DT_DLL_archiver DtArchivableCreatorInfo 00142 { 00143 public: 00144 DtArchivableCreatorInfo(DtArchivableObjectCreator fcn); 00145 DtArchivableCreatorInfo(const DtArchivableCreatorInfo& orig) : myCreator(orig.myCreator) {}; 00146 00147 virtual DtArchivableObjectCreator creator(); 00148 virtual void setCreator(DtArchivableObjectCreator fcn); 00149 00150 protected: 00151 DtArchivableObjectCreator myCreator; 00152 }; 00153 00154 DT_DLL_archiver QTextStream& operator<<(QTextStream& ts, DtArchiver& archive); 00155 DT_DLL_archiver QTextStream& operator>>(QTextStream& ts, DtArchiver& archive); 00156 00157 00158 00159 00160 00161 00162 00165 00166 class DT_DLL_archiver DtArchiveObject 00167 { 00168 public: 00169 DtArchiveObject(QString name, void* toArchive, 00170 DtArchiverFunction archiveWriter, DtArchiverFunction archiveReader); 00171 00172 DtArchiveObject(const DtArchiveObject& orig); 00173 00174 virtual ~DtArchiveObject(); 00175 00176 public: 00178 virtual void write(QTextStream& ts); 00179 virtual void read(QTextStream& ts); 00180 00181 virtual QString name() const; 00182 virtual void* toWrite(); 00183 00184 virtual void setLevel(int i); 00185 virtual int level() const; 00186 00187 virtual void setWriteLevel(bool b); 00188 virtual bool writeLevel() const; 00189 00190 public: 00192 00193 static void writeInt(QTextStream& ts, DtArchiveObject* obj); 00194 static void readInt(QTextStream& ts, DtArchiveObject* obj); 00195 00196 static void writeShort(QTextStream& ts, DtArchiveObject* obj); 00197 static void readShort(QTextStream& ts, DtArchiveObject* obj); 00198 00199 static void writeRect(QTextStream& ts, DtArchiveObject* obj); 00200 static void readRect(QTextStream& ts, DtArchiveObject* obj); 00201 00202 static void writeArchivableObject(QTextStream& ts, DtArchiveObject* obj); 00203 static void readArchivableObject(QTextStream& ts, DtArchiveObject* obj); 00204 00205 static void writePen(QTextStream& ts, DtArchiveObject* obj); 00206 static void readPen(QTextStream& ts, DtArchiveObject* obj); 00207 00208 static void writeColor(QTextStream& ts, DtArchiveObject* obj); 00209 static void readColor(QTextStream& ts, DtArchiveObject* obj); 00210 00211 static void writeDouble(QTextStream& ts, DtArchiveObject* obj); 00212 static void readDouble(QTextStream& ts, DtArchiveObject* obj); 00213 00214 static void writeBool(QTextStream& ts, DtArchiveObject* obj); 00215 static void readBool(QTextStream& ts, DtArchiveObject* obj); 00216 00217 static void writeFloat(QTextStream& ts, DtArchiveObject* obj); 00218 static void readFloat(QTextStream& ts, DtArchiveObject* obj); 00219 00220 static void writeString(QTextStream& ts, DtArchiveObject* obj); 00221 static void readString(QTextStream& ts, DtArchiveObject* obj); 00222 00223 static void writeCharStar(QTextStream& ts, DtArchiveObject* obj); 00224 static void readCharStar(QTextStream& ts, DtArchiveObject* obj); 00225 00226 static void writePoint(QTextStream& ts, DtArchiveObject* obj); 00227 static void readPoint(QTextStream& ts, DtArchiveObject* obj); 00228 00229 static void writePointF(QTextStream& ts, DtArchiveObject* obj); 00230 static void readPointF(QTextStream& ts, DtArchiveObject* obj); 00231 00232 template <typename T> static void writeCollection( 00233 QTextStream& ts, DtArchiveObject* obj); 00234 00235 template <typename T> static void readCollection( 00236 QTextStream& ts, DtArchiveObject* obj); 00237 00244 template <typename T> static void writeList( 00245 QTextStream& ts, DtArchiveObject* obj); 00246 00247 template <typename T> static void readList(QTextStream& ts, 00248 DtArchiveObject* obj); 00249 00250 template <typename T> static void writeVectorList( 00251 QTextStream& ts, DtArchiveObject* obj); 00252 00253 template <typename T> static void readVectorList(QTextStream& ts, 00254 DtArchiveObject* obj); 00255 00256 template <typename Key, typename Value> static void writeDictionary( 00257 QTextStream& ts, DtArchiveObject* obj); 00258 00259 template <typename Key, typename Value> static void readDictionary( 00260 QTextStream& ts, DtArchiveObject* obj); 00261 00262 static void writeStringList(QTextStream& ts, DtArchiveObject* obj); 00263 static void readStringList(QTextStream& ts, DtArchiveObject* obj); 00264 00265 protected: 00266 virtual void writeLevel(QTextStream& ts, int iLevel); 00267 00268 protected: 00269 DtArchiverFunction myWriter; 00270 DtArchiverFunction myReader; 00271 void* myValue; 00272 QString myName; 00273 int myLevel; 00274 bool myWriteLevel; 00275 }; 00276 00277 QTextStream& operator<<(QTextStream& ts, DtArchiveObject& obj); 00278 QTextStream& operator>>(QTextStream& ts, DtArchiveObject& obj); 00279 00280 #include "archiver/archiver.inl" 00281 00282 #endif 00283