VR-Forces 4.0.4 Class Documentation
include/archiver/archiver.h
Go to the documentation of this file.
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 

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)