From c5a6c2f4d261fcb6b694c6d6d87f515c24d24eb4 Mon Sep 17 00:00:00 2001 From: Jeongnim Kim Date: Thu, 7 Nov 2013 17:27:49 +0000 Subject: [PATCH] Add OhmmsXPathObject constructor that can be used with the current xml node. It is expensive and don't abuse it. OhmmsXPathObject det("//determinant",cur); git-svn-id: https://subversion.assembla.com/svn/qmcdev/trunk@6054 e5b18d87-469d-4833-9cc0-8cdfa06e9491 --- src/OhmmsData/Libxml2Doc.cpp | 14 +++++++++++++- src/OhmmsData/Libxml2Doc.h | 9 +++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/OhmmsData/Libxml2Doc.cpp b/src/OhmmsData/Libxml2Doc.cpp index da761fe71..0212881b9 100644 --- a/src/OhmmsData/Libxml2Doc.cpp +++ b/src/OhmmsData/Libxml2Doc.cpp @@ -20,7 +20,7 @@ #include "Utilities/Timer.h" #include -OhmmsXPathObject::OhmmsXPathObject(): NumObjects(0), result(NULL) +OhmmsXPathObject::OhmmsXPathObject(): NumObjects(0), result(NULL),m_context(NULL) { } @@ -30,12 +30,23 @@ OhmmsXPathObject::OhmmsXPathObject(const char* expression, put(expression, context); } +OhmmsXPathObject::OhmmsXPathObject(const char* expression, xmlNodePtr cur) :NumObjects(0), result(NULL) +{ + m_context= xmlXPathNewContext(cur->doc); + put(expression, m_context); +} + OhmmsXPathObject::~OhmmsXPathObject() { if(result != NULL) { xmlXPathFreeObject(result); } + + if(m_context != NULL) + { + xmlXPathFreeContext(m_context); + } } void OhmmsXPathObject::put(const char* expression, xmlXPathContextPtr context) @@ -54,6 +65,7 @@ void OhmmsXPathObject::put(const char* expression, xmlXPathContextPtr context) } } + Libxml2Document::Libxml2Document(): m_doc(NULL), m_root(NULL), m_context(NULL) { } diff --git a/src/OhmmsData/Libxml2Doc.h b/src/OhmmsData/Libxml2Doc.h index ffccb2632..da549bfdb 100644 --- a/src/OhmmsData/Libxml2Doc.h +++ b/src/OhmmsData/Libxml2Doc.h @@ -32,6 +32,14 @@ struct OhmmsXPathObject */ OhmmsXPathObject(const char* expression, xmlXPathContextPtr context); + /** constructor + * @param expression xpath expression + * @param cur xmlNodePtr + * + * Create m_context + */ + OhmmsXPathObject(const char* expression, xmlNodePtr cur); + ~OhmmsXPathObject(); /** evaluate the expression and create the object @@ -64,6 +72,7 @@ struct OhmmsXPathObject int NumObjects; xmlXPathObjectPtr result; + xmlXPathContextPtr m_context; }; /** class that handles xmlDoc