--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/apicompatanamdw/compatanalysercmd/libraryanalyser/inc/xmlnode.hpp Tue Jan 12 14:52:39 2010 +0530
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include <string>
+#include <iostream>
+#include <map>
+#include <vector>
+#include <algorithm>
+using namespace std;
+
+#ifndef XMLNODE
+#define XMLNODE
+
+class XMLNode
+{
+public:
+ typedef map<string, string> Attributes;
+
+ XMLNode();
+ XMLNode(const XMLNode&);
+ XMLNode(const string&);
+ XMLNode(const string&, const string&);
+ virtual ~XMLNode();
+
+ // Operator overloads
+ bool operator==(const XMLNode&);
+ bool operator==(const string&);
+ bool operator!=(const XMLNode&);
+ bool operator!=(const string&);
+ bool operator<(const XMLNode&) const;
+ bool operator<(const string&) const;
+ bool operator>(const XMLNode&) const;
+ bool operator>(const string&) const;
+ XMLNode& operator=(const XMLNode&);
+
+ // Accessors and Mutators
+ const string& value() const { return value_; }
+ void value(const string& v) { value_ = v; }
+
+ const string& name() const { return name_; }
+ void name(const string& n) { name_ = n; }
+
+ void addChild(XMLNode&);
+ void child(XMLNode&);
+ XMLNode child(const string&);
+ XMLNode child(const string& elementname, int& index);
+
+ bool hasChild(const string&);
+ size_t childCount() { return children_.size(); }
+ bool children() { return (!children_.empty()); }
+
+public:
+ vector<XMLNode> children_;
+
+private:
+ string value_;
+ string name_;
+ Attributes attributes_;
+
+};
+
+XMLNode::XMLNode()
+{
+}
+
+XMLNode::XMLNode(const std::string& n, const std::string& v)
+{
+ name_ = n;
+ value_ = v;
+}
+
+XMLNode::XMLNode(const std::string& n)
+{
+ name_ = n;
+}
+
+XMLNode::XMLNode(const XMLNode& rhs)
+{
+ if(&rhs == this)
+ return;
+
+ this->operator=(rhs);
+}
+
+XMLNode::~XMLNode()
+{
+}
+
+XMLNode& XMLNode::operator=(const XMLNode& rhs)
+{
+ if(&rhs == this)
+ return *this;
+
+ value_ = rhs.value_;
+ name_ = rhs.name_;
+ children_ = rhs.children_;
+ return *this;
+}
+
+bool XMLNode::operator==(const XMLNode& n)
+{
+ return ((n.name_ == name_) && (n.value_ == value_));
+}
+
+bool XMLNode::operator==(const std::string& n)
+{
+ return (n == name_);
+}
+
+bool XMLNode::operator!=(const XMLNode& n)
+{
+ return ((n.name_ != name_) && (n.value_ != value_));
+}
+
+bool XMLNode::operator!=(const std::string& n)
+{
+ return (n != name_);
+}
+
+bool XMLNode::operator<(const XMLNode& n) const
+{
+ return ((n.name_ < name_) && (n.value_ < value_));
+}
+
+bool XMLNode::operator<(const std::string& n) const
+{
+ return (strcmp(name_.c_str(), n.c_str()) < 0);
+}
+
+bool XMLNode::operator>(const XMLNode& n) const
+{
+ return ((n.name_ > name_) && (n.value_ > value_));
+}
+
+bool XMLNode::operator>(const std::string& n) const
+{
+ return (strcmp(name_.c_str(), n.c_str()) > 0);
+}
+
+void XMLNode::child(XMLNode& c)
+{
+ children_.push_back(c);
+}
+
+bool XMLNode::hasChild(const std::string& name)
+{
+ vector<XMLNode>::iterator iter = find(children_.begin(), children_.end(), name);
+ return (iter != children_.end());
+}
+
+XMLNode XMLNode::child(const std::string& name)
+{
+ vector<XMLNode>::iterator iter = find(children_.begin(), children_.end(), name);
+ if(iter != children_.end())
+ return *iter;
+
+ return XMLNode();
+}
+XMLNode XMLNode::child(const std::string& elementname, int& index)
+{
+ vector<XMLNode>::iterator iter = find(children_.begin(), children_.end(), elementname);
+ if(iter != children_.end())
+ {
+ index = (int)(iter - children_.begin());
+ return *iter;
+ }
+
+ return XMLNode();
+}
+
+
+
+ostream& operator<<(ostream& o, XMLNode& node)
+{
+ o << "Writing Node name to stream : " << node.name() << endl;
+ return o;
+}
+
+ostream& operator<<(XMLNode& node, ostream& o)
+{
+ o << "Writing Node name to stream : " << node.name() << endl;
+ return o;
+}
+
+void XMLNode::addChild(XMLNode& node)
+{
+ children_.push_back(node);
+}
+
+#endif // XMLNODE