From 6fd9af13a8614a4b95e8be1518e745915ef8bb56 Mon Sep 17 00:00:00 2001 From: Bob Jamison Date: Wed, 12 Apr 2006 13:25:21 +0000 Subject: Add new rearranged /dom directory (bzr r479) --- src/dom/xpathtoken.cpp | 229 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 src/dom/xpathtoken.cpp (limited to 'src/dom/xpathtoken.cpp') diff --git a/src/dom/xpathtoken.cpp b/src/dom/xpathtoken.cpp new file mode 100644 index 000000000..9d2b86215 --- /dev/null +++ b/src/dom/xpathtoken.cpp @@ -0,0 +1,229 @@ +/** + * Phoebe DOM Implementation. + * + * This is a C++ approximation of the W3C DOM model, which follows + * fairly closely the specifications in the various .idl files, copies of + * which are provided for reference. Most important is this one: + * + * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html + * + * Authors: + * Bob Jamison + * + * Copyright (C) 2005 Bob Jamison + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#include "xpathtoken.h" +#include + + + +namespace org +{ +namespace w3c +{ +namespace dom +{ +namespace xpath +{ + + +//######################################################################## +//# X P A T H S T A C K I T E M +//######################################################################## + +/** + * + */ +StackItem::StackItem() +{ + ival = 0L; + dval = 0.0; +} + + +/** + * + */ +StackItem::StackItem(const StackItem &other) +{ + sval = other.sval; + ival = other.ival; + dval = other.dval; +} + + +/** + * + */ +StackItem::~StackItem() +{ +} + + +//######################################################################## +//# X P A T H S T A C K +//######################################################################## + +/** + * + */ +Stack::Stack() +{ + size = 0; +} + + +/** + * + */ +Stack::Stack(const Stack &other) +{ + size = other.size; + for (int i=0 ; i=STACK_SIZE) + { + return; + } + items[size++] = item; +} + +/** + * + */ +StackItem Stack::pop() +{ + if (size<1) + { + StackItem item; + return item; + } + return items[--size]; +} + + + +//######################################################################## +//# T O K E N L I S T +//######################################################################## + +/** + * + */ +TokenList::TokenList() +{ +} + + +/** + * + */ +TokenList::~TokenList() +{ + clear(); +} + +/** + * + */ +void TokenList::clear() +{ + std::vector::iterator iter; + for (iter = tokens.begin() ; iter!= tokens.end() ; iter++) + { + delete (*iter); + } + tokens.clear(); +} + +/** + * + */ +void TokenList::add(Token *tok) +{ + tokens.push_back(tok); +} + +/** + * This method "executes" a list of Tokens in the context of a DOM root + * Node, returning a list of Nodes that match the xpath expression. + */ +NodeList TokenList::execute(const Node *root) +{ + NodeList list; + + if (!root) + return list; + + Stack stack; + //### Execute the token list + std::vector::iterator iter; + for (iter = tokens.begin() ; iter != tokens.end() ; iter++) + { + Token *tok = *iter; + tok->execute(stack, list); + } + + return list; +} + + +/** + * + */ +void TokenList::dump() +{ + std::vector::iterator iter; + printf("############# TOKENS\n"); + for (iter = tokens.begin() ; iter != tokens.end() ; iter++) + { + Token *tok = *iter; + tok->dump(); + } +} + + + + + +} // namespace xpath +} // namespace dom +} // namespace w3c +} // namespace org +//######################################################################## +//# E N D O F F I L E +//######################################################################## + + + -- cgit v1.2.3