XercesUtil.h
Go to the documentation of this file.
1 #ifndef _utl_XercesUtil_h_
2 #define _utl_XercesUtil_h_
3 
4 #include <xercesc/util/XMLString.hpp>
5 #include <xercesc/dom/DOMLSSerializer.hpp>
6 
7 
8 namespace utl {
9 
10  namespace detail {
11 
12  template<class T>
13  inline
14  void
15  Release(T*& p)
16  {
17  if (!p->getOwnerDocument())
18  p->release();
19  }
20 
21  template<>
22  inline void Release(char*& p) { xercesc::XMLString::release(&p); }
23 
24  template<>
25  inline void Release(XMLCh*& p) { xercesc::XMLString::release(&p); }
26 
27  template<>
28  inline void Release(xercesc::DOMLSSerializer*& p) { p->release(); }
29 
30  }
31 
32 
39  template<class T>
40  class XercesPtr {
41 
42  public:
43  XercesPtr() = default;
44 
45  explicit XercesPtr(T* const p) : fPtr(p) { }
46 
48 
49  T* Get() { return fPtr; }
50  const T* Get() const { return fPtr; }
51 
52  T& operator*() { return *fPtr; }
53  const T& operator*() const { return *fPtr; }
54 
55  T* operator->() { return fPtr; }
56  const T* operator->() const { return fPtr; }
57 
58  private:
59  XercesPtr(const XercesPtr&); // no copy
60  XercesPtr& operator=(const XercesPtr&); // no copy
61 
62  void Release() { if (fPtr) detail::Release(fPtr); fPtr = nullptr; }
63 
64  T* fPtr = nullptr;
65 
66  };
67 
70 
71 
72  //
73 
74 
75  inline
76  std::string
77  AsString(const XMLCh* const xStr)
78  {
79  return XercesPtrC(xercesc::XMLString::transcode(xStr)).Get();
80  }
81 
82 }
83 
84 
85 #endif
const T & operator*() const
Definition: XercesUtil.h:53
XercesPtr()=default
const T * operator->() const
Definition: XercesUtil.h:56
XercesPtr(T *const p)
Definition: XercesUtil.h:45
std::string AsString(const XMLCh *const xStr)
Definition: XercesUtil.h:77
XercesPtr< char > XercesPtrC
Definition: XercesUtil.h:68
XercesPtr & operator=(const XercesPtr &)
void Release()
Definition: XercesUtil.h:62
const T * Get() const
Definition: XercesUtil.h:50
T * operator->()
Definition: XercesUtil.h:55
T & operator*()
Definition: XercesUtil.h:52
void Release(T *&p)
Definition: XercesUtil.h:15
XercesPtr< XMLCh > XercesPtrX
Definition: XercesUtil.h:69

, generated on Tue Sep 26 2023.