bfragfct.h

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

H
133
字号
/****************************************************************************
 * 
 *  $Id: bfragfct.h,v 1.3 2003/07/31 17:23:44 jbloedow Exp $
 *
 *  Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
 *  
 *  http://www.real.com/devzone
 *
 *  This program contains proprietary 
 *  information of Progressive Networks, Inc, and is licensed
 *  subject to restrictions on use and distribution.
 *
 *
 *  Buffer Fragment Factory class
 *
 */

#ifndef _BFRAGFCT_H_
#define _BFRAGFCT_H_

/****************************************************************************
 *  Defines
 */

/****************************************************************************
 *  Includes
 */
#include "hxtypes.h"
#include "hxcom.h"
#include "hxcomm.h"
#include "ihxpckts.h"

#include "cringbuf.h"
#include "bfrag.h"

#include "qtffrefcounter.h"


/****************************************************************************
 * 
 *  Class:
 *	CQTBufferFragmentFactory
 *
 *  Purpose:
 *	Enables paging of file sections into memory
 *
 */
class CBufferFragmentFactory
{
public:
    /*
     *	Constructor/Destructor
     */
    CBufferFragmentFactory(ULONG32 ulMaxSize, ULONG32 ulInitialOccupancy = 0);


    /*
     *	CBufferFragment methods
     */
    IHXBuffer* WrapFragment(IHXBuffer* pBuffer,
			     ULONG32 ulOffset,
			     ULONG32 ulSize)
    {
	CBufferFragment* pBufferFragment = NULL;

	pBufferFragment = (CBufferFragment*) m_pRingBuffer->Get();
	if (!pBufferFragment)
	{
	    pBufferFragment = new CBufferFragment();
	    if (pBufferFragment)
	    {
		pBufferFragment->AddRef();
	    }
	}
	if (pBufferFragment)
	{
	    pBufferFragment->Init(pBuffer,
				  ulOffset,
				  ulSize,
				  this);
	}

	return pBufferFragment;
    }

    BOOL Put(CBufferFragment* pBufferFragment)
    {
	if (m_pRingBuffer->Put(pBufferFragment))
	{
	    pBufferFragment->AddRef();
	    return TRUE;
	}

	return FALSE;
    }

    ULONG32 AddRef(void)
    {
	return InterlockedIncrement(&m_lRefCount);
    }

    ULONG32 Release(void)
    {
	if (InterlockedDecrement(&m_lRefCount) > 0)
	{
	    return m_lRefCount;
	}

	delete this;
	return 0;
    }

private:
    CRingBuffer* m_pRingBuffer;

    LONG32 m_lRefCount;

    ~CBufferFragmentFactory()
    {
	CBufferFragment* pDeadFragment;

	while (pDeadFragment = ((CBufferFragment*) m_pRingBuffer->Get()))
	{
	    pDeadFragment->Release();
	}
	delete m_pRingBuffer;
    }

    PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
};

#endif  // _BFRAGFCT_H_

⌨️ 快捷键说明

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