85a4a96cce9f23370eeb2193ac47dbb4230bd360
[occt.git] / src / LDOM / LDOM_Node.hxx
1 // Created on: 2001-06-26
2 // Created by: Alexander GRIGORIEV
3 // Copyright (c) 2001-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 //AGV 120202: Replace myDocument for myPtrDocument for better
17 //                          consistency of data
18
19 #ifndef LDOM_Node_HeaderFile
20 #define LDOM_Node_HeaderFile
21
22 #include <Standard_Macro.hxx>
23 #include <Standard_TypeDef.hxx>
24 #include <LDOMString.hxx>
25
26 class LDOM_BasicNode;
27
28 //  LDOM_Node : base class for LDOM interface objects
29 //              references LDOM_BasicNode - the real data stored in Document
30 //  This type can be safely cast to any derived type, e.g. :
31 //         LDOM_Node aNode          = MyGetElementNode();
32 //         LDOM_Element& anElemNode = (LDOM_Element&) aNode;
33 //         LDOMString anXcoord      = anElemNode.getAtttribute("x");
34
35 class LDOM_Node
36 {
37  public:
38   enum NodeType {
39     UNKNOWN             = 0,
40     ELEMENT_NODE        = 1,
41     ATTRIBUTE_NODE      = 2,
42     TEXT_NODE           = 3,
43     CDATA_SECTION_NODE  = 4,
44     COMMENT_NODE        = 8
45     };
46
47   // ---------- PUBLIC METHODS ----------
48
49   LDOM_Node () : myOrigin        (NULL),
50                  myLastChild     (NULL) {}
51   //    Empty constructor
52
53   LDOM_Node (const LDOM_Node& anOther)
54     : myDocument        (anOther.myDocument),
55       myOrigin          (anOther.myOrigin),
56       myLastChild       (anOther.myLastChild) {}
57   //    Copy constructor
58
59   Standard_EXPORT const LDOM_MemManager& getOwnerDocument () const;
60
61   Standard_EXPORT LDOM_Node&
62                         operator =      (const LDOM_Node& anOther);
63
64   Standard_EXPORT LDOM_Node&
65                         operator =      (const LDOM_NullPtr * aNull); 
66
67   Standard_Boolean      operator ==     (const LDOM_NullPtr *) const
68                                         { return isNull(); }
69
70   Standard_Boolean      operator !=     (const LDOM_NullPtr *) const
71                                         { return ! isNull(); }
72
73   Standard_EXPORT Standard_Boolean
74                         operator ==     (const LDOM_Node& anOther) const;
75
76   Standard_EXPORT Standard_Boolean
77                         operator !=     (const LDOM_Node& anOther) const;
78
79   Standard_EXPORT Standard_Boolean
80                         isNull          () const;
81
82   Standard_EXPORT NodeType
83                         getNodeType     () const;
84
85   Standard_EXPORT LDOMString
86                         getNodeName     () const;
87
88   Standard_EXPORT LDOMString
89                         getNodeValue     () const;
90
91   Standard_EXPORT LDOM_Node
92                         getFirstChild   () const;
93
94   Standard_EXPORT LDOM_Node
95                         getLastChild   () const;
96
97   Standard_EXPORT LDOM_Node
98                         getNextSibling  () const;
99
100   Standard_EXPORT void  removeChild     (const LDOM_Node& aChild);
101
102   Standard_EXPORT void  appendChild     (const LDOM_Node& aChild);
103
104   Standard_EXPORT Standard_Boolean
105                         hasChildNodes   () const;
106
107   Standard_EXPORT void  SetValueClear   () const;
108   //    Avoids checking for '<', '&', '\'', '\"', etc. on storage (saves time)
109   //    You MUST be pretty sure that the node value string is OK in this sense
110   //    NEVER call this method if you are not stuck on the performance 
111
112  protected:
113 friend class LDOM_BasicAttribute;
114 friend class LDOM_BasicElement;
115 friend class LDOM_BasicText;
116 friend class LDOM_NodeList;
117   // ---------- PROTECTED METHODS ----------
118
119   const LDOM_BasicNode& Origin          () const;
120
121   LDOM_Node (const LDOM_BasicNode& anOrig, const Handle(LDOM_MemManager)& aDoc)
122     : myDocument        (aDoc),
123       myOrigin          ((LDOM_BasicNode *) &anOrig),
124       myLastChild       (NULL) {}
125   //    Copy constructor with assignment to Document
126
127  protected:
128   // ---------- PROTECTED FIELDS ----------
129
130         // smart pointer to document owner of the node
131   Handle(LDOM_MemManager)       myDocument;
132
133         // pointer to (non-transient) node data in the document-managed memory
134   LDOM_BasicNode                * myOrigin;
135
136         // Transient data (only applicable to LDOM_Element type):
137         // the last child; myLastChild->mySibling points to the first attribute
138   const LDOM_BasicNode          * myLastChild;
139
140   friend char * db_pretty_print (const LDOM_Node *, int, char *);
141 };
142
143 #endif