apicompatanamdw/compatanalysercmd/libraryanalyser/inc/xmldomainmap.hpp
changeset 0 638b9c697799
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apicompatanamdw/compatanalysercmd/libraryanalyser/inc/xmldomainmap.hpp	Tue Jan 12 14:52:39 2010 +0530
@@ -0,0 +1,128 @@
+/*
+* 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: 
+*
+*/
+#ifndef XMLDATAMAP
+#define XMLDATAMAP
+
+// STL related includes
+#include <stack>
+#include <list>
+//#include <unistd.h>
+using namespace std;
+
+template<typename T>
+class XMLDomainMap
+{
+     //   typedef T              DomainObject; //satarupa
+	typedef std::stack<T>	DomainObjectStack;
+	typedef std::list<T>         DomainObjectList;
+
+public:
+	XMLDomainMap() {
+	}
+	
+	XMLDomainMap(const XMLDomainMap<T>& rhs) {
+		if(&rhs == this)
+			return;
+
+		this->operator=(rhs);
+		return;
+	}
+	
+	virtual ~XMLDomainMap() {
+	}
+
+	XMLDomainMap<T>& operator=(const XMLDomainMap<T>& rhs) {
+		if(&rhs == this)
+			return *this;
+
+		objectStack = rhs.objectStack;
+		objectList = rhs.objectList;
+		return *this;
+	}
+
+	// public interface
+	void create(const std::string& name) {
+		T obj(name);
+		objectStack.push(obj);
+	}
+
+	void create(const std::string& name,const std::string& value) {
+		T obj(name,value);
+		objectStack.push(obj);
+	}
+
+
+	// called from the endElement method of SAX Handler
+	void add(const std::string& name) {
+		T child = objectStack.top();
+		child.name(name);
+		objectStack.pop();
+	
+		if(objectStack.size())
+		{
+			T parent = objectStack.top();
+			objectStack.pop();
+			parent.addChild(child);
+			objectStack.push(parent);
+		}
+		else
+		{
+			objectList.push_back(child);
+		}
+	}
+
+	// called from the characters method of SAX Handler
+	void updateAttribute(const std::string& v)
+	{
+		T obj = objectStack.top();		
+		
+		if((obj!= "headerfile") &&(obj != "library") && (obj != "version"))
+		{
+			objectStack.pop();
+			if((v.c_str()[0] == '&')||(v.c_str()[0] == '>')||(v.c_str()[0] == '<'))
+			{
+				string ws = obj.value();
+				ws.append(v.data());
+				obj.value(ws);
+
+			}
+			else
+			    obj.value(v);
+
+			objectStack.push(obj);
+		}
+	}
+
+	size_t size() 
+        { 
+                return objectList.size(); 
+        }
+
+        T& root() 	
+        { 
+		//DomainObjectList::iterator start = objectList.begin();
+               // return *start; 
+                 return *(objectList.begin());
+               
+	}	
+
+private:
+	DomainObjectStack	objectStack;
+	DomainObjectList	objectList;
+};
+
+#endif // XMLDATAMAP