diff -r 000000000000 -r 638b9c697799 apicompatanamdw/compatanalysercmd/headeranalyser/src/NodeIndex.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/apicompatanamdw/compatanalysercmd/headeranalyser/src/NodeIndex.h Tue Jan 12 14:52:39 2010 +0530 @@ -0,0 +1,253 @@ +/* +* Copyright (c) 2006-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 __NODE_INDEX_H_ +#define __NODE_INDEX_H_ + +#include "CmdGlobals.h" +#ifdef __WIN__ +#pragma warning(disable:4786) +#endif +#include +#include +#include +#include + +using namespace std; + +XERCES_CPP_NAMESPACE_USE + +//The access specifiers in class +enum TAccess +{ + EAccessGlobal, + EAccessPublic, + EAccessProtected, + EAccessPrivate, + EAccessHidden +}; + +// The compare function for the fully qualified name that takes +// into account the identity of the node +struct compareFQName +{ +bool operator()( + const pair& p1, + const pair& p2) const; +}; + +// General compare function for XMLCh +struct ltstr +{ + bool operator()(const XMLCh * s1,const XMLCh * s2) const; +}; + +// Struct for data members +struct DataMember +{ + string iName; + DOMNode* iNode; + int iOffset; + TAccess iAccess; + int iLineNo; + + DataMember(string name,DOMNode* node, int offset, TAccess access, int lineNo): + iName(name), + iNode(node), + iOffset(offset), + iAccess(access), + iLineNo(lineNo) + { + } + + DataMember(const DataMember& other) + { + this->operator=(other); + } + + const DataMember & operator=(const DataMember& other) + { + iName = other.iName; + iNode = other.iNode; + iOffset = other.iOffset; + iAccess = other.iAccess; + iLineNo = other.iLineNo; + return *this; + } +}; + + +/** +* The NodeIndex class indexes the nodes of the XML node tree by +* the fully qualified name and node ID. +*/ +class NodeIndex +{ +public: + typedef map< pair , DOMNode*, compareFQName > fqnamemap; + typedef map< const XMLCh *,pair, ltstr > fileidmap; + typedef vector > vtable_t; + typedef map< string, vtable_t > vtableindex_t; + typedef vector dtable_t; + typedef map< string, dtable_t > dtableindex_t; +public: + + /** + * Clears the node map + */ + void clear(); + + /** + * Add the node with its id to the map + */ + void AddNodeIdToMap(DOMNode * node); + + /** + * Add the node with fully qualified name to the map + * @param node current DOMNode pointer + * @param fqname fully qualified name + */ + void AddNodeFQNameToMap(DOMNode * node, const pair& fqname); + + /** + * Add the file node to file map + * @param id the node id + * @param file filepair to add + */ + void AddFileNodeToMap(const XMLCh* id,pair file); + + /** + * Finds the node with id. + * @param root DOMNode pointer + * @param id of the node + * @return NULL if not found + */ + DOMNode * FindNodeById(DOMNode * root, const XMLCh* id); + + /** + * Finds the node with fully qualified name. + * @param root DOMNode pointer + * @param FQName fullu qualified name of the node + * @return pointer to DOMnode or NULL if not found + */ + DOMNode * FindNodeByFQName(DOMNode * root, pair FQName); + + /** + * Returns the file pair by file id + * @param fileid id to search + * @return found filepair + */ + const pair& FindFileByFileId(const XMLCh* fileid); + + /** + * Dumps the tables (for debugging) + */ + void DumpTables(); + + /** + * Adds a virtual function to the table vtable + * @param vtable virtual table name + * @param functionsig function signature + * @param node pointer to DOMNode + */ + void AddVirtualFunction(const string& vtable,const string& functionsig, DOMNode* node); + + /** + * Gets the virtual table vtable + * @param vtable virtual table name + * @return virtual table pointer + */ + const vtable_t* GetVirtualTable(const string& vtable); + + /** + * Add empty virtual table + * @param vtable virtual table name + * @return virtual table pointer + */ + const vtable_t* AddEmptyVirtualTable(const string& vtable); + + /** + * Adds a data member to the table vtable + * @param parentNode Node iterator pointing to the parent node. + * @param parentName Name of the parent node. + * @param memberName name of the data table + * @param memberNode + * @param index offset value of member + * @param access how restricted the access of member is + */ + void AddDataMember(const HANodeIterator& parentNode, const string& parentName, const string& memberName, DOMNode* memberNode, int index, TAccess access,int lineNo); + + /** + * Gets the data member table + * @param node Node iterator pointing to the node whose members should be returned. + * @param nodeName Name of the node. + * @return table pointer + */ + const dtable_t* GetDataMemberTable(const HANodeIterator& node, const string& nodeName); + + /** + * Add empty data member table + * @param node Reference to the node of the object, whose members will + * get the new (empty) table entry + * @param nodeName Name of the node. + * @return data table pointer + */ + const dtable_t* AddEmptyDataMemberTable(const HANodeIterator& node, const string& nodeName); + +//Private methods +private: + + /** + * Search from the tree + * @param root DOM root node + * @param id to search + * @return id table pointer + */ + DOMNode * FindNodeByIdFromTree(DOMNode * root, const XMLCh* id); + + /** + * Inserts data member entry to the given table. + * @param parentName Name of the data member's parent. + * @param member Data member to be inserted to the data table. + * @param dataTable Reference to the data table. + */ + void InsertDataMember(const string& parentName, const DataMember& member, dtableindex_t& dataTable); + +//Private member variables +private: + + //! Maps node id string to node pointer + map< const XMLCh *,DOMNode*,ltstr > iIdToNodeMap; + + //! Maps filename to list of nodes declared in that file + fileidmap iIdToFileMap; + + //! File node map + fqnamemap iFQNameToNodeMap; + + //! VTable map + vtableindex_t iVTableIndex; + + //! DTable map + dtableindex_t iDTableIndex; + + //! Data table for anonymous classes + dtableindex_t iAnonymousTable; +}; + +#endif