mulwidgets/muldatamodel/src/mulasyncdataprovider.cpp
branchRCL_3
changeset 19 4ea6f81c838a
parent 17 514d98f21c43
child 20 0e9bb658ef58
--- a/mulwidgets/muldatamodel/src/mulasyncdataprovider.cpp	Mon Jun 21 16:15:51 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,241 +0,0 @@
-/*
-* Copyright (c) 2007-2008 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:  Active Object Implementation for providing data asynchronously
-*
-*/
-
-
-#include "mulasyncdataprovider.h"
-
-#include <osn/osnnew.h>
-#include <algorithm> //for find algorithm
-
-#include "mullog.h"
-
-namespace Alf
-    {
-
-// ---------------------------------------------------------------------------
-// MulAsyncDataProvider
-// ---------------------------------------------------------------------------
-//
-MulAsyncDataProvider::MulAsyncDataProvider( IMulModelProvider& aDataProvider,
-                                            const MulPageDataWindow& aDataWindow )
-                     :CActive( EPriorityNormal ),
-                      mDataProvider(aDataProvider),
-                      mDataWindow(aDataWindow)
-    {
-    MUL_LOG_ENTRY_EXIT("MUL::MulAsyncDataProvider::MulAsyncDataProvider");
-    CActiveScheduler::Add(this);
-    }
-
-// ---------------------------------------------------------------------------
-// ~MulAsyncDataProvider
-// ---------------------------------------------------------------------------
-//
-MulAsyncDataProvider::~MulAsyncDataProvider()
-    {
-    MUL_LOG_ENTRY_EXIT("MUL::MulAsyncDataProvider::~MulAsyncDataProvider");  
-    Cancel();
-    mDataQueue.clear();
-    }
-
-// ---------------------------------------------------------------------------
-// RunL
-// ---------------------------------------------------------------------------
-//
-void MulAsyncDataProvider::RunL()
-    {  
-    vector<MulAsyncData>::iterator iter = mDataQueue.begin();
-    if( iter < mDataQueue.end() )
-        {
-        bool inDataWindow = false;
-        MulAsyncData asyncData = *iter;
-        
-        if(mDataWindow.IsItemInDataWindow(asyncData.mStartIndex) /*&& mDataWindow->IsItemInDataWindow(mStartIndex+ITEMS)*/)
-            { 
-            if( asyncData.mRange < mDataWindow.WindowSize() )
-                {
-                mDataProvider.ProvideData( asyncData.mStartIndex, asyncData.mRange, asyncData.mPath); 
-                }
-            else
-                {
-                mDataProvider.ProvideData( asyncData.mStartIndex, mDataWindow.WindowSize() , asyncData.mPath); 
-                }
-            inDataWindow = true;
-            }
-                  
-        asyncData.mStartIndex += mDataWindow.WindowSize();
-        asyncData.mRange -= mDataWindow.WindowSize();
-        mDataQueue.erase(iter);
-        
-       if( asyncData.mRange > 0 && inDataWindow )
-            {     
-            mDataQueue.insert( iter, asyncData ); 
-            if( !IsActive() )
-                {
-                ActivateAndComplete();
-                }
-            }
-         else if(mDataQueue.begin() < mDataQueue.end())
-            {  
-            if( !IsActive() )
-                {
-                ActivateAndComplete();
-                }
-            }
-        }     
-    }
-
-// ---------------------------------------------------------------------------
-// DoCancel
-// ---------------------------------------------------------------------------
-//
-void MulAsyncDataProvider::DoCancel()
-    {
-    //does this function required??
-    }
-//    
-// ---------------------------------------------------------------------------
-// ProvideData
-// ---------------------------------------------------------------------------
-//
-void MulAsyncDataProvider::ProvideData( int aStartIndex, int aRange, const MulDataPath& aPath, const bool aIsSync )
-    { 
-    if( aIsSync )
-        {
-        mDataProvider.ProvideData( aStartIndex, aRange, aPath);
-        return;
-        }
-    MulAsyncData asyncData;
-    asyncData.mStartIndex = aStartIndex;
-    asyncData.mRange = aRange;
-    asyncData.mPath = aPath;
-    if( std::find( mDataQueue.begin(), mDataQueue.end(), asyncData ) ==  mDataQueue.end())
-        {
-        mDataQueue.push_back( asyncData );
-        }
-                 
-    for( int i = 0 ; i < mDataQueue.size() ; ++i )
-        {
-        MulAsyncData data = mDataQueue[i]; 
-        if ( (mDataWindow.IsItemInDataWindow( data.mStartIndex ) &&
-              !mDataWindow.IsItemInDataWindow( data.mStartIndex + data.mRange - 1 ) ) )
-            {
-            int index = GetFirstIndexForWhichDataIsPresent(data.mStartIndex , data.mStartIndex + data.mRange - 1 );
-            if( index!= -1 &&( index - data.mStartIndex + 1) > 0)
-                {
-                mDataQueue.erase(mDataQueue.begin() + i);
-                data.mRange = index - data.mStartIndex + 1;
-                mDataQueue.insert(mDataQueue.begin() + i, data);
-                }
-            else
-                {
-                mDataQueue.erase(mDataQueue.begin() + i);
-                i--;
-                }    
-            
-            }
-        else if ( (!mDataWindow.IsItemInDataWindow( data.mStartIndex ) &&
-              mDataWindow.IsItemInDataWindow( data.mStartIndex + data.mRange - 1 ) ) )
-            {
-            int index = GetFirstIndexForWhichDataIsPresent(data.mStartIndex , data.mStartIndex + data.mRange - 1 );
-            if( index!= -1 &&( data.mStartIndex + data.mRange - index ) > 0 )
-                {
-                mDataQueue.erase(mDataQueue.begin() + i);
-                int endIndex = (data.mStartIndex + data.mRange - 1);
-                data.mStartIndex = index;
-                data.mRange = (endIndex - index + 1);
-                mDataQueue.insert(mDataQueue.begin() + i, data);
-                }
-            else
-                {
-                mDataQueue.erase(mDataQueue.begin() + i);
-                i--;
-                }
-            }
-        else if ( (!mDataWindow.IsItemInDataWindow( data.mStartIndex ) &&
-              !mDataWindow.IsItemInDataWindow( data.mStartIndex + data.mRange - 1 ) ) )
-           {
-           mDataQueue.erase(mDataQueue.begin() + i);
-           i--;
-           MUL_LOG_INFO2( "MUL::MulAsyncDataProvider::ProvideData Removing From Q: startIndx=%d,range=%d", data.mStartIndex, data.mRange ); 
-           }
-        }
-    
-    if( !IsActive() )
-        { 
-        ActivateAndComplete();
-        }
-    }
-// ---------------------------------------------------------------------------
-// GetFirstIndexForWhichDataIsPresent
-// ---------------------------------------------------------------------------
-//
-int MulAsyncDataProvider::GetFirstIndexForWhichDataIsPresent(int aStartIndex, int aEndIndex)
-    {
-    if ( aStartIndex > aEndIndex )
-        {
-        return -1;
-        }
-    int mid = (aStartIndex + aEndIndex)/2;
-    if(mDataWindow.IsItemInDataWindow(aStartIndex))
-        {
-        if(mid == aStartIndex)
-            {
-            return mid;
-            }
-        if(mDataWindow.IsItemInDataWindow(mid))
-            {
-            return GetFirstIndexForWhichDataIsPresent(mid, aEndIndex);
-            }
-        else
-            {
-            return GetFirstIndexForWhichDataIsPresent(aStartIndex, mid);
-            }
-        }
-     else if(mDataWindow.IsItemInDataWindow(aEndIndex))
-        {
-        if(mid == aStartIndex)
-            {
-            return (mid + 1);
-            }
-        if(mDataWindow.IsItemInDataWindow(mid))
-            {
-            return GetFirstIndexForWhichDataIsPresent(aStartIndex, mid);
-            }
-        else
-            {
-            return GetFirstIndexForWhichDataIsPresent(mid, aEndIndex);
-            }           
-        }   
-    return -1;
-    }
-  
-// ---------------------------------------------------------------------------
-// ActivateAndComplete
-// ---------------------------------------------------------------------------
-//
- void MulAsyncDataProvider::ActivateAndComplete()
-    {
-    TRequestStatus* lStatus = &iStatus;
-    iStatus = KRequestPending;
-    SetActive();
-    User::RequestComplete(lStatus, KErrNone);
-    }
- 
-    } // End of namespace Alf .
-
-
-// End of file