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
46 lines
1.7 KiB
C++
46 lines
1.7 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/meta/movable.h
|
|
// Purpose: Test if a type is movable using memmove() etc.
|
|
// Author: Vaclav Slavik
|
|
// Created: 2008-01-21
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 2008 Vaclav Slavik
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_META_MOVABLE_H_
|
|
#define _WX_META_MOVABLE_H_
|
|
|
|
#include "wx/meta/pod.h"
|
|
#include "wx/string.h" // for wxIsMovable<wxString> specialization
|
|
|
|
// Helper to decide if an object of type T is "movable", i.e. if it can be
|
|
// copied to another memory location using memmove() or realloc() C functions.
|
|
// C++ only gurantees that POD types (including primitive types) are
|
|
// movable.
|
|
template<typename T>
|
|
struct wxIsMovable
|
|
{
|
|
wxDEFINE_TEMPLATE_BOOL_VALUE(wxIsPod<T>::value);
|
|
};
|
|
|
|
// Macro to add wxIsMovable<T> specialization for given type that marks it
|
|
// as movable:
|
|
#define WX_DECLARE_TYPE_MOVABLE(type) \
|
|
template<> struct wxIsMovable<type> \
|
|
{ \
|
|
wxDEFINE_TEMPLATE_BOOL_VALUE(true); \
|
|
};
|
|
|
|
// Our implementation of wxString is written in such way that it's safe to move
|
|
// it around (unless position cache is used which unfortunately breaks this).
|
|
// OTOH, we don't know anything about std::string.
|
|
// (NB: we don't put this into string.h and choose to include wx/string.h from
|
|
// here instead so that rarely-used wxIsMovable<T> code isn't included by
|
|
// everything)
|
|
#if !wxUSE_STD_STRING && !wxUSE_STRING_POS_CACHE
|
|
WX_DECLARE_TYPE_MOVABLE(wxString)
|
|
#endif
|
|
|
|
#endif // _WX_META_MOVABLE_H_
|