From cbec0f401afa51ec852d599e0119f4a8966aec19 Mon Sep 17 00:00:00 2001 From: Francesco Montorsi <f18m_cpp217828@yahoo.it> Date: Sat, 31 Jan 2009 21:19:37 +0000 Subject: [PATCH] add wxStringCheck templated utility function git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58565 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/string.h | 21 ++++++++++++++++++--- interface/wx/string.h | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/include/wx/string.h b/include/wx/string.h index ee5a422954..22e0ec6f5e 100644 --- a/include/wx/string.h +++ b/include/wx/string.h @@ -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_ diff --git a/interface/wx/string.h b/interface/wx/string.h index 1cda9cfd76..6cb0dc695d 100644 --- a/interface/wx/string.h +++ b/interface/wx/string.h @@ -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; + } + +//@} -- 2.47.2