commsfwtools/commstools/utracedecoder/src/messagedefparser/structidentifier.cpp
changeset 0 dfb7c4ff071f
equal deleted inserted replaced
-1:000000000000 0:dfb7c4ff071f
       
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <cassert>
       
    17 #include <string>
       
    18 #include <iostream>
       
    19 #include <sstream>
       
    20 #include <iomanip>
       
    21 
       
    22 #include "messagedefparser\structidentifier.h"
       
    23 
       
    24 namespace Parser
       
    25 {
       
    26 
       
    27 void CStructIdentifier::AddMember(TMember* aMember)
       
    28     {
       
    29     assert(aMember);
       
    30     assert(aMember->iMemberType->Type() == Parser::EPadTypeIdentifier || aMember->iMemberName[0] != 0);
       
    31     assert(!FindMember(aMember->iMemberName));
       
    32     iMembers.push_back(aMember);
       
    33     aMember->iOffset = iSize;
       
    34     iSize += aMember->iMemberType->TotalSize() * aMember->iArraySize;
       
    35     }
       
    36 
       
    37 
       
    38 const TMember* CStructIdentifier::FindMember(const std::string& aName)
       
    39     {
       
    40     unsigned int i;
       
    41     TMember* tmp;
       
    42     
       
    43     if (aName[0] == 0)
       
    44         {
       
    45         return NULL;
       
    46         }
       
    47 
       
    48     for (i=0; i<iMembers.size(); i++)
       
    49         {
       
    50         tmp = iMembers.at(i);
       
    51         if (!_strcmpi(tmp->iMemberName.c_str(), aName.c_str()))
       
    52             {
       
    53             return tmp;
       
    54             }
       
    55         }
       
    56     return NULL;
       
    57     }
       
    58 
       
    59 void CStructIdentifier::Describe(const unsigned char* aData, unsigned int aLength, const void* aOptions, std::ostream& aOutput) const
       
    60     {
       
    61     unsigned int i;
       
    62     TMember* member;
       
    63     for (i=0; i<iMembers.size(); i++)
       
    64         {
       
    65         member = iMembers.at(i);
       
    66         if (member->iMemberName[0] != 0) // padding members have no name
       
    67             {
       
    68             aOutput << "[" + std::string(member->iMemberName) + "=";
       
    69             member->iMemberType->Describe(aData + member->iOffset, member->iMemberType->Size(), member->iIdentifierOptions, aOutput);
       
    70             aOutput << "] ";
       
    71             }
       
    72         }
       
    73     }
       
    74 
       
    75 } // namespace Parser
       
    76