ximpfw/core/srcdatamodel/ximprestrictedobjectcollectionimp.cpp
author hgs
Wed, 03 Nov 2010 09:32:20 +0530
changeset 51 61fad867f68e
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  MXIMPRestrictedObjectCollection implementation
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "ximprestrictedobjectcollectionimp.h"
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// ============================ MEMBER FUNCTIONS =============================
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    24
// CXIMPRestrictedObjectCollectionImp::NewL()
hgs
parents:
diff changeset
    25
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    26
//
hgs
parents:
diff changeset
    27
EXPORT_C CXIMPRestrictedObjectCollectionImp*
hgs
parents:
diff changeset
    28
    CXIMPRestrictedObjectCollectionImp::NewL( TBool aObjectOwning /*= ETrue*/ )
hgs
parents:
diff changeset
    29
    {
hgs
parents:
diff changeset
    30
    CXIMPRestrictedObjectCollectionImp* self = NewLC( aObjectOwning );
hgs
parents:
diff changeset
    31
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    32
    return self;
hgs
parents:
diff changeset
    33
    }
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    37
// CXIMPRestrictedObjectCollectionImp::NewLC()
hgs
parents:
diff changeset
    38
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
//
hgs
parents:
diff changeset
    40
EXPORT_C CXIMPRestrictedObjectCollectionImp*
hgs
parents:
diff changeset
    41
    CXIMPRestrictedObjectCollectionImp::NewLC( TBool aObjectOwning /*= ETrue*/ )
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
    CXIMPRestrictedObjectCollectionImp* self =
hgs
parents:
diff changeset
    44
        new (ELeave) CXIMPRestrictedObjectCollectionImp( aObjectOwning );
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    47
    return self;
hgs
parents:
diff changeset
    48
    }
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    52
// CXIMPRestrictedObjectCollectionImp::~CXIMPRestrictedObjectCollectionImp()
hgs
parents:
diff changeset
    53
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    54
//
hgs
parents:
diff changeset
    55
CXIMPRestrictedObjectCollectionImp::~CXIMPRestrictedObjectCollectionImp()
hgs
parents:
diff changeset
    56
    {
hgs
parents:
diff changeset
    57
    if( iOwnObjects )
hgs
parents:
diff changeset
    58
        {
hgs
parents:
diff changeset
    59
        iApiObjects.ResetAndDestroy();
hgs
parents:
diff changeset
    60
        }
hgs
parents:
diff changeset
    61
    else
hgs
parents:
diff changeset
    62
        {
hgs
parents:
diff changeset
    63
        iApiObjects.Reset();
hgs
parents:
diff changeset
    64
        }    
hgs
parents:
diff changeset
    65
    }
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    69
// CXIMPRestrictedObjectCollectionImp::CXIMPRestrictedObjectCollectionImp()
hgs
parents:
diff changeset
    70
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    71
//
hgs
parents:
diff changeset
    72
CXIMPRestrictedObjectCollectionImp::CXIMPRestrictedObjectCollectionImp( TBool aObjectOwning )
hgs
parents:
diff changeset
    73
: iOwnObjects( aObjectOwning )
hgs
parents:
diff changeset
    74
    {
hgs
parents:
diff changeset
    75
    }
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
// Implement supported interface access.
hgs
parents:
diff changeset
    80
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    81
//
hgs
parents:
diff changeset
    82
XIMPIMP_IF_BASE_GET_INTERFACE_BEGIN( CXIMPRestrictedObjectCollectionImp,
hgs
parents:
diff changeset
    83
                                     MXIMPRestrictedObjectCollection )
hgs
parents:
diff changeset
    84
XIMPIMP_IF_BASE_GET_INTERFACE_END()
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
XIMPIMP_IF_BASE_GET_CONST_INTERFACE_BEGIN( CXIMPRestrictedObjectCollectionImp,
hgs
parents:
diff changeset
    88
                                           MXIMPRestrictedObjectCollection )
hgs
parents:
diff changeset
    89
XIMPIMP_IF_BASE_GET_INTERFACE_END()
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    94
// CXIMPRestrictedObjectCollectionImp::LookupByType()
hgs
parents:
diff changeset
    95
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    96
//
hgs
parents:
diff changeset
    97
void CXIMPRestrictedObjectCollectionImp::LookupByType(
hgs
parents:
diff changeset
    98
    const MXIMPBase*& aObject,
hgs
parents:
diff changeset
    99
    TInt32 aInterfaceId ) const
hgs
parents:
diff changeset
   100
    {
hgs
parents:
diff changeset
   101
    aObject = NULL;
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    TInt index = iApiObjects.FindInOrder( aInterfaceId,
hgs
parents:
diff changeset
   104
                                          OrderIfIdAndApiObject );
hgs
parents:
diff changeset
   105
    if( index != KErrNotFound )
hgs
parents:
diff changeset
   106
        {
hgs
parents:
diff changeset
   107
        const CXIMPApiObjBase* theObject = iApiObjects[ index ];
hgs
parents:
diff changeset
   108
        aObject = &theObject->Base();
hgs
parents:
diff changeset
   109
        }
hgs
parents:
diff changeset
   110
    }
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   115
// CXIMPRestrictedObjectCollectionImp::AddOrReplaceTypeL()
hgs
parents:
diff changeset
   116
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   117
//
hgs
parents:
diff changeset
   118
void CXIMPRestrictedObjectCollectionImp::AddOrReplaceTypeL(
hgs
parents:
diff changeset
   119
    MXIMPBase* aObject )
hgs
parents:
diff changeset
   120
    {
hgs
parents:
diff changeset
   121
    CXIMPApiObjBase* theObject = TXIMPGetImpClassOrPanic< CXIMPApiObjBase >::From( *aObject );
hgs
parents:
diff changeset
   122
                                                         
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
    TInt index = KErrNotFound;
hgs
parents:
diff changeset
   125
    TInt entryExists = iApiObjects.FindInOrder( theObject,
hgs
parents:
diff changeset
   126
                                                index,
hgs
parents:
diff changeset
   127
                                                OrderApiObjects );
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    if( entryExists == KErrNotFound )
hgs
parents:
diff changeset
   130
        {
hgs
parents:
diff changeset
   131
        iApiObjects.InsertL( theObject, index );
hgs
parents:
diff changeset
   132
        }
hgs
parents:
diff changeset
   133
    else
hgs
parents:
diff changeset
   134
        {
hgs
parents:
diff changeset
   135
        CXIMPApiObjBase* oldObject = iApiObjects[ index ];
hgs
parents:
diff changeset
   136
        if( iOwnObjects )
hgs
parents:
diff changeset
   137
            {
hgs
parents:
diff changeset
   138
            delete oldObject;
hgs
parents:
diff changeset
   139
            }        
hgs
parents:
diff changeset
   140
        iApiObjects[ index ] = theObject;
hgs
parents:
diff changeset
   141
        }
hgs
parents:
diff changeset
   142
    }
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   147
// CXIMPRestrictedObjectCollectionImp::GetByType()
hgs
parents:
diff changeset
   148
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   149
//
hgs
parents:
diff changeset
   150
void CXIMPRestrictedObjectCollectionImp::GetByType(
hgs
parents:
diff changeset
   151
    MXIMPBase*& aObject,
hgs
parents:
diff changeset
   152
    TInt32 aInterfaceId )
hgs
parents:
diff changeset
   153
    {
hgs
parents:
diff changeset
   154
    aObject = NULL;
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
    TInt index = iApiObjects.FindInOrder( aInterfaceId,
hgs
parents:
diff changeset
   157
                                          OrderIfIdAndApiObject );
hgs
parents:
diff changeset
   158
    if( index != KErrNotFound )
hgs
parents:
diff changeset
   159
        {
hgs
parents:
diff changeset
   160
        CXIMPApiObjBase* theObject = iApiObjects[ index ];
hgs
parents:
diff changeset
   161
        aObject = &theObject->Base();
hgs
parents:
diff changeset
   162
        iApiObjects.Remove( index );
hgs
parents:
diff changeset
   163
        }
hgs
parents:
diff changeset
   164
    }
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   169
// CXIMPRestrictedObjectCollectionImp::OrderIfIdAndApiObject()
hgs
parents:
diff changeset
   170
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   171
//
hgs
parents:
diff changeset
   172
TInt CXIMPRestrictedObjectCollectionImp::OrderIfIdAndApiObject(
hgs
parents:
diff changeset
   173
    const TInt32* aIfId,
hgs
parents:
diff changeset
   174
    const CXIMPApiObjBase& aRhs )
hgs
parents:
diff changeset
   175
    {
hgs
parents:
diff changeset
   176
    return (*aIfId) - aRhs.Base().GetInterfaceId();
hgs
parents:
diff changeset
   177
    }
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   181
// CXIMPRestrictedObjectCollectionImp::OrderApiObjects()
hgs
parents:
diff changeset
   182
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   183
//
hgs
parents:
diff changeset
   184
TInt CXIMPRestrictedObjectCollectionImp::OrderApiObjects(
hgs
parents:
diff changeset
   185
    const CXIMPApiObjBase& aLhs,
hgs
parents:
diff changeset
   186
    const CXIMPApiObjBase& aRhs )
hgs
parents:
diff changeset
   187
    {
hgs
parents:
diff changeset
   188
    const TInt32 interfaceId = aLhs.Base().GetInterfaceId();
hgs
parents:
diff changeset
   189
    return OrderIfIdAndApiObject( &interfaceId, aRhs );
hgs
parents:
diff changeset
   190
    }
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   194
// CXIMPRestrictedObjectCollectionImp::SetObjectOwnership()
hgs
parents:
diff changeset
   195
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   196
//
hgs
parents:
diff changeset
   197
EXPORT_C void CXIMPRestrictedObjectCollectionImp::SetObjectOwnership( TBool aObjectOwning /*= ETrue*/ )
hgs
parents:
diff changeset
   198
    {
hgs
parents:
diff changeset
   199
    iOwnObjects = aObjectOwning;
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
// End of file