satengine/satserver/Engine/src/TSatEventMediator.cpp
author hgs
Fri, 17 Sep 2010 17:09:13 +0300
changeset 48 78df25012fda
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2007 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:  Provides way to notify events and register observers
hgs
parents:
diff changeset
    15
*                for events
hgs
parents:
diff changeset
    16
*
hgs
parents:
diff changeset
    17
*/
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// INCLUDE FILES
hgs
parents:
diff changeset
    22
#include    "TSatEventMediator.h"
hgs
parents:
diff changeset
    23
#include    "TSatEventsObserver.h"
hgs
parents:
diff changeset
    24
//lint -e766 Used inside TRAP macro, lint misfunction.
hgs
parents:
diff changeset
    25
#include    "EnginePanic.h"
hgs
parents:
diff changeset
    26
#include    "MSatEventObserver.h"
hgs
parents:
diff changeset
    27
#include    "SatLog.h"
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
// FORWARD DECLARE
hgs
parents:
diff changeset
    30
class MSatEventObserver;
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    35
// TSatEventMediator::TSatEventMediator
hgs
parents:
diff changeset
    36
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    37
// might leave.
hgs
parents:
diff changeset
    38
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
//
hgs
parents:
diff changeset
    40
TSatEventMediator::TSatEventMediator() :
hgs
parents:
diff changeset
    41
    iEventsObservers(),
hgs
parents:
diff changeset
    42
    iIsNotifying( EFalse ),
hgs
parents:
diff changeset
    43
    iDeletionsMarked( EFalse )
hgs
parents:
diff changeset
    44
    {
hgs
parents:
diff changeset
    45
    LOG( SIMPLE,
hgs
parents:
diff changeset
    46
        "SATENGINE: TSatEventMediator::TSatEventMediator calling - exiting" )
hgs
parents:
diff changeset
    47
    }
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
// TSatEventMediator::Reset
hgs
parents:
diff changeset
    51
// Replaces destructor since T classes cannot have one
hgs
parents:
diff changeset
    52
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    53
//
hgs
parents:
diff changeset
    54
void TSatEventMediator::Reset()
hgs
parents:
diff changeset
    55
    {
hgs
parents:
diff changeset
    56
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::Reset calling" )
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
    iEventsObservers.ResetAndDestroy();
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::Reset exiting" )
hgs
parents:
diff changeset
    61
    }
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    64
// TSatEventMediator::Notify
hgs
parents:
diff changeset
    65
// All observers, who are registered to get the notification of aEvent, are
hgs
parents:
diff changeset
    66
// notified
hgs
parents:
diff changeset
    67
// (other items were commented in a header).
hgs
parents:
diff changeset
    68
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    69
//
hgs
parents:
diff changeset
    70
void TSatEventMediator::Notify(
hgs
parents:
diff changeset
    71
    TInt aEvent ) // Event
hgs
parents:
diff changeset
    72
    {
hgs
parents:
diff changeset
    73
    LOG( DETAILED, "SATENGINE: TSatEventMediator::Notify calling" )
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
    // Go through the list of observers and call notify for observers who are
hgs
parents:
diff changeset
    76
    // observing aEvent.
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    // Set the flag on. No one can remove observers when this flag is on
hgs
parents:
diff changeset
    79
    iIsNotifying = ETrue;
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
    TInt count( iEventsObservers.Count() );
hgs
parents:
diff changeset
    82
    LOG2( DETAILED, "SATENGINE: TSatEventMediator::Notify observers \
hgs
parents:
diff changeset
    83
          count: %d", count )
hgs
parents:
diff changeset
    84
    for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
    85
        {
hgs
parents:
diff changeset
    86
        TSatEventsObserver* eventsObserver =
hgs
parents:
diff changeset
    87
            iEventsObservers[i];
hgs
parents:
diff changeset
    88
        __ASSERT_ALWAYS( eventsObserver,
hgs
parents:
diff changeset
    89
            PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
        if ( eventsObserver->ObservingEvent( aEvent ) )
hgs
parents:
diff changeset
    92
            {
hgs
parents:
diff changeset
    93
            MSatEventObserver* observer =
hgs
parents:
diff changeset
    94
                eventsObserver->Observer();
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
            if ( observer )
hgs
parents:
diff changeset
    97
                {
hgs
parents:
diff changeset
    98
                LOG( DETAILED, "TSatEventMediator::Notify observer found" )
hgs
parents:
diff changeset
    99
                // Observer found, notify it
hgs
parents:
diff changeset
   100
                observer->Event( aEvent );
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
                // Check is iEventObservers list changed. Some observers might
hgs
parents:
diff changeset
   103
                // remove themselves and notify a new event (new Notify loop)
hgs
parents:
diff changeset
   104
                // and marked observers are deleted there. When it comes back 
hgs
parents:
diff changeset
   105
                // here iEventsObserver has changed           
hgs
parents:
diff changeset
   106
                if ( count > iEventsObservers.Count() )
hgs
parents:
diff changeset
   107
                    {
hgs
parents:
diff changeset
   108
                    LOG( DETAILED, "TSatEventMediator::Notify \
hgs
parents:
diff changeset
   109
                    count > iEventsObservers.Count()" )
hgs
parents:
diff changeset
   110
                    TInt newCount( iEventsObservers.Count() );
hgs
parents:
diff changeset
   111
                    i = i - ( count - newCount );
hgs
parents:
diff changeset
   112
                    count = newCount;
hgs
parents:
diff changeset
   113
                    }
hgs
parents:
diff changeset
   114
                }
hgs
parents:
diff changeset
   115
            else
hgs
parents:
diff changeset
   116
                {
hgs
parents:
diff changeset
   117
                LOG( DETAILED, "TSatEventMediator::Notify observer not found" )
hgs
parents:
diff changeset
   118
                // Found NULL observer -> Mark fo deleted. This is deleted after
hgs
parents:
diff changeset
   119
                // this notification loop
hgs
parents:
diff changeset
   120
                eventsObserver->RemoveEvent( aEvent );
hgs
parents:
diff changeset
   121
                eventsObserver->MarkForDelete();
hgs
parents:
diff changeset
   122
                }
hgs
parents:
diff changeset
   123
            }
hgs
parents:
diff changeset
   124
        }
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
    // Set the flag off. Now observers can be removed
hgs
parents:
diff changeset
   127
    iIsNotifying = EFalse;
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    // Check was there any deletions during notify loop
hgs
parents:
diff changeset
   130
    if ( iDeletionsMarked )
hgs
parents:
diff changeset
   131
        {
hgs
parents:
diff changeset
   132
        LOG( DETAILED, "TSatEventMediator::Notify iDeletionsMarked true" )
hgs
parents:
diff changeset
   133
        // Delete marked observers
hgs
parents:
diff changeset
   134
        DeleteMarkedObservers();
hgs
parents:
diff changeset
   135
        iDeletionsMarked = EFalse;
hgs
parents:
diff changeset
   136
        }
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
    LOG( DETAILED, "SATENGINE: TSatEventMediator::Notify exiting" )
hgs
parents:
diff changeset
   139
    }
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   142
// TSatEventMediator::RegisterL
hgs
parents:
diff changeset
   143
// Registers observer for getting the event when event is notified using
hgs
parents:
diff changeset
   144
// Notify( TInt aEvent ).
hgs
parents:
diff changeset
   145
// (other items were commented in a header).
hgs
parents:
diff changeset
   146
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   147
//
hgs
parents:
diff changeset
   148
void TSatEventMediator::RegisterL(
hgs
parents:
diff changeset
   149
    MSatEventObserver* aObserver, // Observer of aEvent.
hgs
parents:
diff changeset
   150
    TInt aEvent ) // Event, which will be trigger of notification.
hgs
parents:
diff changeset
   151
    {
hgs
parents:
diff changeset
   152
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL calling" )
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
    __ASSERT_ALWAYS( aObserver, PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   155
    // Check if aObserver instance is already registered, so that we dont
hgs
parents:
diff changeset
   156
    // create a new TSatEventsObserver entry in to the iEventsObserver list.
hgs
parents:
diff changeset
   157
    TSatEventsObserver* eventsObserver = HasObserverInstance( aObserver );
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
    if ( NULL != eventsObserver )
hgs
parents:
diff changeset
   160
        {
hgs
parents:
diff changeset
   161
        LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL eventsObserver \
hgs
parents:
diff changeset
   162
             not NULL" )
hgs
parents:
diff changeset
   163
        // Add the event for the observer.
hgs
parents:
diff changeset
   164
        eventsObserver->AddEventL( aEvent );
hgs
parents:
diff changeset
   165
        }
hgs
parents:
diff changeset
   166
    else
hgs
parents:
diff changeset
   167
        {
hgs
parents:
diff changeset
   168
        LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL eventsObserver \
hgs
parents:
diff changeset
   169
             NULL" )
hgs
parents:
diff changeset
   170
        // Observer is registering for the first time.
hgs
parents:
diff changeset
   171
        eventsObserver = new( ELeave )TSatEventsObserver( aObserver );
hgs
parents:
diff changeset
   172
        CleanupStack::PushL( eventsObserver );
hgs
parents:
diff changeset
   173
        eventsObserver->AddEventL( aEvent );
hgs
parents:
diff changeset
   174
        User::LeaveIfError( iEventsObservers.Append( eventsObserver ) );
hgs
parents:
diff changeset
   175
        CleanupStack::Pop( eventsObserver );
hgs
parents:
diff changeset
   176
        }
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL exiting" )
hgs
parents:
diff changeset
   179
    }
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   182
// TSatEventMediator::Unregister
hgs
parents:
diff changeset
   183
// Removes aEvent from aObservers observable events.
hgs
parents:
diff changeset
   184
// (other items were commented in a header).
hgs
parents:
diff changeset
   185
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   186
//
hgs
parents:
diff changeset
   187
void TSatEventMediator::Unregister(
hgs
parents:
diff changeset
   188
    const MSatEventObserver* aObserver, // Observer of aEvent.
hgs
parents:
diff changeset
   189
    TInt aEvent ) // Event, which the observer is observing.
hgs
parents:
diff changeset
   190
    {
hgs
parents:
diff changeset
   191
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister calling" )
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
    // Check if observer is registered.
hgs
parents:
diff changeset
   194
    TSatEventsObserver* eventsObserver = HasObserverInstance( aObserver );
hgs
parents:
diff changeset
   195
    if ( NULL != eventsObserver )
hgs
parents:
diff changeset
   196
        {
hgs
parents:
diff changeset
   197
        LOG( SIMPLE, "SATENGINE: TSatEventMediator::RegisterL eventsObserver \
hgs
parents:
diff changeset
   198
             not NULL" )
hgs
parents:
diff changeset
   199
        eventsObserver->RemoveEvent( aEvent );
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
        // Remove the eventsObserver from the list if the observer has
hgs
parents:
diff changeset
   202
        // no longer any events to observe.
hgs
parents:
diff changeset
   203
        if ( 0 == eventsObserver->EventCount() )
hgs
parents:
diff changeset
   204
            {
hgs
parents:
diff changeset
   205
            // Prevent delete if we are notifying observers
hgs
parents:
diff changeset
   206
            if ( !iIsNotifying )
hgs
parents:
diff changeset
   207
                {
hgs
parents:
diff changeset
   208
                LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister \
hgs
parents:
diff changeset
   209
                     iIsNotifying false" )
hgs
parents:
diff changeset
   210
                const TInt index = iEventsObservers.Find( eventsObserver );
hgs
parents:
diff changeset
   211
                // Does not destroy the object.
hgs
parents:
diff changeset
   212
                iEventsObservers.Remove( index ); 
hgs
parents:
diff changeset
   213
                iEventsObservers.GranularCompress();
hgs
parents:
diff changeset
   214
                delete eventsObserver;
hgs
parents:
diff changeset
   215
                }
hgs
parents:
diff changeset
   216
            else
hgs
parents:
diff changeset
   217
                {
hgs
parents:
diff changeset
   218
                LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister \
hgs
parents:
diff changeset
   219
                     iIsNotifying true" )
hgs
parents:
diff changeset
   220
                // If we are notifying, mark this observer as deleted
hgs
parents:
diff changeset
   221
                eventsObserver->MarkForDelete();
hgs
parents:
diff changeset
   222
                iDeletionsMarked = ETrue;
hgs
parents:
diff changeset
   223
                }
hgs
parents:
diff changeset
   224
            }
hgs
parents:
diff changeset
   225
        }
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister exiting" )
hgs
parents:
diff changeset
   228
    }
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   231
// TSatEventMediator::Unregister
hgs
parents:
diff changeset
   232
// (other items were commented in a header).
hgs
parents:
diff changeset
   233
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   234
//
hgs
parents:
diff changeset
   235
void TSatEventMediator::Unregister(
hgs
parents:
diff changeset
   236
    const MSatEventObserver* aObserver ) // Observer of aEvent.
hgs
parents:
diff changeset
   237
    {
hgs
parents:
diff changeset
   238
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister calling" )
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
    // Check if observer is registered.
hgs
parents:
diff changeset
   241
    TSatEventsObserver* eventsObserver = HasObserverInstance( aObserver );
hgs
parents:
diff changeset
   242
    if ( NULL != eventsObserver )
hgs
parents:
diff changeset
   243
        {
hgs
parents:
diff changeset
   244
        // Prevent delete if we are notifying observers
hgs
parents:
diff changeset
   245
        if ( !iIsNotifying )
hgs
parents:
diff changeset
   246
            {
hgs
parents:
diff changeset
   247
            LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister \
hgs
parents:
diff changeset
   248
                 iIsNotifying false" )
hgs
parents:
diff changeset
   249
            const TInt index = iEventsObservers.Find( eventsObserver );
hgs
parents:
diff changeset
   250
            iEventsObservers.Remove( index ); // Does not destroy the object.
hgs
parents:
diff changeset
   251
            iEventsObservers.GranularCompress();
hgs
parents:
diff changeset
   252
            delete eventsObserver;
hgs
parents:
diff changeset
   253
            }
hgs
parents:
diff changeset
   254
        else
hgs
parents:
diff changeset
   255
            {
hgs
parents:
diff changeset
   256
            LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister \
hgs
parents:
diff changeset
   257
                 iIsNotifying true" )
hgs
parents:
diff changeset
   258
            // If we are notifying, mark this observer as deleted
hgs
parents:
diff changeset
   259
            eventsObserver->MarkForDelete();
hgs
parents:
diff changeset
   260
            iDeletionsMarked = ETrue;
hgs
parents:
diff changeset
   261
            }
hgs
parents:
diff changeset
   262
        }
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::Unregister exiting" )
hgs
parents:
diff changeset
   265
    }
hgs
parents:
diff changeset
   266
hgs
parents:
diff changeset
   267
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   268
// TSatEventMediator::HasObserverInstance
hgs
parents:
diff changeset
   269
// Checks if aObserver is already registered to this mediator and returns the
hgs
parents:
diff changeset
   270
// result.
hgs
parents:
diff changeset
   271
// (other items were commented in a header).
hgs
parents:
diff changeset
   272
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   273
//
hgs
parents:
diff changeset
   274
TSatEventsObserver* TSatEventMediator::HasObserverInstance(
hgs
parents:
diff changeset
   275
    const MSatEventObserver* aObserver ) const // Observer looked from the list.
hgs
parents:
diff changeset
   276
    {
hgs
parents:
diff changeset
   277
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::HasObserverInstance calling" )
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
    // Go through the list until same observer instance is found or
hgs
parents:
diff changeset
   280
    // all entries have been checked.
hgs
parents:
diff changeset
   281
    TSatEventsObserver* foundEventsObserver = NULL;
hgs
parents:
diff changeset
   282
    const TInt count( iEventsObservers.Count() );
hgs
parents:
diff changeset
   283
    LOG2( NORMAL, "SATENGINE: TSatEventMediator::HasObserverInstance \
hgs
parents:
diff changeset
   284
          observer count: %d", count )
hgs
parents:
diff changeset
   285
    for ( TInt i = 0; ( i < count ) && ( !foundEventsObserver ); i++ )
hgs
parents:
diff changeset
   286
        {
hgs
parents:
diff changeset
   287
        TSatEventsObserver* eventsObserver = iEventsObservers[i];
hgs
parents:
diff changeset
   288
        __ASSERT_ALWAYS( eventsObserver,
hgs
parents:
diff changeset
   289
            PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   290
hgs
parents:
diff changeset
   291
        if ( aObserver == eventsObserver->Observer() )
hgs
parents:
diff changeset
   292
            {
hgs
parents:
diff changeset
   293
            LOG( SIMPLE, "SATENGINE: TSatEventMediator::HasObserverInstance \
hgs
parents:
diff changeset
   294
            aObserver == eventsObserver->Observer()" )
hgs
parents:
diff changeset
   295
            foundEventsObserver = eventsObserver;
hgs
parents:
diff changeset
   296
            }
hgs
parents:
diff changeset
   297
        }
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::HasObserverInstance exiting" )
hgs
parents:
diff changeset
   300
    return foundEventsObserver;
hgs
parents:
diff changeset
   301
    }
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   304
// TSatEventMediator::DeleteMarkedObservers
hgs
parents:
diff changeset
   305
// Deletes all observers marked as deleted during Notify loop
hgs
parents:
diff changeset
   306
// (other items were commented in a header).
hgs
parents:
diff changeset
   307
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   308
//
hgs
parents:
diff changeset
   309
void TSatEventMediator::DeleteMarkedObservers()
hgs
parents:
diff changeset
   310
    {
hgs
parents:
diff changeset
   311
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::DeleteMarkedObservers calling" )
hgs
parents:
diff changeset
   312
hgs
parents:
diff changeset
   313
    // Go through the list and delete all observers wich are
hgs
parents:
diff changeset
   314
    // marked as deleted
hgs
parents:
diff changeset
   315
    TInt count( iEventsObservers.Count() );
hgs
parents:
diff changeset
   316
    LOG2( NORMAL, "SATENGINE: TSatEventMediator::DeleteMarkedObservers \
hgs
parents:
diff changeset
   317
          observer count: %d", count )
hgs
parents:
diff changeset
   318
    for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
   319
        {
hgs
parents:
diff changeset
   320
        TSatEventsObserver* eventsObserver =
hgs
parents:
diff changeset
   321
            iEventsObservers[i];
hgs
parents:
diff changeset
   322
        if ( eventsObserver )
hgs
parents:
diff changeset
   323
            {
hgs
parents:
diff changeset
   324
            LOG( SIMPLE, "SATENGINE: TSatEventMediator::DeleteMarkedObservers\
hgs
parents:
diff changeset
   325
            eventsObserver true" )
hgs
parents:
diff changeset
   326
            // Check is obserer marked and it has no events
hgs
parents:
diff changeset
   327
            if ( eventsObserver->IsMarkedForDelete() &&
hgs
parents:
diff changeset
   328
                 ( 0 == eventsObserver->EventCount() ) )
hgs
parents:
diff changeset
   329
                {
hgs
parents:
diff changeset
   330
                LOG( SIMPLE, "SATENGINE: TSatEventMediator::\
hgs
parents:
diff changeset
   331
                DeleteMarkedObservers delete Observer" )
hgs
parents:
diff changeset
   332
                iEventsObservers.Remove( i ); // Does not destroy the object.
hgs
parents:
diff changeset
   333
                iEventsObservers.GranularCompress();
hgs
parents:
diff changeset
   334
                delete eventsObserver;
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
                // Update count value. We just removed an object from list
hgs
parents:
diff changeset
   337
                count = iEventsObservers.Count();
hgs
parents:
diff changeset
   338
                i--;
hgs
parents:
diff changeset
   339
                }
hgs
parents:
diff changeset
   340
            }
hgs
parents:
diff changeset
   341
        }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
    LOG( SIMPLE, "SATENGINE: TSatEventMediator::DeleteMarkedObservers exiting" )
hgs
parents:
diff changeset
   344
    }
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
//  End of File