X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c21ee7925bfd129f5a715f986ccde554922cce15..f6669958924c3c3833e2932b65598b06073d2e65:/include/wx/stack.h diff --git a/include/wx/stack.h b/include/wx/stack.h index 835b736a63..b4e8ed2f8a 100644 --- a/include/wx/stack.h +++ b/include/wx/stack.h @@ -1,10 +1,10 @@ /////////////////////////////////////////////////////////////////////////////// // Name: wx/stack.h // Purpose: STL stack clone -// Author: Lindsay Mathieson -// Modified by: +// Author: Lindsay Mathieson, Vadim Zeitlin // Created: 30.07.2001 -// Copyright: (c) 2001 Lindsay Mathieson +// Copyright: (c) 2001 Lindsay Mathieson (WX_DECLARE_STACK) +// 2011 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -13,6 +13,50 @@ #include "wx/vector.h" +#if wxUSE_STD_CONTAINERS + +#include +#define wxStack std::stack + +#else // !wxUSE_STD_CONTAINERS + +// Notice that unlike std::stack, wxStack currently always uses wxVector and +// can't be used with any other underlying container type. +// +// Another difference is that comparison operators between stacks are not +// implemented (but they should be, see 23.2.3.3 of ISO/IEC 14882:1998). + +template +class wxStack +{ +public: + typedef wxVector container_type; + typedef typename container_type::size_type size_type; + typedef typename container_type::value_type value_type; + + wxStack() { } + explicit wxStack(const container_type& cont) : m_cont(cont) { } + + // Default copy ctor, assignment operator and dtor are ok. + + + bool empty() const { return m_cont.empty(); } + size_type size() const { return m_cont.size(); } + + value_type& top() { return m_cont.back(); } + const value_type& top() const { return m_cont.back(); } + + void push(const value_type& val) { m_cont.push_back(val); } + void pop() { m_cont.pop_back(); } + +private: + container_type m_cont; +}; + +#endif // wxUSE_STD_CONTAINERS/!wxUSE_STD_CONTAINERS + + +// Deprecated macro-based class for compatibility only, don't use any more. #define WX_DECLARE_STACK(obj, cls) \ class cls : public wxVector \ {\