ptr.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include <util/generic/ptr.h>
  3. #include <libxml/tree.h>
  4. #include <libxml/parser.h>
  5. #include <libxml/xpath.h>
  6. #include <libxml/xpathInternals.h>
  7. #include <libxml/xmlsave.h>
  8. #include <libxml/uri.h>
  9. #include <libxml/xmlschemas.h>
  10. template <class T, void (*DestroyFun)(T*)>
  11. struct TFunctionDestroy {
  12. static inline void Destroy(T* t) noexcept {
  13. if (t)
  14. DestroyFun(t);
  15. }
  16. };
  17. namespace NXml {
  18. #define DEF_HOLDER(type, free) typedef THolder<type, TFunctionDestroy<type, free>> T##type##Holder
  19. #define DEF_PTR(type, free) typedef TAutoPtr<type, TFunctionDestroy<type, free>> T##type##Ptr
  20. // define xmlDocPtr -> TxmlDocHolder TxmlDocPtr
  21. DEF_HOLDER(xmlDoc, xmlFreeDoc);
  22. DEF_PTR(xmlDoc, xmlFreeDoc);
  23. // xmlXPathContextPtr xpathCtx;
  24. DEF_HOLDER(xmlXPathContext, xmlXPathFreeContext);
  25. DEF_PTR(xmlXPathContext, xmlXPathFreeContext);
  26. // xmlXPathObjectPtr xpathObj;
  27. DEF_HOLDER(xmlXPathObject, xmlXPathFreeObject);
  28. DEF_PTR(xmlXPathObject, xmlXPathFreeObject);
  29. // xmlNodeSetPtr nodes
  30. DEF_HOLDER(xmlNodeSet, xmlXPathFreeNodeSet);
  31. DEF_PTR(xmlNodeSet, xmlXPathFreeNodeSet);
  32. // xmlSchemaParserCtxtPtr ctxt;
  33. DEF_HOLDER(xmlSchemaParserCtxt, xmlSchemaFreeParserCtxt);
  34. DEF_PTR(xmlSchemaParserCtxt, xmlSchemaFreeParserCtxt);
  35. // xmlSchemaPtr schema;
  36. DEF_HOLDER(xmlSchema, xmlSchemaFree);
  37. DEF_PTR(xmlSchema, xmlSchemaFree);
  38. // xmlSchemaValidCtxt ctxt;
  39. DEF_HOLDER(xmlSchemaValidCtxt, xmlSchemaFreeValidCtxt);
  40. DEF_PTR(xmlSchemaValidCtxt, xmlSchemaFreeValidCtxt);
  41. // xmlSaveCtxtPtr
  42. inline void xmlFreeSave(xmlSaveCtxt* c) {
  43. // returns int
  44. xmlSaveClose(c);
  45. }
  46. DEF_HOLDER(xmlSaveCtxt, xmlFreeSave);
  47. DEF_PTR(xmlSaveCtxt, xmlFreeSave);
  48. DEF_PTR(xmlURI, xmlFreeURI);
  49. DEF_PTR(xmlNode, xmlFreeNode);
  50. DEF_PTR(xmlParserCtxt, xmlFreeParserCtxt);
  51. DEF_PTR(xmlParserInputBuffer, xmlFreeParserInputBuffer);
  52. DEF_PTR(xmlDtd, xmlFreeDtd);
  53. DEF_PTR(xmlValidCtxt, xmlFreeValidCtxt);
  54. #undef DEF_HOLDER
  55. #undef DEF_PTR
  56. }