mirror of
				https://github.com/intel/intel-graphics-compiler.git
				synced 2025-11-04 08:21:06 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			139 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*========================== begin_copyright_notice ============================
 | 
						|
 | 
						|
Copyright (C) 2019-2021 Intel Corporation
 | 
						|
 | 
						|
SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
============================= end_copyright_notice ===========================*/
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include "LinkedList.h"
 | 
						|
 | 
						|
namespace iSTD
 | 
						|
{
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
Template Parameters
 | 
						|
\*****************************************************************************/
 | 
						|
#define QueueTemplateList   class Type, class CAllocatorType
 | 
						|
#define CQueueType          CQueue<Type,CAllocatorType>
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Class:
 | 
						|
    CQueue
 | 
						|
 | 
						|
Description:
 | 
						|
    Implements an linked-list-based queue
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<QueueTemplateList>
 | 
						|
class CQueue : public CLinkedListType
 | 
						|
{
 | 
						|
public:
 | 
						|
 | 
						|
    bool    Push( const Type element );
 | 
						|
    Type    Pop( void );
 | 
						|
    Type    Top( void ) const;
 | 
						|
};
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CQueue::Push
 | 
						|
 | 
						|
Description:
 | 
						|
    Pushes an element on the queue
 | 
						|
 | 
						|
Input:
 | 
						|
    const Type element
 | 
						|
 | 
						|
Output:
 | 
						|
    bool - success or fail
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<QueueTemplateList>
 | 
						|
bool CQueueType::Push( const Type element )
 | 
						|
{
 | 
						|
    // Add element to the top of list
 | 
						|
    return this->Add( element );
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CQueue::Pop
 | 
						|
 | 
						|
Description:
 | 
						|
    Pops an element off the queue
 | 
						|
 | 
						|
Input:
 | 
						|
    none
 | 
						|
 | 
						|
Output:
 | 
						|
    Type - element
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<QueueTemplateList>
 | 
						|
Type CQueueType::Pop( void )
 | 
						|
{
 | 
						|
    Type element = {0};
 | 
						|
 | 
						|
    if( this->IsEmpty() )
 | 
						|
    {
 | 
						|
        ASSERT(0);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        // Get the last element on the list
 | 
						|
        typename CQueue::CIterator end = this->End();
 | 
						|
        --end;
 | 
						|
 | 
						|
        element = *end;
 | 
						|
 | 
						|
        // Remove the last element
 | 
						|
        this->Remove( end );
 | 
						|
    }
 | 
						|
 | 
						|
    return element;
 | 
						|
}
 | 
						|
 | 
						|
/*****************************************************************************\
 | 
						|
 | 
						|
Function:
 | 
						|
    CQueue::Top
 | 
						|
 | 
						|
Description:
 | 
						|
    Returns the top element of the queue
 | 
						|
 | 
						|
Input:
 | 
						|
    none
 | 
						|
 | 
						|
Output:
 | 
						|
    Type - element
 | 
						|
 | 
						|
\*****************************************************************************/
 | 
						|
template<QueueTemplateList>
 | 
						|
Type CQueueType::Top( void ) const
 | 
						|
{
 | 
						|
    Type element = {0};
 | 
						|
 | 
						|
    if( this->IsEmpty() )
 | 
						|
    {
 | 
						|
        ASSERT(0);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        // Get the last element on the list
 | 
						|
        typename CQueueType::CConstIterator end = this->End();
 | 
						|
        --end;
 | 
						|
 | 
						|
        element = *end;
 | 
						|
    }
 | 
						|
 | 
						|
    return element;
 | 
						|
}
 | 
						|
 | 
						|
} // iSTD
 |