summaryrefslogtreecommitdiff
path: root/inc/LDOM_BasicElement.hxx
blob: 2032ce917a1abdc0cbf7ba3e9fe2105d219b525d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// File:      LDOM_BasicElement.hxx
// Created:   26.06.01 20:04:27
// Author:    Alexander GRIGORIEV
// Copyright: OpenCascade 2001
// History:   AGV 140202: Repl.(const char *) for (LDOMBasicString) => myTagName

#ifndef LDOM_BasicElement_HeaderFile
#define LDOM_BasicElement_HeaderFile

#include <LDOM_BasicNode.hxx>
#include <LDOMBasicString.hxx>
#include <LDOM_Node.hxx>

class LDOM_XmlReader;
class LDOMParser;
class LDOM_NodeList;
class LDOM_Element;
class LDOM_BasicAttribute;

#ifdef WNT
// Disable the warning: "operator new unmatched by delete"
#pragma warning (push)
#pragma warning (disable:4291)
#endif

//  Class LDOM_BasicElement
//

class LDOM_BasicElement : public LDOM_BasicNode
{
 public:
  void * operator new (size_t, void * anAddress) { return anAddress; }
 
  // ---------- PUBLIC METHODS ----------

  LDOM_BasicElement ()
    : LDOM_BasicNode    (LDOM_Node::UNKNOWN),
      myTagName         (NULL),
      myAttributeMask   (0),
      myFirstChild      (NULL) {}
  //    Empty constructor

  static LDOM_BasicElement& Create (const char                     * aName,
                                    const Standard_Integer         aLength,
                                    const Handle(LDOM_MemManager)& aDoc);

//  Standard_EXPORT LDOM_BasicElement (const LDOM_BasicElement& theOther);
  //    Copy constructor

  Standard_EXPORT LDOM_BasicElement&
                operator =              (const LDOM_NullPtr * aNull);
  //    Nullify

  Standard_EXPORT ~LDOM_BasicElement ();
  //    Destructor

  const char *  GetTagName              () const { return myTagName; }

  const LDOM_BasicNode *
                GetFirstChild           () const { return myFirstChild; }

  Standard_EXPORT const LDOM_BasicNode *
                GetLastChild            () const;

  Standard_EXPORT const LDOM_BasicAttribute&
                GetAttribute            (const LDOMBasicString& aName,
                                         const LDOM_BasicNode * aLastCh) const;
  //    Search for attribute name, using or setting myFirstAttribute

 protected:
  // ---------- PROTECTED METHODS ----------

//  LDOM_BasicElement (const LDOM_Element& anElement);
  //    Constructor

  Standard_EXPORT const LDOM_BasicNode *
                AddAttribute            (const LDOMBasicString&   anAttrName,
                                         const LDOMBasicString&   anAttrValue,
                                         const Handle(LDOM_MemManager)& aDoc,
                                         const LDOM_BasicNode     * aLastCh);
  //    add or replace an attribute to the element

  Standard_EXPORT const LDOM_BasicNode *
                RemoveAttribute         (const LDOMBasicString& aName,
                                         const LDOM_BasicNode * aLastCh) const;

  Standard_EXPORT void
                RemoveChild             (const LDOM_BasicNode * aChild) const;
  //    remove a child element

  Standard_EXPORT void
                AppendChild             (const LDOM_BasicNode *  aChild,
                                         const LDOM_BasicNode *& aLastCh) const;
  //    append a child node to the end of the list

 private:
  friend class LDOMParser;
  friend class LDOM_XmlReader;
  friend class LDOM_Document;
  friend class LDOM_Element;
  friend class LDOM_Node;
  // ---------- PRIVATE METHODS ----------

  const LDOM_BasicAttribute *
                GetFirstAttribute       (const LDOM_BasicNode *& aLastCh,
                                         const LDOM_BasicNode **& thePrN) const;

  void          RemoveNodes             ();

  void          ReplaceElement          (const LDOM_BasicElement&       anOther,
                                         const Handle(LDOM_MemManager)& aDoc);
  //    remark: recursive

  void          AddElementsByTagName    (LDOM_NodeList&         aList,
                                         const LDOMBasicString& aTagName) const;
  //    remark: recursive

  void          AddAttributes           (LDOM_NodeList&         aList,
                                         const LDOM_BasicNode * aLastCh) const;
  //    add attributes to list

 private:
  // ---------- PRIVATE FIELDS ----------

//  LDOMBasicString       myTagName;
  const char            * myTagName;
  unsigned long         myAttributeMask;
  LDOM_BasicNode        * myFirstChild;
};

#ifdef WNT
#pragma warning (pop)
#endif

#endif