00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00027 #ifndef __vtkXMLDataElement_h
00028 #define __vtkXMLDataElement_h
00029
00030 #include "vtkObject.h"
00031
00032 class vtkXMLDataParser;
00033
00034 class VTK_IO_EXPORT vtkXMLDataElement : public vtkObject
00035 {
00036 public:
00037 vtkTypeRevisionMacro(vtkXMLDataElement,vtkObject);
00038 void PrintSelf(ostream& os, vtkIndent indent);
00039 static vtkXMLDataElement* New();
00040
00042
00043 vtkGetStringMacro(Name);
00044 vtkSetStringMacro(Name);
00046
00048
00049 vtkGetStringMacro(Id);
00050 vtkSetStringMacro(Id);
00052
00055 const char* GetAttribute(const char* name);
00056
00059 void SetAttribute(const char* name, const char* value);
00060
00062
00063 void SetCharacterData(const char* c, int length);
00064 void AddCharacterData(const char* c, int length);
00065 vtkGetStringMacro(CharacterData);
00067
00069
00071 int GetScalarAttribute(const char* name, int& value);
00072 int GetScalarAttribute(const char* name, float& value);
00073 int GetScalarAttribute(const char* name, double& value);
00074 int GetScalarAttribute(const char* name, unsigned long& value);
00076
00078
00082 void SetIntAttribute(const char* name, int value);
00083 void SetFloatAttribute(const char* name, float value);
00084 void SetDoubleAttribute(const char* name, double value);
00085 void SetUnsignedLongAttribute(const char* name, unsigned long value);
00087
00089
00091 int GetVectorAttribute(const char* name, int length, int* value);
00092 int GetVectorAttribute(const char* name, int length, float* value);
00093 int GetVectorAttribute(const char* name, int length, double* value);
00094 int GetVectorAttribute(const char* name, int length, unsigned long* value);
00096
00098
00099 void SetVectorAttribute(const char* name, int length, const int* value);
00100 void SetVectorAttribute(const char* name, int length, const float* value);
00101 void SetVectorAttribute(const char* name, int length, const double* value);
00102 void SetVectorAttribute(const char* name, int length, const unsigned long* value);
00104
00105 #ifdef VTK_USE_64BIT_IDS
00106
00107 int GetScalarAttribute(const char* name, vtkIdType& value);
00108 void SetIdTypeAttribute(const char* name, vtkIdType value);
00109 int GetVectorAttribute(const char* name, int length, vtkIdType* value);
00110 void SetVectorAttribute(const char* name, int length, const vtkIdType* value);
00111
00112 #endif
00113
00116 int GetWordTypeAttribute(const char* name, int& value);
00117
00119
00120 vtkGetMacro(NumberOfAttributes, int);
00122
00124 const char* GetAttributeName(int idx);
00125
00128 const char* GetAttributeValue(int idx);
00129
00131
00132 virtual void RemoveAttribute(const char *name);
00133 virtual void RemoveAllAttributes();
00135
00137
00138 vtkXMLDataElement* GetParent();
00139 void SetParent(vtkXMLDataElement* parent);
00141
00143 virtual vtkXMLDataElement* GetRoot();
00144
00146 int GetNumberOfNestedElements();
00147
00149 vtkXMLDataElement* GetNestedElement(int index);
00150
00152 void AddNestedElement(vtkXMLDataElement* element);
00153
00155 virtual void RemoveNestedElement(vtkXMLDataElement *);
00156
00158 virtual void RemoveAllNestedElements();
00159
00161
00164 vtkXMLDataElement* FindNestedElement(const char* id);
00165 vtkXMLDataElement* FindNestedElementWithName(const char* name);
00166 vtkXMLDataElement* FindNestedElementWithNameAndId(
00167 const char* name, const char* id);
00168 vtkXMLDataElement* FindNestedElementWithNameAndAttribute(
00169 const char* name, const char* att_name, const char* att_value);
00171
00174 vtkXMLDataElement* LookupElementWithName(const char* name);
00175
00177 vtkXMLDataElement* LookupElement(const char* id);
00178
00180
00182 vtkGetMacro(XMLByteIndex, unsigned long);
00183 vtkSetMacro(XMLByteIndex, unsigned long);
00185
00190 virtual int IsEqualTo(vtkXMLDataElement *elem);
00191
00195 virtual void DeepCopy(vtkXMLDataElement *elem);
00196
00198
00203 vtkSetClampMacro(AttributeEncoding,int,VTK_ENCODING_NONE,VTK_ENCODING_UNKNOWN);
00204 vtkGetMacro(AttributeEncoding, int);
00206
00208 void PrintXML(ostream& os, vtkIndent indent);
00209
00210 protected:
00211 vtkXMLDataElement();
00212 ~vtkXMLDataElement();
00213
00214
00215 char* Name;
00216
00217
00218 char* Id;
00219
00220
00221 char* CharacterData;
00222
00223
00224 unsigned long XMLByteIndex;
00225
00226
00227 unsigned long InlineDataPosition;
00228
00229
00230 char** AttributeNames;
00231 char** AttributeValues;
00232 int NumberOfAttributes;
00233 int AttributesSize;
00234 int AttributeEncoding;
00235
00236
00237 int NumberOfNestedElements;
00238 int NestedElementsSize;
00239 vtkXMLDataElement** NestedElements;
00240
00241
00242 vtkXMLDataElement* Parent;
00243
00244
00245 void ReadXMLAttributes(const char** atts, int encoding);
00246 void SeekInlineDataPosition(vtkXMLDataParser* parser);
00247
00248
00249 vtkXMLDataElement* LookupElementInScope(const char* id);
00250 vtkXMLDataElement* LookupElementUpScope(const char* id);
00251 static int IsSpace(char c);
00252
00253
00254 friend class vtkXMLDataParser;
00255 friend class vtkXMLMaterialParser;
00256
00257
00258 private:
00259 vtkXMLDataElement(const vtkXMLDataElement&);
00260 void operator=(const vtkXMLDataElement&);
00261 };
00262
00263 #endif