devicediagnosticsfw/diagpluginbase/src/diagresultdetailbasicitem.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:27:42 +0100
branchRCL_3
changeset 26 19bba8228ff0
parent 0 b497e44ab2fc
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2007 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:  Class definition of CDiagResultDetailBasicItem
*
*/


// SYSTEM INCLUDE FILES
#include <s32strm.h>            // RReadStream, RWriteStream

// USER INCLUDE FILES
#include "diagresultdetailbasicitem.h"

// CONSTANTS
const TInt KDiagResultDetailBasicMaxNameLen = 50;
const TInt KDiagResultDetailBasicMaxFieldValueLen = 1024;

// ======== MEMBER FUNCTIONS ========
// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::NewL
// ---------------------------------------------------------------------------
//
CDiagResultDetailBasicItem* CDiagResultDetailBasicItem::NewL(
            TInt aFieldId,
            const TDesC8& aFieldName,
            TInt aValue )
    {
    CDiagResultDetailBasicItem* self = new( ELeave )
        CDiagResultDetailBasicItem();
    CleanupStack::PushL( self );

    self->iFieldId = aFieldId;
    self->iFieldName = aFieldName.AllocL();
    self->iFieldType = ETypeInt;
    self->iValue.iInt = aValue;
    
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::NewL
// ---------------------------------------------------------------------------
//
CDiagResultDetailBasicItem* CDiagResultDetailBasicItem::NewL(
            TInt aFieldId,
            const TDesC8& aFieldName,
            const TDesC8& aValue )
    {
    CDiagResultDetailBasicItem* self = new( ELeave )
        CDiagResultDetailBasicItem();
    CleanupStack::PushL( self );

    self->iFieldId = aFieldId;
    self->iFieldName = aFieldName.AllocL();
    self->iFieldType = ETypeDes8;
    self->iValue.iBuffer8 = aValue.AllocL();
    
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::NewL
// ---------------------------------------------------------------------------
//
CDiagResultDetailBasicItem* CDiagResultDetailBasicItem::NewL(
            TInt aFieldId,
            const TDesC8& aFieldName,
            const TDesC16& aValue )
    {
    CDiagResultDetailBasicItem* self = new( ELeave )
        CDiagResultDetailBasicItem();
    CleanupStack::PushL( self );

    self->iFieldId = aFieldId;
    self->iFieldName = aFieldName.AllocL();
    self->iFieldType = ETypeDes16;
    self->iValue.iBuffer16 = aValue.AllocL();
    
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::NewL
// ---------------------------------------------------------------------------
//
CDiagResultDetailBasicItem* CDiagResultDetailBasicItem::NewL(
            RReadStream& aReadStream )
    {
    CDiagResultDetailBasicItem* self = new( ELeave )
        CDiagResultDetailBasicItem();
    CleanupStack::PushL( self );

    self->InternalizeL( aReadStream );
    
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::CDiagResultDetailBasicItem
// ---------------------------------------------------------------------------
//
CDiagResultDetailBasicItem::CDiagResultDetailBasicItem()
    {
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::~CDiagResultDetailBasicItem
// ---------------------------------------------------------------------------
//
CDiagResultDetailBasicItem::~CDiagResultDetailBasicItem()
    {
    delete iFieldName;
    iFieldName = NULL;

    switch ( Type() )
        {
        case ETypeDes16:
            delete iValue.iBuffer16;
            iValue.iBuffer16 = NULL;
            break;
        case ETypeDes8:
            delete iValue.iBuffer8;
            iValue.iBuffer8 = NULL;
            break;
        default:
            // do nothing
            break;
        }
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::FieldId
// ---------------------------------------------------------------------------
//
TInt CDiagResultDetailBasicItem::FieldId() const
    {
    return iFieldId;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::FieldName
// ---------------------------------------------------------------------------
//
const TDesC8& CDiagResultDetailBasicItem::FieldName() const
    {
    return *iFieldName;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::Type
// ---------------------------------------------------------------------------
//
CDiagResultDetailBasicItem::TFieldType CDiagResultDetailBasicItem::Type() const
    {
    return iFieldType;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::GetValue
// ---------------------------------------------------------------------------
//
TInt CDiagResultDetailBasicItem::GetValue( TInt& aValue ) const
    {
    if ( Type() != ETypeInt )
        return KErrArgument;

    aValue = iValue.iInt;
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::GetValue
// ---------------------------------------------------------------------------
//
TInt CDiagResultDetailBasicItem::GetValue( TPtrC8& aValue ) const
    {
    if ( Type() != ETypeDes8 )
        return KErrArgument;
    
    aValue.Set( iValue.iBuffer8->Des() );
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::GetValue
// ---------------------------------------------------------------------------
//
TInt CDiagResultDetailBasicItem::GetValue( TPtrC16& aValue ) const
    {
    if ( Type() != ETypeDes16 )
        return KErrArgument;
    

    aValue.Set( iValue.iBuffer16->Des() );
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::InternalizeL
// ---------------------------------------------------------------------------
//
void CDiagResultDetailBasicItem::InternalizeL( RReadStream& aReadStream )
    {
    // first read id
    iFieldId = aReadStream.ReadInt32L();

    // read field Type
    iFieldType = ( TFieldType ) aReadStream.ReadUint32L();

    // read field name
    iFieldName = HBufC8::NewL( aReadStream, KDiagResultDetailBasicMaxNameLen );

    switch ( Type() )
        {
        case ETypeInt:
            iValue.iInt = aReadStream.ReadInt32L();
            break;
        case ETypeDes16:
            iValue.iBuffer16 = HBufC16::NewL( aReadStream, 
                KDiagResultDetailBasicMaxFieldValueLen );
            break;
        case ETypeDes8:
            iValue.iBuffer8 = HBufC8::NewL( aReadStream, 
                KDiagResultDetailBasicMaxFieldValueLen );
            break;
        default:
            User::Leave( KErrCorrupt );
        }
    }

// ---------------------------------------------------------------------------
// CDiagResultDetailBasicItem::ExternalizeL
// ---------------------------------------------------------------------------
//
void CDiagResultDetailBasicItem::ExternalizeL( RWriteStream& aWriteStream ) const
    {
    // first field id
    aWriteStream.WriteInt32L( iFieldId );

    // write field Type
    aWriteStream.WriteUint32L( ( TUint )Type() );

    // write field name
    aWriteStream << FieldName();

    switch ( Type() )
        {
        case ETypeInt:
            aWriteStream.WriteInt32L( iValue.iInt );
            break;
        case ETypeDes16:
            aWriteStream << *( iValue.iBuffer16 );
            break;
        case ETypeDes8:
            aWriteStream << *( iValue.iBuffer8 );
            break;
        default:
            User::Leave( KErrCorrupt );
        }
    }

// End of File