Orb/Doxygen/src/marshal.h
changeset 0 42188c7ea2d9
equal deleted inserted replaced
-1:000000000000 0:42188c7ea2d9
       
     1 #ifndef MARSHAL_H
       
     2 #define MARSHAL_H
       
     3 
       
     4 #include <qlist.h>
       
     5 #include <qfile.h>
       
     6 #include "sortdict.h"
       
     7 #include "store.h"
       
     8 
       
     9 class ArgumentList;
       
    10 struct BaseInfo;
       
    11 struct Grouping;
       
    12 struct SectionInfo;
       
    13 struct ListItemInfo;
       
    14 class QCString;
       
    15 class QGString;
       
    16 class SectionDict;
       
    17 class MemberSDict;
       
    18 class GroupList;
       
    19 struct BodyInfo;
       
    20 struct DocInfo;
       
    21 struct BriefInfo;
       
    22 class MemberList;
       
    23 class ExampleSDict;
       
    24 class Entry;
       
    25 
       
    26 #define NULL_LIST 0xffffffff
       
    27 
       
    28 class FileStorage : public QFile, public StorageIntf
       
    29 {
       
    30   public:
       
    31     FileStorage() : QFile() {}
       
    32     FileStorage( const QString &name) : QFile(name) {}
       
    33     int read(char *buf,uint size)        { return QFile::readBlock(buf,size); }
       
    34     int write(const char *buf,uint size) { return QFile::writeBlock(buf,size); }
       
    35 };
       
    36 
       
    37 class StreamStorage : public StorageIntf
       
    38 {
       
    39   public:
       
    40     StreamStorage()
       
    41     {
       
    42       m_data=0;
       
    43       m_offset=0;
       
    44       m_len=0;
       
    45     }
       
    46    ~StreamStorage()
       
    47     {
       
    48       delete m_data;
       
    49     }
       
    50     StreamStorage(char *data,uint len)
       
    51     {
       
    52       m_data=data;
       
    53       m_offset=0;
       
    54       m_len=len;
       
    55     }
       
    56     int read(char *buf,uint size)
       
    57     {
       
    58       int bytesLeft = QMIN((int)size,m_len-m_offset);
       
    59       if (bytesLeft>0) memcpy(buf,m_data,bytesLeft);
       
    60       m_offset+=bytesLeft;
       
    61       return bytesLeft;
       
    62     }
       
    63     int write(const char *buf,uint size)
       
    64     {
       
    65       m_data=(char *)realloc(m_data,m_offset+size);
       
    66       memcpy(m_data+m_offset,buf,size);
       
    67       m_offset+=size;
       
    68       m_len+=size;
       
    69       return size;
       
    70     }
       
    71     void rewind() { m_offset=0; }
       
    72     char *data() const { return m_data; }
       
    73     int size() { return m_len; }
       
    74   private:
       
    75     char *m_data;
       
    76     int m_offset;
       
    77     int m_len;
       
    78 };
       
    79 
       
    80 //----- marshaling function: datatype -> byte stream --------------------
       
    81 
       
    82 void marshalInt(StorageIntf *s,int v);
       
    83 void marshalUInt(StorageIntf *s,uint v);
       
    84 void marshalBool(StorageIntf *s,bool b);
       
    85 void marshalQCString(StorageIntf *s,const QCString &str);
       
    86 void marshalQGString(StorageIntf *s,const QGString &str);
       
    87 void marshalArgumentList(StorageIntf *s,ArgumentList *argList);
       
    88 void marshalArgumentLists(StorageIntf *s,QList<ArgumentList> *argLists);
       
    89 void marshalBaseInfoList(StorageIntf *s, QList<BaseInfo> *baseList);
       
    90 void marshalGroupingList(StorageIntf *s, QList<Grouping> *groups);
       
    91 void marshalSectionInfoList(StorageIntf *s, QList<SectionInfo> *anchors);
       
    92 void marshalItemInfoList(StorageIntf *s, QList<ListItemInfo> *sli);
       
    93 void marshalObjPointer(StorageIntf *s,void *obj);
       
    94 void marshalSectionDict(StorageIntf *s,SectionDict *sections);
       
    95 void marshalMemberSDict(StorageIntf *s,MemberSDict *memberSDict);
       
    96 void marshalDocInfo(StorageIntf *s,DocInfo *docInfo);
       
    97 void marshalBriefInfo(StorageIntf *s,BriefInfo *briefInfo);
       
    98 void marshalBodyInfo(StorageIntf *s,BodyInfo *bodyInfo);
       
    99 void marshalGroupList(StorageIntf *s,GroupList *groupList);
       
   100 void marshalMemberList(StorageIntf *s,MemberList *ml);
       
   101 void marshalExampleSDict(StorageIntf *s,ExampleSDict *ed);
       
   102 void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls);
       
   103 void marshalEntry(StorageIntf *s,Entry *e);
       
   104 void marshalEntryTree(StorageIntf *s,Entry *e);
       
   105 
       
   106 //----- unmarshaling function: byte stream -> datatype ------------------
       
   107 
       
   108 int                  unmarshalInt(StorageIntf *s);
       
   109 uint                 unmarshalUInt(StorageIntf *s);
       
   110 bool                 unmarshalBool(StorageIntf *s);
       
   111 QCString             unmarshalQCString(StorageIntf *s);
       
   112 QGString             unmarshalQGString(StorageIntf *s);
       
   113 ArgumentList *       unmarshalArgumentList(StorageIntf *s);
       
   114 QList<ArgumentList> *unmarshalArgumentLists(StorageIntf *s);
       
   115 QList<BaseInfo> *    unmarshalBaseInfoList(StorageIntf *s);
       
   116 QList<Grouping> *    unmarshalGroupingList(StorageIntf *s);
       
   117 QList<SectionInfo> * unmarshalSectionInfoList(StorageIntf *s);
       
   118 QList<ListItemInfo> *unmarshalItemInfoList(StorageIntf *s);
       
   119 void *               unmarshalObjPointer(StorageIntf *s);
       
   120 SectionDict *        unmarshalSectionDict(StorageIntf *s);
       
   121 MemberSDict *        unmarshalMemberSDict(StorageIntf *s);
       
   122 DocInfo *            unmarshalDocInfo(StorageIntf *s);
       
   123 BriefInfo *          unmarshalBriefInfo(StorageIntf *s);
       
   124 BodyInfo *           unmarshalBodyInfo(StorageIntf *s);
       
   125 GroupList *          unmarshalGroupList(StorageIntf *s);
       
   126 MemberList *         unmarshalMemberList(StorageIntf *s);
       
   127 ExampleSDict *       unmarshalExampleSDict(StorageIntf *s);
       
   128 SDict<MemberList> *  unmarshalMemberLists(StorageIntf *s);
       
   129 Entry *              unmarshalEntry(StorageIntf *s);
       
   130 Entry *              unmarshalEntryTree(StorageIntf *s);
       
   131 
       
   132 #endif