VTK
vtkXMLDataParser.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkXMLDataParser.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
31 #ifndef vtkXMLDataParser_h
32 #define vtkXMLDataParser_h
33 
34 #include "vtkIOXMLParserModule.h" // For export macro
35 #include "vtkXMLParser.h"
36 #include "vtkXMLDataElement.h"//For inline definition.
37 
38 class vtkInputStream;
39 class vtkDataCompressor;
40 
42 {
43 public:
45  void PrintSelf(ostream& os, vtkIndent indent);
46  static vtkXMLDataParser* New();
47 
50 
51  //BTX
53  enum { BigEndian, LittleEndian };
54 
56 
58  size_t ReadInlineData(vtkXMLDataElement* element, int isAscii,
59  void* buffer, vtkTypeUInt64 startWord,
60  size_t numWords, int wordType);
61  size_t ReadInlineData(vtkXMLDataElement* element, int isAscii,
62  char* buffer, vtkTypeUInt64 startWord,
63  size_t numWords)
64  { return this->ReadInlineData(element, isAscii, buffer, startWord,
65  numWords, VTK_CHAR); }
67 
69 
71  size_t ReadAppendedData(vtkTypeInt64 offset, void* buffer,
72  vtkTypeUInt64 startWord,
73  size_t numWords, int wordType);
74  size_t ReadAppendedData(vtkTypeInt64 offset, char* buffer,
75  vtkTypeUInt64 startWord,
76  size_t numWords)
77  { return this->ReadAppendedData(offset, buffer, startWord, numWords,
78  VTK_CHAR); }
80 
82 
84  size_t ReadAsciiData(void* buffer, vtkTypeUInt64 startWord,
85  size_t numWords, int wordType);
87 
89 
91  size_t ReadBinaryData(void* buffer, vtkTypeUInt64 startWord,
92  size_t maxWords, int wordType);
93  //ETX
95 
97 
102 
104  size_t GetWordTypeSize(int wordType);
105 
108  virtual int Parse();
109 
111 
113  vtkGetMacro(Abort, int);
114  vtkSetMacro(Abort, int);
116 
118 
120  vtkGetMacro(Progress, float);
121  vtkSetMacro(Progress, float);
123 
125 
133  vtkGetMacro(AttributesEncoding, int);
135 
140  virtual void CharacterDataHandler(const char* data, int length);
141 
143 
145  vtkTypeInt64 GetAppendedDataPosition()
146  {
147  return this->AppendedDataPosition;
148  }
150 
151 protected:
154 
155  // This parser does not support parsing from a string.
156  virtual int Parse(const char*);
157  virtual int Parse(const char*, unsigned int);
158 
159  // Implement parsing methods.
160  virtual void StartElement(const char* name, const char** atts);
161  virtual void EndElement(const char*);
162 
166  int ParseBuffer(const char* buffer, unsigned int count);
167 
172  void PerformByteSwap(void* data, size_t numWords, size_t wordSize);
173 
174  // Data reading methods.
176  size_t FindBlockSize(vtkTypeUInt64 block);
177  int ReadBlock(vtkTypeUInt64 block, unsigned char* buffer);
178  unsigned char* ReadBlock(vtkTypeUInt64 block);
179  size_t ReadUncompressedData(unsigned char* data,
180  vtkTypeUInt64 startWord,
181  size_t numWords,
182  size_t wordSize);
183  size_t ReadCompressedData(unsigned char* data,
184  vtkTypeUInt64 startWord,
185  size_t numWords,
186  size_t wordSize);
187 
188  // Go to the start of the inline data
190 
191  // Ascii data reading methods.
192  int ParseAsciiData(int wordType);
194 
195  // Progress update methods.
197 
198  // The root XML element.
200 
201  // The stack of elements currently being parsed.
203  unsigned int NumberOfOpenElements;
204  unsigned int OpenElementsSize;
205 
206  // The position of the appended data section, if found.
207  vtkTypeInt64 AppendedDataPosition;
208 
209  // How much of the string "<AppendedData" has been matched in input.
211 
212  // The byte order of the binary input.
214 
215  // The word type of binary input headers.
217 
218  // The input stream used to read data. Set by ReadAppendedData and
219  // ReadInlineData methods.
221 
222  // The input stream used to read inline data. May transparently
223  // decode the data.
225 
226  // The stream to use for appended data.
228 
229  // Decompression data.
235  vtkTypeInt64* BlockStartOffsets;
236 
237  // Ascii data parsing.
238  unsigned char* AsciiDataBuffer;
241  vtkTypeInt64 AsciiDataPosition;
242 
243  // Progress during reading of data.
244  float Progress;
245 
246  // Abort flag checked during reading of data.
247  int Abort;
248 
250 
251 private:
252  vtkXMLDataParser(const vtkXMLDataParser&); // Not implemented.
253  void operator=(const vtkXMLDataParser&); // Not implemented.
254 };
255 
256 //----------------------------------------------------------------------------
257 inline
259 {
260  const unsigned int eid=this->NumberOfOpenElements-1;
262 }
263 
264 
265 #endif
vtkXMLDataParser::Parse
virtual int Parse()
vtkgl::data
GLsizei GLsizei GLenum GLenum const GLvoid * data
Definition: vtkgl.h:11339
vtkXMLDataParser::PushOpenElement
void PushOpenElement(vtkXMLDataElement *element)
vtkGetObjectMacro
#define vtkGetObjectMacro(name, type)
Definition: vtkSetGet.h:232
vtkXMLDataParser::CheckPrimaryAttributes
int CheckPrimaryAttributes()
vtkXMLParser
Parse XML to handle element tags and attributes.
Definition: vtkXMLParser.h:42
vtkgl::count
GLuint GLuint GLsizei count
Definition: vtkgl.h:11315
vtkXMLDataParser::ReadCompressedData
size_t ReadCompressedData(unsigned char *data, vtkTypeUInt64 startWord, size_t numWords, size_t wordSize)
vtkXMLDataParser::AppendedDataPosition
vtkTypeInt64 AppendedDataPosition
Definition: vtkXMLDataParser.h:207
vtkXMLDataParser::Parse
virtual int Parse(const char *, unsigned int)
vtkXMLDataParser::DataStream
vtkInputStream * DataStream
Definition: vtkXMLDataParser.h:220
VTK_ENCODING_NONE
#define VTK_ENCODING_NONE
Definition: vtkSystemIncludes.h:137
vtkXMLDataParser::PartialLastBlockUncompressedSize
size_t PartialLastBlockUncompressedSize
Definition: vtkXMLDataParser.h:233
vtkXMLDataParser::FindAppendedDataPosition
void FindAppendedDataPosition()
vtkXMLDataParser::ReadUncompressedData
size_t ReadUncompressedData(unsigned char *data, vtkTypeUInt64 startWord, size_t numWords, size_t wordSize)
vtkXMLDataParser::BlockUncompressedSize
size_t BlockUncompressedSize
Definition: vtkXMLDataParser.h:232
vtkXMLDataParser::HeaderType
int HeaderType
Definition: vtkXMLDataParser.h:216
vtkXMLDataParser::BlockStartOffsets
vtkTypeInt64 * BlockStartOffsets
Definition: vtkXMLDataParser.h:235
vtkXMLDataParser::AsciiDataBufferLength
size_t AsciiDataBufferLength
Definition: vtkXMLDataParser.h:239
vtkXMLDataParser::ReadBlock
unsigned char * ReadBlock(vtkTypeUInt64 block)
vtkXMLDataParser::AsciiDataPosition
vtkTypeInt64 AsciiDataPosition
Definition: vtkXMLDataParser.h:241
vtkXMLDataParser::GetRootElement
vtkXMLDataElement * GetRootElement()
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkXMLDataParser::EndElement
virtual void EndElement(const char *)
vtkXMLDataParser::GetAppendedDataPosition
vtkTypeInt64 GetAppendedDataPosition()
Definition: vtkXMLDataParser.h:145
vtkXMLDataParser::ReadBlock
int ReadBlock(vtkTypeUInt64 block, unsigned char *buffer)
vtkXMLDataParser::OpenElements
vtkXMLDataElement ** OpenElements
Definition: vtkXMLDataParser.h:202
vtkXMLDataParser::NumberOfBlocks
size_t NumberOfBlocks
Definition: vtkXMLDataParser.h:231
vtkXMLParser.h
vtkXMLDataParser::GetWordTypeSize
size_t GetWordTypeSize(int wordType)
vtkXMLDataParser::OpenElementsSize
unsigned int OpenElementsSize
Definition: vtkXMLDataParser.h:204
vtkXMLDataParser::InlineDataStream
vtkInputStream * InlineDataStream
Definition: vtkXMLDataParser.h:224
vtkgl::length
GLuint GLsizei GLsizei * length
Definition: vtkgl.h:11992
vtkXMLDataParser::ParseAsciiData
int ParseAsciiData(int wordType)
vtkXMLDataParser::ReadAppendedData
size_t ReadAppendedData(vtkTypeInt64 offset, char *buffer, vtkTypeUInt64 startWord, size_t numWords)
Definition: vtkXMLDataParser.h:74
vtkXMLDataParser::ReadCompressionHeader
int ReadCompressionHeader()
vtkXMLDataParser::ParsingComplete
int ParsingComplete()
vtkXMLDataParser::PopOpenElement
vtkXMLDataElement * PopOpenElement()
vtkXMLDataParser::FreeAsciiBuffer
void FreeAsciiBuffer()
vtkXMLDataParser::PerformByteSwap
void PerformByteSwap(void *data, size_t numWords, size_t wordSize)
vtkXMLDataElement::AddCharacterData
void AddCharacterData(const char *c, size_t length)
Definition: vtkXMLDataElement.h:296
vtkXMLDataParser::RootElement
vtkXMLDataElement * RootElement
Definition: vtkXMLDataParser.h:199
vtkSetClampMacro
#define vtkSetClampMacro(name, type, min, max)
Definition: vtkSetGet.h:143
VTKIOXMLPARSER_EXPORT
#define VTKIOXMLPARSER_EXPORT
Definition: vtkIOXMLParserModule.h:15
vtkgl::name
GLuint const GLchar * name
Definition: vtkgl.h:11983
vtkXMLDataParser::ReadBinaryData
size_t ReadBinaryData(void *buffer, vtkTypeUInt64 startWord, size_t maxWords, int wordType)
vtkXMLDataElement.h
vtkXMLDataParser::AddElement
void AddElement(vtkXMLDataElement *element)
vtkXMLDataParser::ReadInlineData
size_t ReadInlineData(vtkXMLDataElement *element, int isAscii, void *buffer, vtkTypeUInt64 startWord, size_t numWords, int wordType)
vtkXMLDataParser::AppendedDataMatched
int AppendedDataMatched
Definition: vtkXMLDataParser.h:210
vtkXMLDataParser::SetCompressor
virtual void SetCompressor(vtkDataCompressor *)
vtkXMLDataParser::ByteOrder
int ByteOrder
Definition: vtkXMLDataParser.h:213
vtkXMLDataParser::Progress
float Progress
Definition: vtkXMLDataParser.h:244
VTK_CHAR
#define VTK_CHAR
Definition: vtkType.h:26
vtkXMLDataParser::SeekInlineDataPosition
void SeekInlineDataPosition(vtkXMLDataElement *element)
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkXMLDataParser::AppendedDataStream
vtkInputStream * AppendedDataStream
Definition: vtkXMLDataParser.h:227
vtkXMLDataParser::ParseBuffer
int ParseBuffer(const char *buffer, unsigned int count)
vtkIOXMLParserModule.h
vtkDataCompressor
Abstract interface for data compression classes.
Definition: vtkDataCompressor.h:33
vtkgl::offset
GLintptr offset
Definition: vtkgl.h:11844
vtkXMLDataParser::vtkXMLDataParser
vtkXMLDataParser()
vtkXMLDataElement
Represents an XML element and those nested inside.
Definition: vtkXMLDataElement.h:36
vtkGetMacro
#define vtkGetMacro(name, type)
Definition: vtkSetGet.h:93
vtkXMLDataParser::AsciiDataWordType
int AsciiDataWordType
Definition: vtkXMLDataParser.h:240
vtkXMLDataParser::ReadAsciiData
size_t ReadAsciiData(void *buffer, vtkTypeUInt64 startWord, size_t numWords, int wordType)
vtkXMLDataParser::AsciiDataBuffer
unsigned char * AsciiDataBuffer
Definition: vtkXMLDataParser.h:238
vtkXMLDataParser::BlockCompressedSizes
size_t * BlockCompressedSizes
Definition: vtkXMLDataParser.h:234
vtkXMLDataParser::StartElement
virtual void StartElement(const char *name, const char **atts)
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
vtkXMLDataParser::~vtkXMLDataParser
~vtkXMLDataParser()
vtkXMLDataParser::CharacterDataHandler
virtual void CharacterDataHandler(const char *data, int length)
Definition: vtkXMLDataParser.h:258
vtkgl::buffer
GLuint buffer
Definition: vtkgl.h:11839
vtkXMLDataParser::Compressor
vtkDataCompressor * Compressor
Definition: vtkXMLDataParser.h:230
vtkXMLDataParser::FreeAllElements
void FreeAllElements()
VTK_ENCODING_UNKNOWN
#define VTK_ENCODING_UNKNOWN
Definition: vtkSystemIncludes.h:157
vtkXMLDataParser::ReadInlineData
size_t ReadInlineData(vtkXMLDataElement *element, int isAscii, char *buffer, vtkTypeUInt64 startWord, size_t numWords)
Definition: vtkXMLDataParser.h:61
vtkXMLDataParser::New
static vtkXMLDataParser * New()
vtkX3D::progress
@ progress
Definition: vtkX3D.h:452
vtkXMLDataParser::NumberOfOpenElements
unsigned int NumberOfOpenElements
Definition: vtkXMLDataParser.h:203
vtkXMLDataParser::Parse
virtual int Parse(const char *)
vtkXMLDataParser::Abort
int Abort
Definition: vtkXMLDataParser.h:247
vtkInputStream
Wraps a binary input stream with a VTK interface.
Definition: vtkInputStream.h:33
vtkXMLDataParser::AttributesEncoding
int AttributesEncoding
Definition: vtkXMLDataParser.h:249
vtkXMLParser::CharacterDataHandler
virtual void CharacterDataHandler(const char *data, int length)
vtkXMLDataParser::FindBlockSize
size_t FindBlockSize(vtkTypeUInt64 block)
vtkXMLDataParser::UpdateProgress
void UpdateProgress(float progress)
vtkXMLDataParser::ReadAppendedData
size_t ReadAppendedData(vtkTypeInt64 offset, void *buffer, vtkTypeUInt64 startWord, size_t numWords, int wordType)
vtkXMLDataParser
Used by vtkXMLReader to parse VTK XML files.
Definition: vtkXMLDataParser.h:42
vtkXMLDataParser::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)