make it possible to forward declare the class defined by WX_DECLARE_HASH_SET (fixes the build on systems where unordered_set is available after r60408)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60410 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -22,14 +22,12 @@
|
|||||||
|
|
||||||
#if defined(HAVE_STD_UNORDERED_SET)
|
#if defined(HAVE_STD_UNORDERED_SET)
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\
|
#define WX_HASH_SET_BASE_TEMPLATE std::unordered_set
|
||||||
typedef std::unordered_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME
|
|
||||||
#elif defined(HAVE_TR1_UNORDERED_SET)
|
#elif defined(HAVE_TR1_UNORDERED_SET)
|
||||||
#include <tr1/unordered_set>
|
#include <tr1/unordered_set>
|
||||||
#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\
|
#define WX_HASH_SET_BASE_TEMPLATE std::tr1::unordered_set
|
||||||
typedef std::tr1::unordered_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME
|
|
||||||
#else
|
#else
|
||||||
#error Update this code: unordered_set is available, but I do not know where.
|
#error Update this code: unordered_set is available, but I do not know where.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP)
|
#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP)
|
||||||
@@ -40,10 +38,38 @@
|
|||||||
#include <hash_set>
|
#include <hash_set>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\
|
#define WX_HASH_SET_BASE_TEMPLATE WX_HASH_MAP_NAMESPACE::hash_set
|
||||||
typedef WX_HASH_MAP_NAMESPACE::hash_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME
|
|
||||||
|
|
||||||
#else // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
|
#endif // different hash_set/unordered_set possibilities
|
||||||
|
|
||||||
|
#ifdef WX_HASH_SET_BASE_TEMPLATE
|
||||||
|
|
||||||
|
// we need to define the class declared by _WX_DECLARE_HASH_SET as a class and
|
||||||
|
// not a typedef to allow forward declaring it
|
||||||
|
#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \
|
||||||
|
CLASSEXP CLASSNAME \
|
||||||
|
: public WX_HASH_SET_BASE_TEMPLATE< KEY_T, HASH_T, KEY_EQ_T > \
|
||||||
|
{ \
|
||||||
|
public: \
|
||||||
|
explicit CLASSNAME(size_type n = 3, \
|
||||||
|
const hasher& h = hasher(), \
|
||||||
|
const key_equal& ke = key_equal(), \
|
||||||
|
const allocator_type& a = allocator_type()) \
|
||||||
|
: WX_HASH_SET_BASE_TEMPLATE< KEY_T, HASH_T, KEY_EQ_T >(n, h, ke, a) \
|
||||||
|
{} \
|
||||||
|
template <class InputIterator> \
|
||||||
|
CLASSNAME(InputIterator f, InputIterator l, \
|
||||||
|
const hasher& h = hasher(), \
|
||||||
|
const key_equal& ke = key_equal(), \
|
||||||
|
const allocator_type& a = allocator_type()) \
|
||||||
|
: WX_HASH_SET_BASE_TEMPLATE< KEY_T, HASH_T, KEY_EQ_T >(f, l, h, ke, a)\
|
||||||
|
{} \
|
||||||
|
CLASSNAME(const WX_HASH_SET_BASE_TEMPLATE< KEY_T, HASH_T, KEY_EQ_T >& s) \
|
||||||
|
: WX_HASH_SET_BASE_TEMPLATE< KEY_T, HASH_T, KEY_EQ_T >(s) \
|
||||||
|
{} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // no appropriate STL class, use our own implementation
|
||||||
|
|
||||||
// this is a complex way of defining an easily inlineable identity function...
|
// this is a complex way of defining an easily inlineable identity function...
|
||||||
#define _WX_DECLARE_HASH_SET_KEY_EX( KEY_T, CLASSNAME, CLASSEXP ) \
|
#define _WX_DECLARE_HASH_SET_KEY_EX( KEY_T, CLASSNAME, CLASSEXP ) \
|
||||||
@@ -103,7 +129,8 @@ public: \
|
|||||||
{ return GetNode( key ) ? 1 : 0; } \
|
{ return GetNode( key ) ? 1 : 0; } \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
|
#endif // STL/wx implementations
|
||||||
|
|
||||||
|
|
||||||
// these macros are to be used in the user code
|
// these macros are to be used in the user code
|
||||||
#define WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME) \
|
#define WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME) \
|
||||||
|
Reference in New Issue
Block a user