PECengine/AttributeLibrary2/Src/CPEngSessionSlotObjectCon.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/AttributeLibrary2/Src/CPEngSessionSlotObjectCon.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,186 @@
+/*
+* Copyright (c) 2004 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:  NWSessionSlot object container.
+*
+*/
+
+// INCLUDE FILES
+#include "CPEngSessionSlotObjectCon.h"
+#include "CPEngSessionSlotObject.h"
+#include "CPEngSessionSlotId.h"
+#include <E32Std.h>
+
+
+
+//LOCAL constants
+namespace
+    {
+    _LIT( KPEngSlotObjectConPanic, "AttrSlotObjCon" );
+    enum TPEngSlotObjectConPanicReasons
+        {
+        ESlotObjNotEmptyOnDestruction,
+        ESlotObjConObjectAlreadyAdded,
+        ESlotObjConObjectNULL,
+        };
+
+    void PanicSlotObjCon( TPEngSlotObjectConPanicReasons aPanicReason )
+        {
+        User::Panic( KPEngSlotObjectConPanic, aPanicReason );
+        }
+    }
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPEngSessionSlotObjectCon* CPEngSessionSlotObjectCon::NewL()
+    {
+    CPEngSessionSlotObjectCon* self = new( ELeave ) CPEngSessionSlotObjectCon;
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::CPEngSessionSlotObjectCon
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPEngSessionSlotObjectCon::CPEngSessionSlotObjectCon()
+    {
+    }
+
+
+// Destructor
+CPEngSessionSlotObjectCon::~CPEngSessionSlotObjectCon()
+    {
+    __ASSERT_DEBUG( iObjects.Count() == 0,
+                    PanicSlotObjCon( ESlotObjNotEmptyOnDestruction ) );
+    iObjects.ResetAndDestroy();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::FindById()
+// -----------------------------------------------------------------------------
+//
+CPEngSessionSlotObject* CPEngSessionSlotObjectCon::FindById(
+    const CPEngSessionSlotId& aSlotId )
+    {
+    return DoFindById( aSlotId );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::FindById()
+// -----------------------------------------------------------------------------
+//
+const CPEngSessionSlotObject* CPEngSessionSlotObjectCon::FindById(
+    const CPEngSessionSlotId& aSlotId ) const
+    {
+    CPEngSessionSlotObjectCon* self = const_cast< CPEngSessionSlotObjectCon* > ( this );
+    CPEngSessionSlotObject* object = self->DoFindById( aSlotId );
+    return object;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::AddL()
+// -----------------------------------------------------------------------------
+//
+void CPEngSessionSlotObjectCon::AddL( CPEngSessionSlotObject* aObject )
+    {
+    __ASSERT_ALWAYS( aObject, PanicSlotObjCon( ESlotObjConObjectNULL ) );
+    __ASSERT_ALWAYS( !aObject->iContainer, PanicSlotObjCon( ESlotObjConObjectAlreadyAdded ) );
+
+
+    CPEngSessionSlotObject* object = FindById( aObject->SlotId() );
+    __ASSERT_ALWAYS( !object, User::Leave( KErrAlreadyExists ) );
+
+    iObjects.AppendL( aObject );
+    aObject->iContainer = this;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::Remove()
+// -----------------------------------------------------------------------------
+//
+void CPEngSessionSlotObjectCon::Remove( CPEngSessionSlotObject* aObject )
+    {
+    const TInt objectCount = iObjects.Count();
+    for ( TInt ii = 0; ii < objectCount; ii++ )
+        {
+        const CPEngSessionSlotObject* objectTrie = iObjects[ ii ];
+        if ( objectTrie == aObject )
+            {
+            iObjects.Remove( ii );
+            aObject->iContainer = NULL;
+            break;
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::Count()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngSessionSlotObjectCon::Count() const
+    {
+    return iObjects.Count();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::At()
+// -----------------------------------------------------------------------------
+//
+CPEngSessionSlotObject& CPEngSessionSlotObjectCon::At( TInt aIndex )
+    {
+    return *iObjects[ aIndex ];
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSessionSlotObjectCon::DoFindById()
+// -----------------------------------------------------------------------------
+//
+CPEngSessionSlotObject* CPEngSessionSlotObjectCon::DoFindById(
+    const CPEngSessionSlotId& aSlotId )
+    {
+    CPEngSessionSlotObject* object = NULL;
+
+    const TInt objectCount = iObjects.Count();
+    for ( TInt ii = 0; ii < objectCount; ii++ )
+        {
+        CPEngSessionSlotObject* objectTrie = iObjects[ ii ];
+        if ( objectTrie->SlotId().Match( aSlotId ) == KErrNone )
+            {
+            object = objectTrie;
+            break;
+            }
+        }
+
+    return object;
+    }
+
+
+
+//  End of File