00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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
00050
00051
enum { BigEndian, LittleEndian };
00052
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
00114
virtual int Parse(
const char*);
00115
virtual int Parse(
const char*,
unsigned int);
00116
00117
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
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
00143
int ParseAsciiData(
int wordType);
00144
void FreeAsciiBuffer();
00145
00146
00147 vtkXMLDataElement* RootElement;
00148
00149
00150 vtkXMLDataElement** OpenElements;
00151 unsigned int NumberOfOpenElements;
00152 unsigned int OpenElementsSize;
00153
00154
00155 unsigned long AppendedDataPosition;
00156
00157
00158 int AppendedDataMatched;
00159
00160
00161 int ByteOrder;
00162
00163
00164
00165 vtkInputStream* DataStream;
00166
00167
00168
00169 vtkInputStream* InlineDataStream;
00170
00171
00172 vtkInputStream* AppendedDataStream;
00173
00174
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
00183 unsigned char* AsciiDataBuffer;
00184 int AsciiDataBufferLength;
00185 int AsciiDataWordType;
00186 unsigned long AsciiDataPosition;
00187
00188
private:
00189 vtkXMLDataParser(
const vtkXMLDataParser&);
00190
void operator=(
const vtkXMLDataParser&);
00191 };
00192
00193
#endif