/* 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 #pragma GCC visibility push(default) extern "C++" { 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(); } }; } // namespace } // extern "C++" #pragma GCC visibility pop #endif