Queue.h
Go to the documentation of this file.00001 /******************************************************************************* 00002 * 00003 * Copyright (c) 2010 Philipp Werner <philipp.werner@st.ovgu.de> 00004 * All rights reserved. 00005 * 00006 * Redistribution and use in source and binary forms, with or without 00007 * modification, are permitted provided that the following conditions 00008 * are met: 00009 * 00010 * * Redistributions of source code must retain the above copyright 00011 * notice, this list of conditions and the following disclaimer. 00012 * 00013 * * Redistributions in binary form must reproduce the above copyright 00014 * notice, this list of conditions and the following disclaimer in 00015 * the documentation and/or other materials provided with the 00016 * distribution. 00017 * 00018 * * Neither the name of the copyright holders nor the names of 00019 * contributors may be used to endorse or promote products derived 00020 * from this software without specific prior written permission. 00021 * 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 00024 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 00025 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00026 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00027 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00028 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00029 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00030 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00031 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00032 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00033 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 * 00035 * 00036 * $Id$ 00037 * 00038 ******************************************************************************/ 00039 00040 00041 #ifndef __QUEUE_H_D5F01F9217D30D__ 00042 #define __QUEUE_H_D5F01F9217D30D__ 00043 00044 00045 #include "mw/afp/Config.h" 00046 #include "object/RingBuffer.h" 00047 #if !defined(__NO_STL__) 00048 #include <list> 00049 #else 00050 #include "assert/staticerror.h" 00051 #endif 00052 00053 00054 namespace famouso { 00055 namespace mw { 00056 namespace afp { 00057 namespace defrag { 00058 namespace detail { 00059 00065 template < typename T, unsigned int N > 00066 class Queue : public object::RingBuffer<T, N> { 00067 00068 typedef object::RingBuffer<T, N> Base; 00069 00070 public: 00071 00073 void push(const T & e) { 00074 Base::push_back(e); 00075 } 00076 00078 void pop() { 00079 Base::pop_front(); 00080 } 00081 00083 bool full() { 00084 return Base::is_full(); 00085 } 00086 00088 bool empty() { 00089 return Base::is_empty(); 00090 } 00091 }; 00092 00093 #if !defined(__NO_STL__) 00094 00099 template < typename T > 00100 class Queue<T, dynamic> : public std::list<T> { 00101 00102 typedef std::list<T> Base; 00103 00104 public: 00105 00107 void push(const T & e) { 00108 Base::push_back(e); 00109 } 00110 00112 void pop() { 00113 Base::pop_front(); 00114 } 00115 00117 bool full() { 00118 return false; 00119 } 00120 }; 00121 00122 #else 00123 00124 template < typename T > 00125 class Queue<T, dynamic> { 00126 FAMOUSO_STATIC_ASSERT_ERROR(false, dynamic_Queue_not_supported_on_this_platform, ()); 00127 }; 00128 00129 #endif 00130 00131 } // namespace detail 00132 } // namespace defrag 00133 } // namespace afp 00134 } // namespace mw 00135 } // namespace famouso 00136 00137 00138 #endif // __QUEUE_H_D5F01F9217D30D__ 00139