commsfwtools/commstools/utracedecoder/inc/messagedefparser/identifierbase.h
changeset 0 dfb7c4ff071f
--- /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 <string>
+
+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
+