diff options
Diffstat (limited to 'misc/uClibc++/include/uClibc++/queue')
-rw-r--r-- | misc/uClibc++/include/uClibc++/queue | 235 |
1 files changed, 124 insertions, 111 deletions
diff --git a/misc/uClibc++/include/uClibc++/queue b/misc/uClibc++/include/uClibc++/queue index b817b1dfe..51fe35cbe 100644 --- a/misc/uClibc++/include/uClibc++/queue +++ b/misc/uClibc++/include/uClibc++/queue @@ -1,19 +1,20 @@ -/* 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 -*/ +/* 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 <basic_definitions> #include <deque> @@ -25,102 +26,114 @@ #pragma GCC visibility push(default) -namespace std{ - - template <class T, class Container = deque<T> > 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 <class T, class Container> _UCXXEXPORT bool - operator==(const queue<T, Container>& x, const queue<T, Container>& y) - { - return (x.c == y.c); - } - template <class T, class Container> _UCXXEXPORT bool - operator< (const queue<T, Container>& x, const queue<T, Container>& y) - { - return (x.c < y.c); - } - template <class T, class Container> _UCXXEXPORT bool - operator!=(const queue<T, Container>& x, const queue<T, Container>& y) - { - return (x.c != y.c); - } - template <class T, class Container> _UCXXEXPORT bool - operator> (const queue<T, Container>& x, const queue<T, Container>& y) - { - return (x.c > y.c); - } - template <class T, class Container> _UCXXEXPORT bool - operator>=(const queue<T, Container>& x, const queue<T, Container>& y) - { - return (x.c >= y.c); - } - template <class T, class Container> _UCXXEXPORT bool - operator<=(const queue<T, Container>& x, const queue<T, Container>& y) - { - return (x.c <= y.c); - } - - - template <class T, - class Container = vector<T>, - class Compare = less<typename Container::value_type> - > 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 <class InputIterator> 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(); - } - }; - -} +extern "C++" +{ +namespace std +{ + template <class T, class Container = deque<T> > 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 <class T, class Container> _UCXXEXPORT bool + operator==(const queue<T, Container>& x, const queue<T, Container>& y) + { + return (x.c == y.c); + } + + template <class T, class Container> _UCXXEXPORT bool + operator< (const queue<T, Container>& x, const queue<T, Container>& y) + { + return (x.c < y.c); + } + + template <class T, class Container> _UCXXEXPORT bool + operator!=(const queue<T, Container>& x, const queue<T, Container>& y) + { + return (x.c != y.c); + } + + template <class T, class Container> _UCXXEXPORT bool + operator> (const queue<T, Container>& x, const queue<T, Container>& y) + { + return (x.c > y.c); + } + + template <class T, class Container> _UCXXEXPORT bool + operator>=(const queue<T, Container>& x, const queue<T, Container>& y) + { + return (x.c >= y.c); + } + + template <class T, class Container> _UCXXEXPORT bool + operator<=(const queue<T, Container>& x, const queue<T, Container>& y) + { + return (x.c <= y.c); + } + + template <class T, + class Container = vector<T>, + class Compare = less<typename Container::value_type> + > 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 <class InputIterator> 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 - - |