contextframework/cfw/src/cfservices/CFContextObjectImpl.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/src/cfservices/CFContextObjectImpl.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,471 @@
+/*
+* Copyright (c) 2002-2006 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:  CCFContextObjectImpl class description.
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "CFContextObjectImpl.h"
+#include "cfserviceutils.h"
+#include "cftrace.h"
+
+static const TInt KTimesSame = 0;
+static const TInt KTimeFirstGreater = -1;
+static const TInt KTimeSecondGreater = 1;
+
+static const TUint KFullConfidence = 100;
+
+// MEMBER FUNCTIONS
+
+EXPORT_C CCFContextObjectImpl* CCFContextObjectImpl::NewL()
+    {
+    FUNC_LOG;
+    
+    CCFContextObjectImpl* self = CCFContextObjectImpl::NewLC();
+    CleanupStack::Pop( self );
+    
+    return self;
+    }
+    
+EXPORT_C CCFContextObjectImpl* CCFContextObjectImpl::NewLC()
+    {
+    FUNC_LOG;
+    
+    CCFContextObjectImpl* self = new( ELeave ) CCFContextObjectImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL( KNullDesC, KNullDesC, KNullDesC );
+    
+    return self;
+    }
+    
+EXPORT_C CCFContextObjectImpl* CCFContextObjectImpl::NewL( const TDesC& aSource,
+    const TDesC& aType,
+    const TDesC& aValue )
+    {
+    FUNC_LOG;
+    
+    CCFContextObjectImpl* self =
+        CCFContextObjectImpl::NewLC( aSource, aType, aValue );
+    CleanupStack::Pop( self );
+    
+    return self;
+    }
+    
+EXPORT_C CCFContextObjectImpl* CCFContextObjectImpl::NewLC( const TDesC& aSource,
+    const TDesC& aType,
+    const TDesC& aValue )
+    {
+    FUNC_LOG;
+    
+    CCFContextObjectImpl* self = new( ELeave ) CCFContextObjectImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL( aSource, aType, aValue );
+    
+    return self;
+    }
+    
+CCFContextObjectImpl::~CCFContextObjectImpl()
+    {
+    FUNC_LOG;
+    
+    delete iSource;
+    delete iType;
+    delete iValue;
+    }
+    
+CCFContextObjectImpl::CCFContextObjectImpl():
+    iConfidence( KFullConfidence )
+    {
+    FUNC_LOG;
+    
+    // Nothing to do
+    }
+    
+void CCFContextObjectImpl::ConstructL( const TDesC& aSource,
+    const TDesC& aType,
+    const TDesC& aValue )
+    {
+    FUNC_LOG;
+    
+    // Initialize pointers
+    iSource = aSource.AllocL();
+    iType = aType.AllocL();
+    iValue = aValue.AllocL();
+    }
+
+// METHODS
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::SetTypeL
+//-----------------------------------------------------------------------------
+//
+void CCFContextObjectImpl::SetTypeL( const TDesC& aType )
+    {
+    FUNC_LOG;
+
+    CFServiceUtils::UpdateBufferL( iType, aType );
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::Type
+//-----------------------------------------------------------------------------
+//
+const TDesC& CCFContextObjectImpl::Type() const
+    {
+    FUNC_LOG;
+    
+    if( iType )
+        {
+        return *iType;
+        }
+    else
+        {
+        return KNullDesC;
+        }
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::SetValueL
+//-----------------------------------------------------------------------------
+//
+void CCFContextObjectImpl::SetValueL( const TDesC& aValue )
+    {
+    FUNC_LOG;
+
+    CFServiceUtils::UpdateBufferL( iValue, aValue );
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::Value
+//-----------------------------------------------------------------------------
+//
+const TDesC& CCFContextObjectImpl::Value() const
+    {
+    FUNC_LOG;
+    
+    if( iValue )
+        {
+        return *iValue;
+        }
+    else
+        {
+        return KNullDesC;
+        }
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::SetSourceL
+//-----------------------------------------------------------------------------
+//
+void CCFContextObjectImpl::SetSourceL( const TDesC& aSource )
+    {
+    FUNC_LOG;
+
+    CFServiceUtils::UpdateBufferL( iSource, aSource );
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::Source
+//-----------------------------------------------------------------------------
+//
+const TDesC& CCFContextObjectImpl::Source() const
+    {
+    FUNC_LOG;
+
+    if( iSource )
+        {
+        return *iSource;
+        }
+    else
+        {
+        return KNullDesC;
+        }
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::SetConfidence
+//-----------------------------------------------------------------------------
+//
+void CCFContextObjectImpl::SetConfidence( const TUint8& aConfidence )
+    {
+    FUNC_LOG;
+
+    iConfidence = aConfidence;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::Confidence
+//-----------------------------------------------------------------------------
+//
+TUint8 CCFContextObjectImpl::Confidence() const
+    {
+    FUNC_LOG;
+    
+    return iConfidence;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::SetTimestampToHomeTime
+//-----------------------------------------------------------------------------
+//
+void CCFContextObjectImpl::SetTimestampToHomeTime()
+    {
+    FUNC_LOG;
+    
+    iTimestamp.HomeTime();
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::SetTimestamp
+//-----------------------------------------------------------------------------
+//
+void CCFContextObjectImpl::SetTimestamp( const TTime& aTimestamp )
+    {
+    FUNC_LOG;
+    
+    iTimestamp = aTimestamp;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::SetTimestamp
+//-----------------------------------------------------------------------------
+//
+void CCFContextObjectImpl::SetTimestamp( const TInt64& aTimestamp )
+    {
+    FUNC_LOG;
+
+    iTimestamp = aTimestamp;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::Timestamp
+//-----------------------------------------------------------------------------
+//
+const TTime& CCFContextObjectImpl::Timestamp() const
+    {
+    FUNC_LOG;
+    
+    return iTimestamp;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::CopyL
+//-----------------------------------------------------------------------------
+//
+void CCFContextObjectImpl::CopyL( const CCFContextObject& aContext )
+    {
+    FUNC_LOG;
+
+    SetSourceL( aContext.Source() );
+    SetTypeL( aContext.Type() );
+    SetValueL( aContext.Value() );
+    SetTimestamp( aContext.Timestamp() );
+    SetConfidence( aContext.Confidence() );
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::InternalizeL
+//-----------------------------------------------------------------------------
+//
+EXPORT_C void CCFContextObjectImpl::InternalizeL( RReadStream& aStream )
+    {
+    FUNC_LOG;
+    
+    // Source
+    CFServiceUtils::ReadFromStreamL( iSource, aStream );
+    
+    // Type
+    CFServiceUtils::ReadFromStreamL( iType, aStream );
+    
+    // Value
+    CFServiceUtils::ReadFromStreamL( iValue, aStream );
+    
+    // Timestamp
+    TPckg<TTime> timeStamp( iTimestamp );
+    aStream.ReadL( timeStamp, sizeof( TTime ) );
+    
+    // Confidence
+    iConfidence = aStream.ReadUint16L();
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::ExternalizeL
+//-----------------------------------------------------------------------------
+//
+EXPORT_C void CCFContextObjectImpl::ExternalizeL( RWriteStream& aStream )
+    {
+    FUNC_LOG;
+    
+    // Source
+    CFServiceUtils::WriteIntoStreamL( iSource, aStream );
+    
+    // Type
+    CFServiceUtils::WriteIntoStreamL( iType, aStream );
+    
+    // Value
+    CFServiceUtils::WriteIntoStreamL( iValue, aStream );
+    
+    // Timestamp
+    TPckg<TTime> timestamp( iTimestamp );
+    aStream.WriteL( timestamp, sizeof( TTime ) );
+    
+    // Confidence
+    aStream.WriteUint16L( iConfidence );
+
+    // Commit stream
+    aStream.CommitL();
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::Size
+//-----------------------------------------------------------------------------
+//
+EXPORT_C TInt CCFContextObjectImpl::Size() const
+    {
+    FUNC_LOG;
+    
+    TInt size = 0;
+
+    // Source
+    size += sizeof( TInt );
+    if( iSource )
+        {
+        size += ( *iSource ).Size();
+        }
+    
+    // Type
+    size += sizeof( TInt );
+    if( iType )
+        {
+        size += ( *iType ).Size();
+        }
+    
+    // Value
+    size += sizeof( TInt );
+    if( iValue )
+        {
+        size += ( *iValue ).Size();
+        }
+    
+    // Timestamp
+    size += sizeof( TTime );
+    
+    // Confidence
+    size += sizeof( TUint );
+
+    return size;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::CompareValue
+//-----------------------------------------------------------------------------
+//
+EXPORT_C TInt CCFContextObjectImpl::CompareValue(
+    const CCFContextObject& aContext ) const
+    {
+    FUNC_LOG;
+    
+    return Value().Compare( aContext.Value() );
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::CompareByType
+//-----------------------------------------------------------------------------
+//
+EXPORT_C TInt CCFContextObjectImpl::CompareByType(
+    const CCFContextObject& aFirst,
+    const CCFContextObject& aSecond )
+    {
+    FUNC_LOG;
+    
+    return aFirst.Type().Compare( aSecond.Type() );
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::CompareByTypeAndSource
+//-----------------------------------------------------------------------------
+//
+EXPORT_C TInt CCFContextObjectImpl::CompareByTypeAndSource(
+    const CCFContextObject& aFirst,
+    const CCFContextObject& aSecond )
+    {
+    FUNC_LOG;
+    
+    TInt typeCompareResult = aFirst.Type().Compare( aSecond.Type() );
+    if( typeCompareResult != 0 )
+        {
+        return typeCompareResult;
+        }
+    else
+        {
+        return aFirst.Source().Compare( aSecond.Source() );
+        }
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::CompareByTimeDescending
+//-----------------------------------------------------------------------------
+//
+EXPORT_C TInt CCFContextObjectImpl::CompareByTimeDescending( 
+    const CCFContextObject& aFirst,
+    const CCFContextObject& aSecond )
+    {
+    FUNC_LOG;
+    
+    TInt retVal = KTimeSecondGreater;
+
+    // Both same
+    if( aFirst.Timestamp() == aSecond.Timestamp() )
+        {
+        retVal = KTimesSame;
+        }
+    // First greater than second
+    else if( aFirst.Timestamp() > aSecond.Timestamp() )
+        {
+        retVal = KTimeFirstGreater;
+        }
+
+    return retVal;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFContextObjectImpl::IsSame
+//-----------------------------------------------------------------------------
+//
+EXPORT_C TBool CCFContextObjectImpl::IsSame(
+    const CCFContextObject& aFirst,
+    const CCFContextObject& aSecond )
+    {
+    FUNC_LOG;
+    
+    if( aFirst.Timestamp() == aSecond.Timestamp() )
+        {
+        if( aFirst.Type().Compare( aSecond.Type() ) == KErrNone )
+            {
+            if( aFirst.Value().Compare( aSecond.Value() ) == KErrNone )
+                {
+                if( aFirst.Source().Compare( aSecond.Source() ) == KErrNone )
+                    {
+                    if( aFirst.Confidence() == aSecond.Confidence() )
+                        {
+                        return ETrue;
+                        }
+                    }
+                }
+            }
+        }
+    return EFalse;
+    }