apicompatanamdw/compatanalysercmd/libraryanalyser/inc/xmlnode.hpp
changeset 0 638b9c697799
--- /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