Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

117 lines
2.2 KiB

//**************************************************************************
//
// Title : CCQue.cpp
//
// Date : 1998.05.06 1st making
//
// Author : Toshiba [PCS](PSY) Hideki Yagi
//
// Copyright 1997 Toshiba Corporation. All Rights Reserved.
//
// -------------------------------------------------------------------------
//
// Change log :
//
// Date Revision Description
// ------------ ---------- -----------------------------------------------
// 1998.05.06 000.0000 1st making.
//
//**************************************************************************
#include "includes.h"
#include "ccque.h"
#include "wdmbuff.h"
#include "dvdinit.h"
CCQueue::CCQueue( void )
{
count = 0;
top = bottom = NULL;
}
CCQueue::~CCQueue( void )
{
count = 0;
top = bottom = NULL;
}
void CCQueue::Init( void )
{
count = 0;
top = bottom = NULL;
}
void CCQueue::put( PHW_STREAM_REQUEST_BLOCK pSrb )
{
pSrb->NextSRB = NULL;
if( top == NULL ){
top = bottom = pSrb;
count++;
return;
}
bottom->NextSRB = pSrb;
bottom = pSrb;
count++;
return;
}
PHW_STREAM_REQUEST_BLOCK CCQueue::get( void )
{
PHW_STREAM_REQUEST_BLOCK srb;
if( top == NULL ){
return( NULL );
}
srb = top;
top = top->NextSRB;
count--;
if( count==0 ){
top = bottom = NULL;
}
return( srb );
}
BOOL CCQueue::remove( PHW_STREAM_REQUEST_BLOCK pSrb )
{
if( top == NULL ){
return( FALSE );
}
if( top == pSrb ){
top = top->NextSRB;
count--;
if( count==0 )
top = bottom = NULL;
return( TRUE );
}
PHW_STREAM_REQUEST_BLOCK srbPrev;
PHW_STREAM_REQUEST_BLOCK srb;
srbPrev = top;
srb = srbPrev->NextSRB;
while( srb!=NULL ){
if( srb==pSrb ){
srbPrev->NextSRB = srb->NextSRB;
if( srb == bottom ){
bottom = srbPrev;
}
count--;
return( TRUE );
// break;
}
srbPrev = srb;
srb = srbPrev->NextSRB;
}
return( FALSE );
}