ITK  4.6.0
Insight Segmentation and Registration Toolkit
itkDOMNode.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 
19 #ifndef __itkDOMNode_h
20 #define __itkDOMNode_h
21 
22 #include "itkObject.h"
23 #include "itkObjectFactory.h"
24 
25 #include <string>
26 #include <vector>
27 #include <list>
28 #include <map>
29 
30 namespace itk
31 {
32 
33 class DOMTextNode; // forward declaration
34 
52 class DOMNode : public Object
53 {
54 public:
55 
57  typedef DOMNode Self;
58  typedef Object Superclass;
61 
63  itkNewMacro(Self);
64 
66  itkTypeMacro(DOMNode, Object);
67 
69  typedef std::vector<DOMNode*> ChildrenListType;
70  typedef std::vector<const DOMNode*> ConstChildrenListType;
71 
73  typedef std::string AttributeKeyType;
74  typedef std::string AttributeValueType;
75 
76  typedef std::pair<const AttributeKeyType,AttributeValueType> AttributeItemType;
77 
79  typedef std::list<AttributeItemType> AttributesListType;
80 
81  typedef std::size_t SizeType;
82  typedef int IdentifierType;
83  typedef int OffsetType;
84 
86  virtual void SetParent( DOMNode* node );
87  DOMNode* GetParent();
88  const DOMNode* GetParent() const;
90 
92  itkSetMacro( Name, std::string& );
93  itkGetConstReferenceMacro( Name, std::string );
95 
97  itkSetMacro( ID, std::string& );
98  itkGetConstReferenceMacro( ID, std::string );
100 
102  virtual std::string GetAttribute( const std::string& key ) const;
103 
105  virtual bool HasAttribute( const std::string& key ) const;
106 
108  virtual void SetAttribute( const std::string& key, const std::string& value );
109 
111  virtual void RemoveAttribute( const std::string& key );
112 
117  virtual void GetAllAttributes( AttributesListType& output, bool keepOriginalOrder = true ) const;
118 
120  virtual void RemoveAllAttributes();
121 
123  virtual SizeType GetNumberOfChildren() const;
124 
126  virtual void GetAllChildren( ChildrenListType& output );
127 
129  virtual void GetAllChildren( ConstChildrenListType& output ) const;
130 
132  virtual void GetChildren( const std::string& tag, ChildrenListType& output );
133 
135  virtual void GetChildren( const std::string& tag, ConstChildrenListType& output ) const;
136 
138  virtual void RemoveAllChildren();
139 
141  virtual void AddChild( DOMNode* node, IdentifierType i=0 );
142 
144  virtual void AddChildAtBegin( DOMNode* node );
145 
147  virtual void AddChildAtEnd( DOMNode* node );
148 
150  virtual void SetChild( DOMNode* node, IdentifierType i=0 );
151 
153  virtual void RemoveChild( IdentifierType i=0 );
154 
156  virtual void RemoveAllAttributesAndChildren();
157 
159  virtual DOMNode* GetChild( IdentifierType i=0 );
160  virtual const DOMNode* GetChild( IdentifierType i=0 ) const;
162 
164  virtual DOMNode* GetChild( const std::string& tag, IdentifierType i=0 );
165  virtual const DOMNode* GetChild( const std::string& tag, IdentifierType i=0 ) const;
167 
169  virtual DOMNode* GetChildByID( const std::string& value );
170  virtual const DOMNode* GetChildByID( const std::string& value ) const;
172 
174  virtual DOMNode* GetSibling( OffsetType i );
175  virtual const DOMNode* GetSibling( OffsetType i ) const;
177 
179  virtual DOMNode* GetRoot();
180  virtual const DOMNode* GetRoot() const;
182 
184  virtual bool ShareRoot( const DOMNode* node ) const;
185 
203  virtual DOMNode* Find( const std::string& path );
204  virtual const DOMNode* Find( const std::string& path ) const;
206 
208  virtual std::string GetPath() const;
209 
211  virtual DOMTextNode* GetTextChild( IdentifierType i=0 );
212  virtual const DOMTextNode* GetTextChild( IdentifierType i=0 ) const;
214 
216  virtual void AddTextChild( const std::string& text, IdentifierType i=0 );
217 
219  virtual void AddTextChildAtBegin( const std::string& text );
220 
222  virtual void AddTextChildAtEnd( const std::string& text );
223 
225  virtual void SetTextChild( const std::string& text, IdentifierType i=0 );
226 
227 protected:
228  DOMNode();
229 
230 private:
233 
235  std::string m_Name;
236 
238  std::string m_ID;
239 
241  typedef std::vector<Pointer> ChildrenContainer;
243 
245  typedef std::map<AttributeKeyType,AttributeValueType> AttributesContainer;
247 
249  typedef std::list<AttributeItemType*> OrderedAttributesContainer;
251 
252  DOMNode(const Self &); //purposely not implemented
253  void operator=(const Self &); //purposely not implemented
254 };
255 
256 } // namespace itk
257 
258 #include "itkDOMTextNode.h"
259 
260 #include "itkStringTools.h"
261 #include "itkFancyString.h"
262 
263 #endif // __itkDOMNode_h
virtual DOMNode * GetSibling(OffsetType i)
std::map< AttributeKeyType, AttributeValueType > AttributesContainer
Definition: itkDOMNode.h:245
std::vcl_size_t SizeType
Definition: itkDOMNode.h:81
ChildrenContainer m_Children
Definition: itkDOMNode.h:242
virtual bool ShareRoot(const DOMNode *node) const
virtual void RemoveAttribute(const std::string &key)
SmartPointer< const Self > ConstPointer
Definition: itkDOMNode.h:60
virtual std::string GetPath() const
virtual void GetChildren(const std::string &tag, ChildrenListType &output)
Light weight base class for most itk classes.
virtual void RemoveChild(IdentifierType i=0)
OrderedAttributesContainer m_OrderedAttributes
Definition: itkDOMNode.h:250
Class to represent a special DOM node that holds a text string.
virtual DOMNode * GetRoot()
virtual DOMNode * Find(const std::string &path)
virtual void RemoveAllChildren()
virtual void RemoveAllAttributesAndChildren()
Class to represent a node in a Document Object Model (DOM) tree structure.
Definition: itkDOMNode.h:52
std::vector< const DOMNode * > ConstChildrenListType
Definition: itkDOMNode.h:70
virtual void GetAllAttributes(AttributesListType &output, bool keepOriginalOrder=true) const
Object Superclass
Definition: itkDOMNode.h:58
virtual DOMTextNode * GetTextChild(IdentifierType i=0)
int OffsetType
Definition: itkDOMNode.h:83
virtual DOMNode * GetChildByID(const std::string &value)
std::string AttributeValueType
Definition: itkDOMNode.h:74
std::list< AttributeItemType * > OrderedAttributesContainer
Definition: itkDOMNode.h:249
std::string m_ID
Definition: itkDOMNode.h:238
std::pair< const AttributeKeyType, AttributeValueType > AttributeItemType
Definition: itkDOMNode.h:76
std::vector< DOMNode * > ChildrenListType
Definition: itkDOMNode.h:66
virtual void SetChild(DOMNode *node, IdentifierType i=0)
virtual DOMNode * GetChild(IdentifierType i=0)
virtual void AddChildAtEnd(DOMNode *node)
void operator=(const Self &)
virtual bool HasAttribute(const std::string &key) const
virtual void GetAllChildren(ChildrenListType &output)
std::vector< Pointer > ChildrenContainer
Definition: itkDOMNode.h:241
SmartPointer< Self > Pointer
Definition: itkDOMNode.h:59
virtual void AddTextChildAtEnd(const std::string &text)
DOMNode * m_Parent
Definition: itkDOMNode.h:232
DOMNode Self
Definition: itkDOMNode.h:57
virtual SizeType GetNumberOfChildren() const
virtual void SetParent(DOMNode *node)
virtual void AddChild(DOMNode *node, IdentifierType i=0)
virtual void RemoveAllAttributes()
std::string m_Name
Definition: itkDOMNode.h:235
virtual void AddTextChild(const std::string &text, IdentifierType i=0)
DOMNode * GetParent()
virtual void AddChildAtBegin(DOMNode *node)
std::list< AttributeItemType > AttributesListType
Definition: itkDOMNode.h:79
Base class for most ITK classes.
Definition: itkObject.h:57
std::string AttributeKeyType
Definition: itkDOMNode.h:73
virtual void AddTextChildAtBegin(const std::string &text)
virtual void SetAttribute(const std::string &key, const std::string &value)
AttributesContainer m_Attributes
Definition: itkDOMNode.h:246
int IdentifierType
Definition: itkDOMNode.h:82
virtual std::string GetAttribute(const std::string &key) const
virtual void SetTextChild(const std::string &text, IdentifierType i=0)