Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
stack320 linesDownload Raw Back to include
1// -*- C++ -*-2//===---------------------------- stack -----------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCUDACXX_STACK11#define _LIBCUDACXX_STACK12 13/*14    stack synopsis15 16namespace std17{18 19template <class T, class Container = deque<T>>20class stack21{22public:23    typedef Container                                container_type;24    typedef typename container_type::value_type      value_type;25    typedef typename container_type::reference       reference;26    typedef typename container_type::const_reference const_reference;27    typedef typename container_type::size_type       size_type;28 29protected:30    container_type c;31 32public:33    stack() = default;34    ~stack() = default;35 36    stack(const stack& q) = default;37    stack(stack&& q) = default;38 39    stack& operator=(const stack& q) = default;40    stack& operator=(stack&& q) = default;41 42    explicit stack(const container_type& c);43    explicit stack(container_type&& c);44    template <class Alloc> explicit stack(const Alloc& a);45    template <class Alloc> stack(const container_type& c, const Alloc& a);46    template <class Alloc> stack(container_type&& c, const Alloc& a);47    template <class Alloc> stack(const stack& c, const Alloc& a);48    template <class Alloc> stack(stack&& c, const Alloc& a);49 50    bool empty() const;51    size_type size() const;52    reference top();53    const_reference top() const;54 55    void push(const value_type& x);56    void push(value_type&& x);57    template <class... Args> reference emplace(Args&&... args); // reference in C++1758    void pop();59 60    void swap(stack& c) noexcept(is_nothrow_swappable_v<Container>)61};62 63template<class Container>64  stack(Container) -> stack<typename Container::value_type, Container>;  // C++1765 66template<class Container, class Allocator>67  stack(Container, Allocator) -> stack<typename Container::value_type, Container>; // C++1768 69template <class T, class Container>70  bool operator==(const stack<T, Container>& x, const stack<T, Container>& y);71template <class T, class Container>72  bool operator< (const stack<T, Container>& x, const stack<T, Container>& y);73template <class T, class Container>74  bool operator!=(const stack<T, Container>& x, const stack<T, Container>& y);75template <class T, class Container>76  bool operator> (const stack<T, Container>& x, const stack<T, Container>& y);77template <class T, class Container>78  bool operator>=(const stack<T, Container>& x, const stack<T, Container>& y);79template <class T, class Container>80  bool operator<=(const stack<T, Container>& x, const stack<T, Container>& y);81 82template <class T, class Container>83  void swap(stack<T, Container>& x, stack<T, Container>& y)84  noexcept(noexcept(x.swap(y)));85 86}  // std87 88*/89 90#include <__config>91#include <deque>92 93#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)94#  pragma GCC system_header95#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)96#  pragma clang system_header97#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)98#  pragma system_header99#endif // no system header100 101_LIBCUDACXX_BEGIN_NAMESPACE_STD102 103template <class _Tp, class _Container = deque<_Tp> > class _LIBCUDACXX_TEMPLATE_VIS stack;104 105template <class _Tp, class _Container>106_LIBCUDACXX_INLINE_VISIBILITY107bool108operator==(const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y);109 110template <class _Tp, class _Container>111_LIBCUDACXX_INLINE_VISIBILITY112bool113operator< (const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y);114 115template <class _Tp, class _Container /*= deque<_Tp>*/>116class _LIBCUDACXX_TEMPLATE_VIS stack117{118public:119    typedef _Container                               container_type;120    typedef typename container_type::value_type      value_type;121    typedef typename container_type::reference       reference;122    typedef typename container_type::const_reference const_reference;123    typedef typename container_type::size_type       size_type;124    static_assert((is_same<_Tp, value_type>::value), "" );125 126protected:127    container_type c;128 129public:130    _LIBCUDACXX_INLINE_VISIBILITY131    stack()132        noexcept(is_nothrow_default_constructible<container_type>::value)133        : c() {}134 135    _LIBCUDACXX_INLINE_VISIBILITY136    stack(const stack& __q) : c(__q.c) {}137 138    _LIBCUDACXX_INLINE_VISIBILITY139    stack& operator=(const stack& __q) {c = __q.c; return *this;}140 141 142    _LIBCUDACXX_INLINE_VISIBILITY143    stack(stack&& __q)144        noexcept(is_nothrow_move_constructible<container_type>::value)145        : c(_CUDA_VSTD::move(__q.c)) {}146 147    _LIBCUDACXX_INLINE_VISIBILITY148    stack& operator=(stack&& __q)149        noexcept(is_nothrow_move_assignable<container_type>::value)150        {c = _CUDA_VSTD::move(__q.c); return *this;}151 152    _LIBCUDACXX_INLINE_VISIBILITY153    explicit stack(container_type&& __c) : c(_CUDA_VSTD::move(__c)) {}154 155    _LIBCUDACXX_INLINE_VISIBILITY156    explicit stack(const container_type& __c) : c(__c) {}157 158    template <class _Alloc>159        _LIBCUDACXX_INLINE_VISIBILITY160        explicit stack(const _Alloc& __a,161                       typename enable_if<uses_allocator<container_type,162                                                         _Alloc>::value>::type* = 0)163            : c(__a) {}164    template <class _Alloc>165        _LIBCUDACXX_INLINE_VISIBILITY166        stack(const container_type& __c, const _Alloc& __a,167              typename enable_if<uses_allocator<container_type,168                                                _Alloc>::value>::type* = 0)169            : c(__c, __a) {}170    template <class _Alloc>171        _LIBCUDACXX_INLINE_VISIBILITY172        stack(const stack& __s, const _Alloc& __a,173              typename enable_if<uses_allocator<container_type,174                                                _Alloc>::value>::type* = 0)175            : c(__s.c, __a) {}176    template <class _Alloc>177        _LIBCUDACXX_INLINE_VISIBILITY178        stack(container_type&& __c, const _Alloc& __a,179              typename enable_if<uses_allocator<container_type,180                                                _Alloc>::value>::type* = 0)181            : c(_CUDA_VSTD::move(__c), __a) {}182    template <class _Alloc>183        _LIBCUDACXX_INLINE_VISIBILITY184        stack(stack&& __s, const _Alloc& __a,185              typename enable_if<uses_allocator<container_type,186                                                _Alloc>::value>::type* = 0)187            : c(_CUDA_VSTD::move(__s.c), __a) {}188 189    _LIBCUDACXX_NODISCARD_AFTER_CXX17 _LIBCUDACXX_INLINE_VISIBILITY190    bool empty()     const      {return c.empty();}191    _LIBCUDACXX_INLINE_VISIBILITY192    size_type size() const      {return c.size();}193    _LIBCUDACXX_INLINE_VISIBILITY194    reference top()             {return c.back();}195    _LIBCUDACXX_INLINE_VISIBILITY196    const_reference top() const {return c.back();}197 198    _LIBCUDACXX_INLINE_VISIBILITY199    void push(const value_type& __v) {c.push_back(__v);}200    _LIBCUDACXX_INLINE_VISIBILITY201    void push(value_type&& __v) {c.push_back(_CUDA_VSTD::move(__v));}202 203    template <class... _Args>204        _LIBCUDACXX_INLINE_VISIBILITY205#if _LIBCUDACXX_STD_VER > 14206        decltype(auto) emplace(_Args&&... __args)207        { return c.emplace_back(_CUDA_VSTD::forward<_Args>(__args)...);}208#else209        void      emplace(_Args&&... __args)210        {        c.emplace_back(_CUDA_VSTD::forward<_Args>(__args)...);}211#endif212 213    _LIBCUDACXX_INLINE_VISIBILITY214    void pop() {c.pop_back();}215 216    _LIBCUDACXX_INLINE_VISIBILITY217    void swap(stack& __s)218        noexcept(__is_nothrow_swappable<container_type>::value)219    {220        using _CUDA_VSTD::swap;221        swap(c, __s.c);222    }223 224    template <class T1, class _C1>225    friend226    bool227    operator==(const stack<T1, _C1>& __x, const stack<T1, _C1>& __y);228 229    template <class T1, class _C1>230    friend231    bool232    operator< (const stack<T1, _C1>& __x, const stack<T1, _C1>& __y);233};234 235#ifndef _LIBCUDACXX_HAS_NO_DEDUCTION_GUIDES236template<class _Container,237         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type238>239stack(_Container)240    -> stack<typename _Container::value_type, _Container>;241 242template<class _Container,243         class _Alloc,244         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type,245         class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type246         >247stack(_Container, _Alloc)248    -> stack<typename _Container::value_type, _Container>;249#endif250 251template <class _Tp, class _Container>252inline _LIBCUDACXX_INLINE_VISIBILITY253bool254operator==(const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y)255{256    return __x.c == __y.c;257}258 259template <class _Tp, class _Container>260inline _LIBCUDACXX_INLINE_VISIBILITY261bool262operator< (const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y)263{264    return __x.c < __y.c;265}266 267template <class _Tp, class _Container>268inline _LIBCUDACXX_INLINE_VISIBILITY269bool270operator!=(const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y)271{272    return !(__x == __y);273}274 275template <class _Tp, class _Container>276inline _LIBCUDACXX_INLINE_VISIBILITY277bool278operator> (const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y)279{280    return __y < __x;281}282 283template <class _Tp, class _Container>284inline _LIBCUDACXX_INLINE_VISIBILITY285bool286operator>=(const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y)287{288    return !(__x < __y);289}290 291template <class _Tp, class _Container>292inline _LIBCUDACXX_INLINE_VISIBILITY293bool294operator<=(const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y)295{296    return !(__y < __x);297}298 299template <class _Tp, class _Container>300inline _LIBCUDACXX_INLINE_VISIBILITY301typename enable_if<302    __is_swappable<_Container>::value,303    void304>::type305swap(stack<_Tp, _Container>& __x, stack<_Tp, _Container>& __y)306    noexcept(noexcept(__x.swap(__y)))307{308    __x.swap(__y);309}310 311template <class _Tp, class _Container, class _Alloc>312struct _LIBCUDACXX_TEMPLATE_VIS uses_allocator<stack<_Tp, _Container>, _Alloc>313    : public uses_allocator<_Container, _Alloc>314{315};316 317_LIBCUDACXX_END_NAMESPACE_STD318 319#endif  // _LIBCUDACXX_STACK320 
codekingpro/portable-devtools · Team Ai