Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/IO/vtkXMLDataParser.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkXMLDataParser.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00032 #ifndef __vtkXMLDataParser_h 00033 #define __vtkXMLDataParser_h 00034 00035 #include "vtkXMLParser.h" 00036 00037 class vtkXMLDataElement; 00038 class vtkInputStream; 00039 class vtkDataCompressor; 00040 00041 class VTK_IO_EXPORT vtkXMLDataParser : public vtkXMLParser 00042 { 00043 public: 00044 vtkTypeRevisionMacro(vtkXMLDataParser,vtkXMLParser); 00045 void PrintSelf(ostream& os, vtkIndent indent); 00046 static vtkXMLDataParser* New(); 00047 00048 //BTX 00050 00051 enum { BigEndian, LittleEndian }; 00052 //ETX 00054 00056 vtkXMLDataElement* GetRootElement(); 00057 00059 00061 unsigned long ReadInlineData(vtkXMLDataElement* element, int isAscii, 00062 void* buffer, int startWord, int numWords, 00063 int wordType); 00064 unsigned long ReadInlineData(vtkXMLDataElement* element, int isAscii, 00065 char* buffer, int startWord, int numWords) 00066 { return this->ReadInlineData(element, isAscii, buffer, startWord, 00067 numWords, VTK_CHAR); } 00069 00071 00073 unsigned long ReadAppendedData(unsigned long offset, void* buffer, 00074 int startWord, int numWords, int wordType); 00075 unsigned long ReadAppendedData(unsigned long offset, char* buffer, 00076 int startWord, int numWords) 00077 { return this->ReadAppendedData(offset, buffer, startWord, numWords, 00078 VTK_CHAR); } 00080 00082 00084 unsigned long ReadAsciiData(void* buffer, int startWord, int numWords, 00085 int wordType); 00087 00089 00091 unsigned long ReadBinaryData(void* buffer, int startWord, int maxWords, 00092 int wordType); 00094 00096 00098 virtual void SetCompressor(vtkDataCompressor*); 00099 vtkGetObjectMacro(Compressor, vtkDataCompressor); 00101 00103 unsigned long GetWordTypeSize(int wordType); 00104 00107 virtual int Parse(); 00108 00109 protected: 00110 vtkXMLDataParser(); 00111 ~vtkXMLDataParser(); 00112 00113 // This parser does not support parsing from a string. 00114 virtual int Parse(const char*); 00115 virtual int Parse(const char*, unsigned int); 00116 00117 // Implement parsing methods. 00118 void StartElement(const char* name, const char** atts); 00119 void EndElement(const char*); 00120 int ParsingComplete(); 00121 void ClearStreamEOF(); 00122 int CheckPrimaryAttributes(); 00123 void FindAppendedDataPosition(); 00124 unsigned long FindInlineDataPosition(unsigned long start); 00125 int ParseBuffer(const char* buffer, unsigned int count); 00126 00127 void AddElement(vtkXMLDataElement* element); 00128 void PushOpenElement(vtkXMLDataElement* element); 00129 vtkXMLDataElement* PopOpenElement(); 00130 void PerformByteSwap(void* data, int numWords, int wordSize); 00131 00132 // Data reading methods. 00133 void ReadCompressionHeader(); 00134 unsigned int FindBlockSize(unsigned int block); 00135 int ReadBlock(unsigned int block, unsigned char* buffer); 00136 unsigned char* ReadBlock(unsigned int block); 00137 unsigned long ReadUncompressedData(unsigned char* data, unsigned long offset, 00138 unsigned long length); 00139 unsigned long ReadCompressedData(unsigned char* data, unsigned long offset, 00140 unsigned long length); 00141 00142 // Ascii data reading methods. 00143 int ParseAsciiData(int wordType); 00144 void FreeAsciiBuffer(); 00145 00146 // The root XML element. 00147 vtkXMLDataElement* RootElement; 00148 00149 // The stack of elements currently being parsed. 00150 vtkXMLDataElement** OpenElements; 00151 unsigned int NumberOfOpenElements; 00152 unsigned int OpenElementsSize; 00153 00154 // The position of the appended data section, if found. 00155 unsigned long AppendedDataPosition; 00156 00157 // How much of the string "<AppendedData" has been matched in input. 00158 int AppendedDataMatched; 00159 00160 // The byte order of the binary input. 00161 int ByteOrder; 00162 00163 // The input stream used to read data. Set by ReadAppendedData and 00164 // ReadInlineData methods. 00165 vtkInputStream* DataStream; 00166 00167 // The input stream used to read inline data. May transparently 00168 // decode the data. 00169 vtkInputStream* InlineDataStream; 00170 00171 // The stream to use for appended data. 00172 vtkInputStream* AppendedDataStream; 00173 00174 // Decompression data. 00175 vtkDataCompressor* Compressor; 00176 unsigned int NumberOfBlocks; 00177 unsigned int BlockUncompressedSize; 00178 unsigned int PartialLastBlockUncompressedSize; 00179 unsigned int* BlockCompressedSizes; 00180 unsigned long* BlockStartOffsets; 00181 00182 // Ascii data parsing. 00183 unsigned char* AsciiDataBuffer; 00184 int AsciiDataBufferLength; 00185 int AsciiDataWordType; 00186 unsigned long AsciiDataPosition; 00187 00188 private: 00189 vtkXMLDataParser(const vtkXMLDataParser&); // Not implemented. 00190 void operator=(const vtkXMLDataParser&); // Not implemented. 00191 }; 00192 00193 #endif