diff options
author | Jan Holesovsky <kendy@suse.cz> | 2011-03-23 16:59:02 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@suse.cz> | 2011-03-23 16:59:02 +0100 |
commit | 90087ebb40a6cf12c9464da4e4ea7cc8b5f24bc5 (patch) | |
tree | bb3d6cb01c18dd12ae7ec77234cd43a6092d5a4b /unoxml/source/xpath/xpathobject.cxx | |
parent | 5d7d145d411c8974ceb12ac08759e7ccf3bb9b27 (diff) | |
parent | 82c070266d0440348c61c710e0caa89ae1e74b1b (diff) |
Merge commit 'ooo/DEV300_m103'
Conflicts:
binfilter/bf_xmloff/source/forms/formcellbinding.hxx
binfilter/bf_xmloff/source/forms/xmloff_elementexport.cxx
binfilter/bf_xmloff/source/forms/xmloff_formcellbinding.cxx
filter/source/xsltfilter/makefile.mk
unoxml/source/dom/characterdata.cxx
unoxml/source/dom/document.cxx
unoxml/source/dom/documentbuilder.cxx
unoxml/source/dom/element.cxx
unoxml/source/dom/elementlist.cxx
unoxml/source/dom/node.cxx
unoxml/source/dom/node.hxx
unoxml/source/dom/text.cxx
unoxml/source/events/event.cxx
unoxml/source/events/event.hxx
unoxml/source/events/eventdispatcher.cxx
unoxml/source/events/eventdispatcher.hxx
unoxml/source/events/mouseevent.cxx
unoxml/source/events/mouseevent.hxx
unoxml/source/events/mutationevent.cxx
unoxml/source/events/mutationevent.hxx
unoxml/source/events/uievent.cxx
unoxml/source/events/uievent.hxx
unoxml/source/xpath/nodelist.cxx
unoxml/source/xpath/nodelist.hxx
unoxml/source/xpath/xpathobject.cxx
Diffstat (limited to 'unoxml/source/xpath/xpathobject.cxx')
-rw-r--r-- | unoxml/source/xpath/xpathobject.cxx | 112 |
1 files changed, 69 insertions, 43 deletions
diff --git a/unoxml/source/xpath/xpathobject.cxx b/unoxml/source/xpath/xpathobject.cxx index c33eeb6477dc..c9d84bd4173f 100644 --- a/unoxml/source/xpath/xpathobject.cxx +++ b/unoxml/source/xpath/xpathobject.cxx @@ -26,67 +26,75 @@ * ************************************************************************/ +#include <xpathobject.hxx> + #include <string.h> -#include "xpathobject.hxx" -#include "nodelist.hxx" + +#include "../dom/document.hxx" +#include <nodelist.hxx> + namespace XPath { - CXPathObject::CXPathObject(xmlXPathObjectPtr xpathObj, const Reference< XNode >& contextNode) - : m_pXPathObj(xpathObj, xmlXPathFreeObject), m_xContextNode(contextNode) + static XPathObjectType lcl_GetType(xmlXPathObjectPtr const pXPathObj) { - switch (m_pXPathObj->type) + switch (pXPathObj->type) { - case XPATH_UNDEFINED: - m_xPathObjectType = XPathObjectType_XPATH_UNDEFINED; - break; - case XPATH_NODESET: - m_xPathObjectType = XPathObjectType_XPATH_NODESET; - break; - case XPATH_BOOLEAN: - m_xPathObjectType = XPathObjectType_XPATH_BOOLEAN; - break; - case XPATH_NUMBER: - m_xPathObjectType = XPathObjectType_XPATH_NUMBER; - break; - case XPATH_STRING: - m_xPathObjectType = XPathObjectType_XPATH_STRING; - break; - case XPATH_POINT: - m_xPathObjectType = XPathObjectType_XPATH_POINT; - break; - case XPATH_RANGE: - m_xPathObjectType = XPathObjectType_XPATH_RANGE; - break; - case XPATH_LOCATIONSET: - m_xPathObjectType = XPathObjectType_XPATH_LOCATIONSET; - break; - case XPATH_USERS: - m_xPathObjectType = XPathObjectType_XPATH_USERS; - break; - case XPATH_XSLT_TREE: - m_xPathObjectType = XPathObjectType_XPATH_XSLT_TREE; - break; - default: - m_xPathObjectType = XPathObjectType_XPATH_UNDEFINED; - break; + case XPATH_UNDEFINED: + return XPathObjectType_XPATH_UNDEFINED; + case XPATH_NODESET: + return XPathObjectType_XPATH_NODESET; + case XPATH_BOOLEAN: + return XPathObjectType_XPATH_BOOLEAN; + case XPATH_NUMBER: + return XPathObjectType_XPATH_NUMBER; + case XPATH_STRING: + return XPathObjectType_XPATH_STRING; + case XPATH_POINT: + return XPathObjectType_XPATH_POINT; + case XPATH_RANGE: + return XPathObjectType_XPATH_RANGE; + case XPATH_LOCATIONSET: + return XPathObjectType_XPATH_LOCATIONSET; + case XPATH_USERS: + return XPathObjectType_XPATH_USERS; + case XPATH_XSLT_TREE: + return XPathObjectType_XPATH_XSLT_TREE; + default: + return XPathObjectType_XPATH_UNDEFINED; } } + CXPathObject::CXPathObject( + ::rtl::Reference<DOM::CDocument> const& pDocument, + ::osl::Mutex & rMutex, + ::boost::shared_ptr<xmlXPathObject> const& pXPathObj) + : m_pDocument(pDocument) + , m_rMutex(rMutex) + , m_pXPathObj(pXPathObj) + , m_XPathObjectType(lcl_GetType(pXPathObj.get())) + { + } + /** get object type */ XPathObjectType CXPathObject::getObjectType() throw (RuntimeException) { - return m_xPathObjectType; + return m_XPathObjectType; } /** get the nodes from a nodelist type object */ - Reference< XNodeList > SAL_CALL CXPathObject::getNodeList() throw (RuntimeException) + Reference< XNodeList > SAL_CALL + CXPathObject::getNodeList() throw (RuntimeException) { - return Reference< XNodeList >(new CNodeList(m_xContextNode, m_pXPathObj)); + ::osl::MutexGuard const g(m_rMutex); + + Reference< XNodeList > const xRet( + new CNodeList(m_pDocument, m_rMutex, m_pXPathObj)); + return xRet; } /** @@ -94,6 +102,8 @@ namespace XPath */ sal_Bool SAL_CALL CXPathObject::getBoolean() throw (RuntimeException) { + ::osl::MutexGuard const g(m_rMutex); + return (sal_Bool) xmlXPathCastToBoolean(m_pXPathObj.get()); } @@ -102,6 +112,8 @@ namespace XPath */ sal_Int8 SAL_CALL CXPathObject::getByte() throw (RuntimeException) { + ::osl::MutexGuard const g(m_rMutex); + return (sal_Int8) xmlXPathCastToNumber(m_pXPathObj.get()); } @@ -110,6 +122,8 @@ namespace XPath */ sal_Int16 SAL_CALL CXPathObject::getShort() throw (RuntimeException) { + ::osl::MutexGuard const g(m_rMutex); + return (sal_Int16) xmlXPathCastToNumber(m_pXPathObj.get()); } @@ -118,6 +132,8 @@ namespace XPath */ sal_Int32 SAL_CALL CXPathObject::getLong() throw (RuntimeException) { + ::osl::MutexGuard const g(m_rMutex); + return (sal_Int32) xmlXPathCastToNumber(m_pXPathObj.get()); } @@ -126,6 +142,8 @@ namespace XPath */ sal_Int64 SAL_CALL CXPathObject::getHyper() throw (RuntimeException) { + ::osl::MutexGuard const g(m_rMutex); + return (sal_Int64) xmlXPathCastToNumber(m_pXPathObj.get()); } @@ -134,6 +152,8 @@ namespace XPath */ float SAL_CALL CXPathObject::getFloat() throw (RuntimeException) { + ::osl::MutexGuard const g(m_rMutex); + return (float) xmlXPathCastToNumber(m_pXPathObj.get()); } @@ -142,6 +162,8 @@ namespace XPath */ double SAL_CALL CXPathObject::getDouble() throw (RuntimeException) { + ::osl::MutexGuard const g(m_rMutex); + return xmlXPathCastToNumber(m_pXPathObj.get()); } @@ -150,8 +172,12 @@ namespace XPath */ OUString SAL_CALL CXPathObject::getString() throw (RuntimeException) { - const sal_Char* x1 = (sal_Char*) xmlXPathCastToString(m_pXPathObj.get()); - return OUString(x1, strlen(x1), RTL_TEXTENCODING_UTF8); + ::osl::MutexGuard const g(m_rMutex); + + ::boost::shared_ptr<xmlChar const> str( + xmlXPathCastToString(m_pXPathObj.get()), xmlFree); + sal_Char const*const pS(reinterpret_cast<sal_Char const*>(str.get())); + return OUString(pS, strlen(pS), RTL_TEXTENCODING_UTF8); } } |