added wxString ctor from std::string (inside #ifdef wxUSE_STD_STRING); removed pragma interface/implementation which force all inline functions to be defined in string.cpp
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32935 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
05c3f0fc73
commit
ce76f779c6
@ -18,10 +18,6 @@
|
||||
#ifndef _WX_WXSTRINGH__
|
||||
#define _WX_WXSTRINGH__
|
||||
|
||||
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
|
||||
#pragma interface "string.h"
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -163,7 +159,12 @@ inline int Stricmp(const char *psz1, const char *psz2)
|
||||
#endif // OS/compiler
|
||||
}
|
||||
|
||||
#if wxUSE_STL
|
||||
// ----------------------------------------------------------------------------
|
||||
// deal with STL/non-STL/non-STL-but-wxUSE_STD_STRING
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// in both cases we need to define wxStdString
|
||||
#if wxUSE_STL || defined(wxUSE_STD_STRING)
|
||||
|
||||
#include "wx/beforestd.h"
|
||||
#include <string>
|
||||
@ -171,19 +172,28 @@ inline int Stricmp(const char *psz1, const char *psz2)
|
||||
|
||||
#if wxUSE_UNICODE
|
||||
#ifdef HAVE_STD_WSTRING
|
||||
typedef std::wstring wxStringBase;
|
||||
typedef std::wstring wxStdString;
|
||||
#else
|
||||
typedef std::basic_string<wxChar> wxStringBase;
|
||||
typedef std::basic_string<wxChar> wxStdString;
|
||||
#endif
|
||||
#else
|
||||
typedef std::string wxStringBase;
|
||||
typedef std::string wxStdString;
|
||||
#endif
|
||||
|
||||
#if (defined(__GNUG__) && (__GNUG__ < 3)) || \
|
||||
(defined(_MSC_VER) && (_MSC_VER <= 1200))
|
||||
#define wxSTRING_BASE_HASNT_CLEAR
|
||||
#endif
|
||||
#endif // need <string>
|
||||
|
||||
#if wxUSE_STL
|
||||
|
||||
// we don't need an extra ctor from std::string when copy ctor already does
|
||||
// the work
|
||||
#undef wxUSE_STD_STRING
|
||||
|
||||
#if (defined(__GNUG__) && (__GNUG__ < 3)) || \
|
||||
(defined(_MSC_VER) && (_MSC_VER <= 1200))
|
||||
#define wxSTRING_BASE_HASNT_CLEAR
|
||||
#endif
|
||||
|
||||
typedef wxStdString wxStringBase;
|
||||
#else // if !wxUSE_STL
|
||||
|
||||
#ifndef HAVE_STD_STRING_COMPARE
|
||||
@ -645,6 +655,17 @@ public:
|
||||
wxString(const wxChar *psz, wxMBConv& WXUNUSED(conv), size_t nLength = npos)
|
||||
: wxStringBase(psz, nLength == npos ? wxStrlen(psz) : nLength) { }
|
||||
|
||||
// even we're not build with wxUSE_STL == 1 it is very convenient to allow
|
||||
// implicit conversions from std::string to wxString as this allows to use
|
||||
// the same strings in non-GUI and GUI code, however we don't want to
|
||||
// unconditionally add this ctor as it would make wx lib dependent on
|
||||
// libstdc++ on some Linux versions which is bad, so instead we ask the
|
||||
// client code to define this wxUSE_STD_STRING symbol if they need it
|
||||
#ifdef wxUSE_STD_STRING
|
||||
wxString(const wxStdString& s)
|
||||
: wxStringBase(s.c_str()) { }
|
||||
#endif // wxUSE_STD_STRING
|
||||
|
||||
#if wxUSE_UNICODE
|
||||
// from multibyte string
|
||||
wxString(const char *psz, wxMBConv& conv, size_t nLength = npos);
|
||||
|
@ -10,10 +10,6 @@
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
|
||||
#pragma implementation "string.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* About ref counting:
|
||||
* 1) all empty strings use g_strEmpty, nRefs = -1 (set in Init())
|
||||
|
Loading…
Reference in New Issue
Block a user