00001 #ifndef DOMSPtr_HEADER_GUARD_
00002 #define DOMSPtr_HEADER_GUARD_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <xercesc/dom/DOMNode.hpp>
00026 #include <xercesc/dom/DOMAttr.hpp>
00027 #include <xercesc/dom/DOMElement.hpp>
00028
00029 XERCES_CPP_NAMESPACE_BEGIN
00030
00031
00032
00033
00034
00035 template <class T> class StDOMNode {
00036 T* m_node;
00037
00038 static inline void INCREFCOUNT(T *x) { if (x != (T*)0) x->incRefCount(); }
00039 static inline void DECREFCOUNT(T *x) { if (x != (T*)0) x->decRefCount(); }
00040
00041 public:
00042 inline StDOMNode(T* node = (T*)0) : m_node(node) { INCREFCOUNT(m_node); }
00043 inline StDOMNode(const StDOMNode& stNode) : m_node(stNode.m_node) { INCREFCOUNT(m_node); }
00044 inline ~StDOMNode() { DECREFCOUNT(m_node); }
00045
00046 inline T* operator= (T *node)
00047 {
00048 if (m_node != node) {
00049 DECREFCOUNT(m_node);
00050 m_node = node;
00051 INCREFCOUNT(m_node);
00052 }
00053 return (m_node);
00054 }
00055
00056 inline bool operator!= (T* node) const { return (m_node != node); }
00057 inline bool operator== (T* node) const { return (m_node == node); }
00058
00059 inline T& operator* () { return (*m_node); }
00060 inline const T& operator* () const { return (*m_node); }
00061 inline T* operator-> () const { return (m_node); }
00062 inline operator T*() const { return (m_node); }
00063 inline void ClearNode() { operator=((T*)(0)); }
00064 };
00065
00066 #if defined(XML_DOMREFCOUNT_EXPERIMENTAL)
00067 typedef StDOMNode<DOMNode> DOMNodeSPtr;
00068 #else
00069 typedef DOMNode* DOMNodeSPtr;
00070 #endif
00071
00072
00073
00074
00075
00076 #if defined(XML_DOMREFCOUNT_EXPERIMENTAL)
00077 typedef StDOMNode<DOMAttr> DOMAttrSPtr;
00078 #else
00079 typedef DOMAttr* DOMAttrSPtr;
00080 #endif
00081
00082
00083
00084
00085
00086 #if defined(XML_DOMREFCOUNT_EXPERIMENTAL)
00087 typedef StDOMNode<DOMElement> DOMElementSPtr;
00088 #else
00089 typedef DOMElement* DOMElementSPtr;
00090 #endif
00091
00092 XERCES_CPP_NAMESPACE_END
00093
00094 #endif
00095