diff -r 000000000000 -r dfb7c4ff071f commsfwtools/commstools/utracedecoder/inc/messagedefparser/identifierbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwtools/commstools/utracedecoder/inc/messagedefparser/identifierbase.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,158 @@ +// Copyright (c) 2007-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 IDENTIFIERBASE_H +#define IDENTIFIERBASE_H + +#include + +namespace Parser +{ + +/** +The types of identifiers +*/ +enum TIdentifierType + { + /** Constants (only integer constants supported) */ + EConstIdentifier, + + /** Any integer type (INTx/UINTx) */ + EIntegerTypeIdentifier, + + /** The enumeration type - contains enumeration value types */ + EEnumTypeIdentifier, + + /** The enumation value type that represents the values contained in an enumeration */ +// EEnumValueIdentifier, + + /** A user defined structure */ + EStructIdentifier, + + /** A user defined signature */ + ESignatureIdentifier, + + /** A user defined context */ + EContextIdentifier, + + /** A user definied message */ + EMessageIdentifier, + + /** Identifies padding bytes */ + EPadTypeIdentifier, + + /** The builtin struct for TMessageId */ + EMessageIdTypeIdentifier, + }; + +/** +CIdentifierBase is an abstract class that provides the base functionality +for any basic or builtin types. +*/ +class CIdentifierBase + { + public: + /** + D'tor + */ + virtual ~CIdentifierBase(); + + /** + Returns the type of identifier that this identifier is + @see TIdentifierType + */ + inline TIdentifierType Type() const + { + return iType; + } + + /** + Returns the unique name that identifies this identifier + */ + inline const char* Name() const + { + return iName; + } + + /** + Returns identifier flags + */ + inline int Flags() const + { + return iFlags; + } + + /** Returns the size of this type in bytes */ + int Size() const; + + /** Returns the size of this type in bytes including the size of any base types */ + virtual int TotalSize() const; + + /** + Formats the data provided according to the layout of the type represented by + the implementation and outputs it to the stream. + @param aData A pointer to the buffer containing the data for this type. + @param aLength The number of bytes believed to belong to this type. + It should match the TotalSize() of the identifier. + @param aOptions A pointer to an identifier type specific object containing + options that the type will understand and can use to alter the output + formatting on a per item basis. This usually comes from TMember. + @param aDescription The stream to output to. + */ + virtual void Describe(const unsigned char* aData, unsigned int aLength, const void* aOptions, std::ostream& aDescription) const = 0; + + protected: + explicit CIdentifierBase(TIdentifierType aType, const char* aName) + { + iType = aType; + iName = _strdup(aName); + iSize = 0; + iFlags = 0; + } + + protected: + int iSize; // The size of this type in bytes + int iFlags; + + private: + TIdentifierType iType; + char* iName; + }; + + +/** +TMember represents a data member of a structure style type. +These are STRUCT, CONTEXT, and SIGNATURE. +*/ +struct TMember + { + public: + TMember() + : iMemberType(NULL), iOffset(0), iArraySize(1), iIdentifierOptions(NULL) + { + } + + const CIdentifierBase* iMemberType; + std::string iMemberName; + int iOffset; + int iArraySize; + void* iIdentifierOptions; + }; + +} // namespace Parser + +#endif +// IDENTIFIERBASE_H +