Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
IMAAudioRTP/RTPMPIMAAudio/Sources/TQueue.c
/* |
File: TQueue.c |
Contains: Definition of operations for TQueue, a generic queue datatype |
Copyright: © 1997-1999 by Apple Computer, Inc., all rights reserved. |
*/ |
#include "TQueue.h" |
typedef struct __cElement |
{ |
TCycle __itsLink; |
void * __itsPayload; |
} __cElement; |
static |
__cElement ** |
__ElementNew( |
void * inPayload ) |
{ |
__cElement ** __elementNew; |
__elementNew = ( __cElement ** ) CycleNew( sizeof( **__elementNew ) ); |
if( __elementNew ) |
( **__elementNew ).__itsPayload = inPayload; |
return( __elementNew ); |
} |
static |
TCycle ** |
__ElementCycle( |
__cElement ** inElement ) |
{ |
return( ( TCycle ** ) inElement ); |
} |
static |
void * |
__ElementPayload( |
__cElement ** inElement ) |
{ |
return( ( **inElement ).__itsPayload ); |
} |
static |
void |
__ElementDispose( |
__cElement ** inElement ) |
{ |
CycleDispose( ( TCycle ** ) inElement ); |
} |
extern |
void |
QueueInitialize( |
TQueue * inQueue ) |
{ |
if( inQueue ) |
{ |
inQueue->__itsList = 0; |
inQueue->__itsCount = 0; |
} |
} |
extern |
UInt32 |
QueueCount( |
const TQueue * inQueue ) |
{ |
UInt32 queueCount = 0; |
if( inQueue ) |
queueCount = inQueue->__itsCount; |
return( queueCount ); |
} |
extern |
void * |
QueueHead( |
const TQueue * inQueue ) |
{ |
void * queueHead = 0; |
if( inQueue && inQueue->__itsList ) |
queueHead = __ElementPayload( ( __cElement ** ) CycleNext( inQueue->__itsList ) ); |
return( queueHead ); |
} |
extern |
void * |
QueueEnqueue( |
TQueue * inQueue, |
void * inElement ) |
{ |
void * queueEnqueue = 0; |
__cElement ** theElement; |
if( inQueue && inElement ) |
{ |
theElement = __ElementNew( inElement ); |
if( theElement ) |
{ |
if( inQueue->__itsList ) |
CyclePut( inQueue->__itsList, __ElementCycle( theElement ) ); |
inQueue->__itsList = __ElementCycle( theElement ); |
inQueue->__itsCount++; |
queueEnqueue = inElement; |
} |
} |
return( queueEnqueue ); |
} |
extern |
void * |
QueueDequeue( |
TQueue * inQueue ) |
{ |
void * queueDequeue = 0; |
__cElement ** theElement; |
if( inQueue && inQueue->__itsList ) |
{ |
theElement = ( __cElement ** ) CycleGet( inQueue->__itsList ); |
queueDequeue = __ElementPayload( theElement ); |
__ElementDispose( theElement ); |
--inQueue->__itsCount; |
if( !inQueue->__itsCount ) |
inQueue->__itsList = 0; |
} |
return( queueDequeue ); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14