/* Copyright (C) 2004 Garrett A. Kajmowicz This file is part of the uClibc++ Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #ifndef __HEADER_STD_QUEUE #define __HEADER_STD_QUEUE 1 namespace std{ template > class _UCXXEXPORT queue{ protected: Container c; public: typedef typename Container::value_type value_type; typedef typename Container::size_type size_type; typedef Container container_type; explicit queue(const Container& a = Container()) : c(a) { } bool empty() const { return c.empty(); } size_type size() const { return c.size(); } value_type& front() { return c.front(); } const value_type& front() const { return c.front(); } value_type& back() { return c.back(); } const value_type& back() const { return c.back(); } void push(const value_type& x) { c.push_back(x); } void pop() { c.pop_front(); } }; template _UCXXEXPORT bool operator==(const queue& x, const queue& y) { return (x.c == y.c); } template _UCXXEXPORT bool operator< (const queue& x, const queue& y) { return (x.c < y.c); } template _UCXXEXPORT bool operator!=(const queue& x, const queue& y) { return (x.c != y.c); } template _UCXXEXPORT bool operator> (const queue& x, const queue& y) { return (x.c > y.c); } template _UCXXEXPORT bool operator>=(const queue& x, const queue& y) { return (x.c >= y.c); } template _UCXXEXPORT bool operator<=(const queue& x, const queue& y) { return (x.c <= y.c); } template , class Compare = less > class _UCXXEXPORT priority_queue { protected: Container c; Compare comp; public: typedef typename Container::value_type value_type; typedef typename Container::size_type size_type; typedef Container container_type; explicit priority_queue(const Compare& x = Compare(), const Container& a = Container()) : c(a), comp(x) { make_heap(c.begin(), c.end(), comp) ; } template priority_queue(InputIterator first, InputIterator last, const Compare& x = Compare(), const Container& y= Container()) : c(y), comp(c) { c.insert(c.end(), first, last); make_heap(c.begin(), c.end(), comp); } bool empty() const { return c.empty(); } size_type size() const { return c.size(); } const value_type& top() const { return c.front(); } void push(const value_type& x){ c.push_back(x); push_heap(c.begin(), c.end(), comp); } void pop(){ pop_heap(c.begin(), c.end(), comp); c.pop_back(); } }; } #endif