add wxStringCheck templated utility function

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58565 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi 2009-01-31 21:19:37 +00:00
parent 92715f1fea
commit cbec0f401a
2 changed files with 54 additions and 4 deletions

View File

@ -615,7 +615,7 @@ private:
return wxTLS_VALUE(s_cache);
}
// this helper struct is used to ensure that GetCache() is called during
// static initialization time, i.e. before any threads creation, as otherwise
// the static s_cache construction inside GetCache() wouldn't be MT-safe
@ -675,7 +675,7 @@ private:
// a lot of misses in this function...)
Cache::Element * const cacheBegin = GetCacheBegin();
#ifndef wxHAS_COMPILER_TLS
// during destruction tls calls may return NULL, in this case return NULL
// during destruction tls calls may return NULL, in this case return NULL
// immediately without accessing anything else
if ( cacheBegin == NULL )
return NULL;
@ -1810,7 +1810,7 @@ public:
const wchar_t* t_str() const { return wx_str(); }
#else
const char* t_str() const { return wx_str(); }
#endif
#endif
// overloaded assignment
@ -4114,4 +4114,19 @@ void wxStringIteratorNode::clear()
#include "wx/crt.h"
#endif
// ----------------------------------------------------------------------------
// Checks on wxString characters
// ----------------------------------------------------------------------------
template<bool (T)(const wxUniChar& c)>
inline bool wxStringCheck(const wxString& val)
{
for ( wxString::const_iterator i = val.begin();
i != val.end();
++i )
if (T(*i) == 0)
return false;
return true;
}
#endif // _WX_WXSTRING_H_

View File

@ -246,7 +246,8 @@
@stdobjects
::wxEmptyString
@see @ref overview_string, @ref overview_unicode, wxUString
@see @ref overview_string, @ref overview_unicode, wxUString,
wxCharBuffer, wxUniChar, wxStringTokenizer, @ref group_funcmacro_string
*/
class wxString
{
@ -1526,3 +1527,37 @@ public:
*/
wxStringCharType* operator wxStringCharType *();
};
/** @addtogroup group_funcmacro_string */
//@{
/**
Allows to extend a function with the signature:
@code bool SomeFunc(const wxUniChar& c) @endcode
which operates on a single character, to an entire wxString.
E.g. if you want to check if an entire string contains only digits,
you can do:
@code
if (wxStringCheck<wxIsdigit>(myString))
... // the entire string contains oly digits!
else
... // at least one character of myString is not a digit
@endcode
@return @true if the given function returns a non-zero value for all
characters of the @a val string.
*/
template<bool (T)(const wxUniChar& c)>
inline bool wxStringCheck(const wxString& val)
{
for ( wxString::const_iterator i = val.begin();
i != val.end();
++i )
if (T(*i) == 0)
return false;
return true;
}
//@}