diff -r 000000000000 -r b497e44ab2fc devicediagnosticsfw/diagresultsdb/client/src/diagresultsdatabaseItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devicediagnosticsfw/diagresultsdb/client/src/diagresultsdatabaseItem.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,332 @@ +/* +* 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 CDiagResultsDatabaseItem +* +*/ + + +#include + +#include "diagresultsdatabaseitem.h" + +// --------------------------------------------------------------------------- +// NewL.Used when creating the object from a stream that contains the +// serialized object. +// --------------------------------------------------------------------------- +// +EXPORT_C CDiagResultsDatabaseItem* CDiagResultsDatabaseItem::NewL ( + RReadStream& aStream ) + { + CDiagResultsDatabaseItem* self = new( ELeave ) CDiagResultsDatabaseItem(); + CleanupStack::PushL( self ); + self->ConstructL( aStream ); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// NewL. +// --------------------------------------------------------------------------- +// +EXPORT_C CDiagResultsDatabaseItem* CDiagResultsDatabaseItem::NewL ( + TUid aTestUid, + TBool aDependencyExecution, + TResult aResult, + TTime aStartTime, + TTime aEndTime, + CBufFlat* aDetailsData ) + { + + CDiagResultsDatabaseItem* self = new( ELeave ) CDiagResultsDatabaseItem( + aTestUid, aDependencyExecution, aResult, + aStartTime, aEndTime, aDetailsData ); + return self; + } + +// --------------------------------------------------------------------------- +// NewLC. +// --------------------------------------------------------------------------- +// +EXPORT_C CDiagResultsDatabaseItem* CDiagResultsDatabaseItem::NewLC ( + TUid aTestUid, + TBool aDependencyExecution, + TResult aResult, + TTime aStartTime, + TTime aEndTime, + CBufFlat* aDetailsData ) + { + CDiagResultsDatabaseItem* self = new( ELeave ) CDiagResultsDatabaseItem( + aTestUid, aDependencyExecution, aResult, + aStartTime, aEndTime, aDetailsData ); + CleanupStack::PushL( self ); + return self; + } + +// --------------------------------------------------------------------------- +// NewL. Copy constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CDiagResultsDatabaseItem* CDiagResultsDatabaseItem::NewL ( + const CDiagResultsDatabaseItem& aOriginal ) + { + const CBufFlat* detailData = aOriginal.DetailsData(); + + CBufFlat* detailDataCopy = NULL; + + if ( detailData ) + { + detailDataCopy = CBufFlat::NewL( detailData->Size() ); + CleanupStack::PushL( detailDataCopy ); + + TPtr8 ptr = detailDataCopy->Ptr( 0 ); + detailData->Read( 0, ptr ); + } + + CDiagResultsDatabaseItem* self = CDiagResultsDatabaseItem::NewL( + aOriginal.TestUid(), + aOriginal.WasDependency(), + aOriginal.TestResult(), + aOriginal.TimeStarted(), + aOriginal.TimeCompleted(), + detailDataCopy ); + + if ( detailDataCopy ) + { + CleanupStack::Pop( detailDataCopy ); + } + + return self; + } + +// ConstructL. +// --------------------------------------------------------------------------- +// +void CDiagResultsDatabaseItem::ConstructL ( RReadStream& aStream ) + { + InternalizeL( aStream ); + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CDiagResultsDatabaseItem::~CDiagResultsDatabaseItem() + { + if ( iDetailsData ) + { + iDetailsData->Reset(); + } + + delete iDetailsData; + iDetailsData = NULL; + } + +// --------------------------------------------------------------------------- +// C++ default constructor. +// --------------------------------------------------------------------------- +// +CDiagResultsDatabaseItem::CDiagResultsDatabaseItem() + { + + } + +// --------------------------------------------------------------------------- +// Getter. +// --------------------------------------------------------------------------- +// +EXPORT_C TUid CDiagResultsDatabaseItem::TestUid() const + { + return iTestUid; + } + +// --------------------------------------------------------------------------- +// Getter. +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CDiagResultsDatabaseItem::WasDependency() const + { + return iDependencyExecution; + } + +// --------------------------------------------------------------------------- +// Getter. +// --------------------------------------------------------------------------- +// +EXPORT_C CDiagResultsDatabaseItem::TResult + CDiagResultsDatabaseItem::TestResult() const + { + return iResult; + } + +// --------------------------------------------------------------------------- +// Getter. +// --------------------------------------------------------------------------- +// +EXPORT_C TTime CDiagResultsDatabaseItem::TimeStarted() const + { + return iStartTime; + } + +// --------------------------------------------------------------------------- +// Getter. +// --------------------------------------------------------------------------- +// +EXPORT_C TTime CDiagResultsDatabaseItem::TimeCompleted() const + { + return iEndTime; + } + +// --------------------------------------------------------------------------- +// Getter. +// --------------------------------------------------------------------------- +// +EXPORT_C const CBufFlat* CDiagResultsDatabaseItem::DetailsData() const + { + return iDetailsData; + } + +// --------------------------------------------------------------------------- +// Externalize the object into writestream. +// --------------------------------------------------------------------------- +// +EXPORT_C void CDiagResultsDatabaseItem::ExternalizeL( + RWriteStream& aStream ) const + { + aStream.WriteInt32L ( iTestUid.iUid ); + aStream.WriteUint8L ( iDependencyExecution ); + aStream.WriteInt16L ( iResult ); + + WriteTimeToStreamL( aStream, iStartTime ); + WriteTimeToStreamL( aStream, iEndTime ); + + if ( iDetailsData == NULL ) + { + aStream.WriteUint32L ( 0 ); + } + else + { + aStream.WriteUint32L ( iDetailsData->Size() ); + + if ( iDetailsData->Size() > 0 ) + { + aStream.WriteL( iDetailsData->Ptr(0), iDetailsData->Size() ); + } + } + } + + +// --------------------------------------------------------------------------- +// Bytes are calculated from ExternalizeL method. (216 bits = 27 bytes). +// 32 + 8 + 16 + 64 + 64 + 32 = 216 bits. +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDiagResultsDatabaseItem::Size() const + { + if ( iDetailsData == NULL ) + { + return 27; + } + + return (27 + iDetailsData->Size() ); + } + +// --------------------------------------------------------------------------- +// Internalize the object from a stream. +// --------------------------------------------------------------------------- +// +EXPORT_C void CDiagResultsDatabaseItem::InternalizeL( RReadStream& aStream ) + { + iTestUid = TUid::Uid( aStream.ReadInt32L () ); + iDependencyExecution = aStream.ReadUint8L(); + iResult = (TResult ) aStream.ReadInt16L(); + + ReadTimeFromStreamL( aStream, iStartTime ); + ReadTimeFromStreamL( aStream, iEndTime ); + + TInt size = aStream.ReadUint32L(); + + if ( size == 0 ) + { + iDetailsData = NULL; + } + else + { + iDetailsData = CBufFlat::NewL( 50 ); + iDetailsData->ResizeL( size ); + } + + + if ( size > 0 ) + { + TPtr8 ptr = iDetailsData->Ptr(0); + aStream.ReadL( ptr, size); + } + } + +// --------------------------------------------------------------------------- +// Helper function. +// --------------------------------------------------------------------------- +// +void CDiagResultsDatabaseItem::WriteTimeToStreamL( + RWriteStream& aStream, + const TTime& aTime ) const + { + TInt64 time = aTime.Int64(); + + TInt32 low_time = I64LOW( time ); + TInt32 high_time = I64HIGH( time ); + + aStream.WriteInt32L( low_time ); + aStream.WriteInt32L( high_time ); + } + +// --------------------------------------------------------------------------- +// Helper function. +// --------------------------------------------------------------------------- +// +void CDiagResultsDatabaseItem::ReadTimeFromStreamL( + RReadStream& aStream, + TTime& aTime ) + { + TInt32 low_time = aStream.ReadInt32L(); + TInt32 high_time = aStream.ReadInt32L(); + + TInt64 readTime = MAKE_TINT64(high_time,low_time); + + aTime = TTime(readTime); + } + +// --------------------------------------------------------------------------- +// Constructor that sets the values. +// --------------------------------------------------------------------------- +// +CDiagResultsDatabaseItem::CDiagResultsDatabaseItem ( + TUid aTestUid, + TBool aDependencyExecution, + TResult aResult, + TTime aStartTime, + TTime aEndTime, + CBufFlat* aDetailsData ) + { + iTestUid = aTestUid; + iDependencyExecution = aDependencyExecution; + iResult = aResult; + iStartTime = aStartTime; + iEndTime = aEndTime; + iDetailsData = aDetailsData; + } + + + +