01871bf642
Previously, wxUSE_STL enabled both implicit conversion of wxString to std::[w]string and use of standard containers for the implementation of their wx equivalents. Split up the two roles now by allowing to enable the use of the standard containers independently of (backwards incompatible) implicit conversion in wxString and actually enable wxUSE_STD_CONTAINERS by default. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67343 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
86 lines
2.1 KiB
C++
86 lines
2.1 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/stack.h
|
|
// Purpose: STL stack clone
|
|
// Author: Lindsay Mathieson, Vadim Zeitlin
|
|
// Created: 30.07.2001
|
|
// Copyright: (c) 2001 Lindsay Mathieson <lindsay@mathieson.org> (WX_DECLARE_STACK)
|
|
// 2011 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_STACK_H_
|
|
#define _WX_STACK_H_
|
|
|
|
#include "wx/vector.h"
|
|
|
|
#if wxUSE_STD_CONTAINERS
|
|
|
|
#include <stack>
|
|
#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 <typename T>
|
|
class wxStack
|
|
{
|
|
public:
|
|
typedef wxVector<T> 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<obj> \
|
|
{\
|
|
public:\
|
|
void push(const obj& o)\
|
|
{\
|
|
push_back(o); \
|
|
};\
|
|
\
|
|
void pop()\
|
|
{\
|
|
pop_back(); \
|
|
};\
|
|
\
|
|
obj& top()\
|
|
{\
|
|
return at(size() - 1);\
|
|
};\
|
|
const obj& top() const\
|
|
{\
|
|
return at(size() - 1); \
|
|
};\
|
|
}
|
|
|
|
#endif // _WX_STACK_H_
|
|
|