/** * This file is part of the DOM implementation for KDE. * * (C) 1999 Lars Knoll (knoll@kde.org) * (C) 2000 Frederik Holljen (frederik.holljen@hig.no) * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * */ #include "dom/dom2_traversal.h" #include "dom/dom_exception.h" #include "dom/dom_string.h" #include "xml/dom2_traversalimpl.h" namespace DOM { // -------------------------------------------------------------- short NodeFilterCondition::acceptNode(const Node &) const { return NodeFilter::FILTER_ACCEPT; } // -------------------------------------------------------------- NodeFilter::NodeFilter() : impl(0) { } NodeFilter::NodeFilter(NodeFilterCondition *condition) { impl = new NodeFilterImpl(condition); impl->ref(); } NodeFilter::NodeFilter(const NodeFilter &other) { impl = other.impl; if (impl) impl->ref(); } NodeFilter::NodeFilter(NodeFilterImpl *i) { impl = i; if (impl) impl->ref(); } NodeFilter &NodeFilter::operator=(const NodeFilter &other) { if (impl == other.impl) return *this; NodeFilterImpl *old = impl; impl = other.impl; if (impl) impl->ref(); if (old) old->deref(); return *this; } NodeFilter::~NodeFilter() { if (impl) impl->deref(); } short NodeFilter::acceptNode(const Node &node) const { if (impl) return impl->acceptNode(node.handle()); return FILTER_ACCEPT; } // -------------------------------------------------------------- NodeIterator::NodeIterator() { impl = 0; } NodeIterator::NodeIterator(const NodeIterator &other) { impl = other.impl; if (impl) impl->ref(); } NodeIterator::NodeIterator(NodeIteratorImpl *i) { impl = i; if (impl) impl->ref(); } NodeIterator &NodeIterator::operator=(const NodeIterator &other) { if (impl == other.impl) return *this; NodeIteratorImpl *old = impl; impl = other.impl; if (impl) impl->ref(); if (old) old->deref(); return *this; } NodeIterator::~NodeIterator() { if (impl) impl->deref(); } Node NodeIterator::root() const { if (impl) return impl->root(); return 0; } unsigned long NodeIterator::whatToShow() const { if (impl) return impl->whatToShow(); return 0; } NodeFilter NodeIterator::filter() const { if (impl) return impl->filter(); return NodeFilter(); } bool NodeIterator::expandEntityReferences() const { if (impl) return impl->expandEntityReferences(); return 0; } Node NodeIterator::nextNode() { if (!impl) throw DOMException(DOMException::INVALID_STATE_ERR); int exceptioncode = 0; NodeImpl *result = impl->nextNode(exceptioncode); if (exceptioncode) throw DOMException(exceptioncode); return result; } Node NodeIterator::previousNode() { if (!impl) throw DOMException(DOMException::INVALID_STATE_ERR); int exceptioncode = 0; NodeImpl *result = impl->previousNode(exceptioncode); if (exceptioncode) throw DOMException(exceptioncode); return result; } void NodeIterator::detach() { if (!impl) throw DOMException(DOMException::INVALID_STATE_ERR); int exceptioncode = 0; impl->detach(exceptioncode); if (exceptioncode) throw DOMException(exceptioncode); } Node NodeIterator::referenceNode() const { if (!impl) throw DOMException(DOMException::INVALID_STATE_ERR); return impl->referenceNode(); } bool NodeIterator::pointerBeforeReferenceNode() const { if (!impl) throw DOMException(DOMException::INVALID_STATE_ERR); return impl->pointerBeforeReferenceNode(); } // -------------------------------------------------------------- TreeWalker::TreeWalker() { impl = 0; } TreeWalker::TreeWalker(const TreeWalker &other) { impl = other.impl; if (impl) impl->ref(); } TreeWalker::TreeWalker(TreeWalkerImpl *i) { impl = i; if (impl) impl->ref(); } TreeWalker &TreeWalker::operator=(const TreeWalker &other) { if (impl == other.impl) return *this; TreeWalkerImpl *old = impl; impl = other.impl; if (impl) impl->ref(); if (old) old->deref(); return *this; } TreeWalker::~TreeWalker() { if (impl) impl->deref(); } Node TreeWalker::root() const { if (impl) return impl->root(); return 0; } unsigned long TreeWalker::whatToShow() const { if (impl) return impl->whatToShow(); return 0; } NodeFilter TreeWalker::filter() const { if (impl) return impl->filter(); return NodeFilter(); } bool TreeWalker::expandEntityReferences() const { if (impl) return impl->expandEntityReferences(); return false; } Node TreeWalker::currentNode() const { if (impl) return impl->currentNode(); return 0; } void TreeWalker::setCurrentNode(const Node &node) { if (impl) { int exceptioncode = 0; impl->setCurrentNode(node.handle(), exceptioncode); if (exceptioncode) throw DOMException(exceptioncode); } } Node TreeWalker::parentNode() { if (impl) return impl->parentNode(); return 0; } Node TreeWalker::firstChild() { if (impl) return impl->firstChild(); return 0; } Node TreeWalker::lastChild() { if (impl) return impl->lastChild(); return 0; } Node TreeWalker::previousSibling() { if (impl) return impl->previousSibling(); return 0; } Node TreeWalker::nextSibling() { if (impl) return impl->nextSibling(); return 0; } Node TreeWalker::previousNode() { if (impl) return impl->previousNode(); return 0; } Node TreeWalker::nextNode() { if (impl) return impl->nextNode(); return 0; } } // namespace DOM