chxavactivecompletiondispatch.h

来自「symbian 下的helix player源代码」· C头文件 代码 · 共 129 行

H
129
字号
/************************************************************************
 * chxavactivecompletiondispatch.h
 * -------------------------------
 *
 * Synopsis:
 *
 * Dispatch for CAtive derived objects.
 *
 * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
 *
 ************************************************************************/ 
#ifndef _chxavactivecompletiondispatch_h_
#define _chxavactivecompletiondispatch_h_

// Symbian includes...
#include <e32base.h>
#include <basched.h>

// Helix includes...
#include "unkimp.h"
#include "ihxpckts.h"
#include "hxstring.h"
#include "hxurl.h"
#include "hxwintyp.h"
#include "hxcom.h"
#include "hxcomm.h"
#include "hxmon.h"
#include "hxfiles.h"
#include "hxcore.h"
#include "hxwin.h"

// Include from this project...
#include "chxbody.h"
#include "chxmakesmartptr.h"

// CHXAvActiveCmpl:
//   Active Object completion dispatch.
class CHXAvActiveCmpl : 
    public CActive, public CHXBody
{
public:
    CHXAvActiveCmpl() : CActive(0) {}
    virtual ~CHXAvActiveCmpl() {}
    
    virtual TRequestStatus& Status() = 0;
    virtual void RunL() = 0;
    virtual void Activate() = 0;

protected:
    virtual void DoCancel() = 0;
};

MakeSmartPtr(CHXAvActiveCmpl);   // Create a smart pointer class CHXAvActiveCmplPtr


template<class Recv>
class CHXAvActiveDisp : public CHXAvActiveCmpl {
public:
    typedef void (Recv::*FuncPtr)(int);
    CHXAvActiveDisp(Recv* pRecv, FuncPtr pCmpl, FuncPtr pCancel);
    virtual ~CHXAvActiveDisp();
    
    virtual TRequestStatus& Status();
    virtual void RunL();
    virtual void Activate();

protected:
    virtual void DoCancel();

private:
    Recv* m_pRecv;		// Object receiving completion
    FuncPtr m_pCmpl;		// Completion function
    FuncPtr m_pCancel;		// Cancel function
};

template<class Recv>
inline
CHXAvActiveDisp<Recv>::CHXAvActiveDisp(Recv* pRecv, FuncPtr pCmpl, FuncPtr pCancel)
    : m_pRecv(pRecv),
      m_pCmpl(pCmpl),
      m_pCancel(pCancel)
{}

template<class Recv>
inline
CHXAvActiveDisp<Recv>::~CHXAvActiveDisp()
{
}

template<class Recv>
inline
TRequestStatus& CHXAvActiveDisp<Recv>::Status()
{
    return iStatus;
}

template<class Recv>
inline
void CHXAvActiveDisp<Recv>::RunL()
{
#if defined(DEBUG)
    // our active object should not be leaving (except new)
    TRAPD(err,
    (m_pRecv->*m_pCmpl)(iStatus.Int()) );
    HX_ASSERT(err == KErrNone);
    User::LeaveIfError(err); // possibly continue leaving
#else
    (m_pRecv->*m_pCmpl)(iStatus.Int());
#endif

}

template<class Recv>
inline
void CHXAvActiveDisp<Recv>::DoCancel()
{
    (m_pRecv->*m_pCancel)(0);
}

template<class Recv>
inline
void CHXAvActiveDisp<Recv>::Activate()
{
    if (!IsActive())
	SetActive();
}

#endif // _chxavactivecompletiondispatch_h_

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?