1 /***************************************************************** 2 | 3 | Neptune - Queue 4 | 5 | Copyright (c) 2002-2008, Axiomatic Systems, LLC. 6 | All rights reserved. 7 | 8 | Redistribution and use in source and binary forms, with or without 9 | modification, are permitted provided that the following conditions are met: 10 | * Redistributions of source code must retain the above copyright 11 | notice, this list of conditions and the following disclaimer. 12 | * Redistributions in binary form must reproduce the above copyright 13 | notice, this list of conditions and the following disclaimer in the 14 | documentation and/or other materials provided with the distribution. 15 | * Neither the name of Axiomatic Systems nor the 16 | names of its contributors may be used to endorse or promote products 17 | derived from this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY 20 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY 23 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | 30 ****************************************************************/ 31 32 #ifndef _NPT_QUEUE_H_ 33 #define _NPT_QUEUE_H_ 34 35 /*---------------------------------------------------------------------- 36 | includes 37 +---------------------------------------------------------------------*/ 38 #include "NptTypes.h" 39 #include "NptConstants.h" 40 41 /*---------------------------------------------------------------------- 42 | NPT_QueueItem 43 +---------------------------------------------------------------------*/ 44 class NPT_QueueItem; 45 46 /*---------------------------------------------------------------------- 47 | NPT_GenericQueue 48 +---------------------------------------------------------------------*/ 49 class NPT_GenericQueue 50 { 51 public: 52 // class methods 53 static NPT_GenericQueue* CreateInstance(NPT_Cardinal max_items = 0); 54 55 // methods ~NPT_GenericQueue()56 virtual ~NPT_GenericQueue() {} 57 virtual NPT_Result Push(NPT_QueueItem* item, 58 NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0; 59 virtual NPT_Result Pop(NPT_QueueItem*& item, 60 NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0; 61 virtual NPT_Result Peek(NPT_QueueItem*& item, 62 NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) = 0; 63 protected: 64 // methods NPT_GenericQueue()65 NPT_GenericQueue() {} 66 }; 67 68 /*---------------------------------------------------------------------- 69 | NPT_Queue 70 +---------------------------------------------------------------------*/ 71 template <class T> 72 class NPT_Queue 73 { 74 public: 75 // methods 76 NPT_Queue(NPT_Cardinal max_items = 0) : m_Delegate(NPT_GenericQueue::CreateInstance (max_items))77 m_Delegate(NPT_GenericQueue::CreateInstance(max_items)) {} 78 virtual ~NPT_Queue<T>() { delete m_Delegate; } 79 virtual NPT_Result Push(T* item, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) { 80 return m_Delegate->Push(reinterpret_cast<NPT_QueueItem*>(item), timeout); 81 } 82 virtual NPT_Result Pop(T*& item, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) { 83 return m_Delegate->Pop(reinterpret_cast<NPT_QueueItem*&>(item), timeout); 84 } 85 virtual NPT_Result Peek(T*& item, NPT_Timeout timeout = NPT_TIMEOUT_INFINITE) { 86 return m_Delegate->Peek(reinterpret_cast<NPT_QueueItem*&>(item), timeout); 87 } 88 89 protected: 90 // members 91 NPT_GenericQueue* m_Delegate; 92 }; 93 94 #endif // _NPT_QUEUE_H_ 95