00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef __MMDB_XML__
00042 #define __MMDB_XML__
00043
00044 #include "mmdb_mmcif_.h"
00045
00046 namespace mmdb {
00047
00048 namespace xml {
00049
00050
00051
00052
00053 enum XML_RC {
00054 XMLRC_Ok = 0,
00055 XMLRC_NoFile = 1,
00056 XMLRC_CantOpenFile = 2,
00057 XMLRC_NoTag = 3,
00058 XMLRC_BrokenTag = 4,
00059 XMLRC_UnclosedTag = 5,
00060 XMLRC_RFormatError = 6,
00061 XMLRC_IFormatError = 7,
00062 XMLRC_OFormatError = 8
00063 };
00064
00065 DefineClass(XMLObject);
00066 DefineStreamFunctions(XMLObject);
00067
00068 class XMLObject : public io::Stream {
00069
00070 public :
00071
00072 XMLObject ();
00073 XMLObject ( cpstr Tag );
00074 XMLObject ( cpstr Tag, cpstr Data );
00075 XMLObject ( cpstr Tag, realtype V, int length=11 );
00076 XMLObject ( cpstr Tag, int iV, int length=0 );
00077 XMLObject ( cpstr Tag, bool bV );
00078 XMLObject ( cpstr Tag, PXMLObject XMLObject );
00079 XMLObject ( io::RPStream Object );
00080 ~XMLObject();
00081
00082 void SetTag ( cpstr Tag );
00083 void AddAttribute ( cpstr name, cpstr value );
00084 void AddAttribute ( cpstr name, const int iV );
00085 void AddAttribute ( cpstr name, const bool bV );
00086 void SetData ( cpstr Data );
00087 void AddData ( cpstr Data );
00088 void SetData ( const realtype V, const int length=11 );
00089 void SetData ( const int iV, const int length=0 );
00090 void SetData ( const bool bV );
00091
00092 int AddMMCIFCategory ( mmcif::PCategory mmCIFCat );
00093 int AddMMCIFStruct ( mmcif::PStruct mmCIFStruct );
00094 int AddMMCIFLoop ( mmcif::PLoop mmCIFLoop );
00095 int AddMMCIFData ( mmcif::PData mmCIFData );
00096
00097 inline pstr GetTag() { return objTag; }
00098
00099
00100
00101
00102
00103
00104
00105
00106 pstr GetData ( cpstr Tag=NULL, int objNo=1 );
00107 XML_RC GetData ( pstr & Data, cpstr Tag=NULL, int objNo=1 );
00108 XML_RC GetData ( realtype & V, cpstr Tag=NULL, int objNo=1 );
00109 XML_RC GetData ( int & iV, cpstr Tag=NULL, int objNo=1 );
00110 XML_RC GetData ( bool & bV, cpstr Tag=NULL, int objNo=1 );
00111
00112 PXMLObject GetObject ( cpstr Tag, int objNo=1 );
00113 PXMLObject GetFirstObject();
00114 PXMLObject GetLastObject ();
00115 inline int GetNumberOfObjects() { return nObjects; }
00116 PXMLObject GetObject ( int objectNo );
00117
00118 inline PXMLObject GetParent() { return parent; }
00119
00120 void AddObject ( PXMLObject XMLObject , int lenInc=10 );
00121 XML_RC WriteObject ( cpstr FName, int pos=0, int ident=2 );
00122 void WriteObject ( io::RFile f, int pos=0, int ident=2 );
00123 XML_RC ReadObject ( cpstr FName );
00124 XML_RC ReadObject ( io::RFile f, pstr S, int & pos, int slen );
00125
00126 virtual void Copy ( PXMLObject xmlObject );
00127
00128 void write ( io::RFile f );
00129 void read ( io::RFile f );
00130
00131 protected:
00132 PXMLObject parent;
00133 pstr objTag;
00134 pstr objData;
00135 int nObjects,nAlloc;
00136 PPXMLObject object;
00137 int nAttributes,nAttrAlloc;
00138 psvector attr_name,attr_value;
00139
00140 void InitXMLObject();
00141 virtual void FreeMemory ();
00142
00143 inline void SetParent ( PXMLObject p ) { parent = p; }
00144
00145 };
00146
00147
00148 extern PXMLObject mmCIF2XML ( mmcif::PData mmCIFData,
00149 int * rc=NULL );
00150 extern PXMLObject mmCIF2XML ( cpstr XMLName, mmcif::PFile mmCIFFile,
00151 int * rc=NULL );
00152
00153 }
00154
00155 }
00156
00157 #endif
00158