00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00024
00025 #ifndef ICL_CORE_STRING_HELPER_H_INCLUDED
00026 #define ICL_CORE_STRING_HELPER_H_INCLUDED
00027
00028 #include <algorithm>
00029 #include <iomanip>
00030 #include <limits>
00031 #include <string>
00032 #include <sstream>
00033 #include <ctype.h>
00034 #include <vector>
00035
00036 #include "icl_core/BaseTypes.h"
00037 #include "icl_core/ImportExport.h"
00038 #include "icl_core/TemplateHelper.h"
00039
00040 #ifdef _IC_BUILDER_DEPRECATED_STYLE_
00041 # include "icl_core/Deprecate.h"
00042 #endif
00043
00044 namespace icl_core {
00045
00046
00047 template <typename T> String stringify(typename ConvertToRef<T>::ToConstRef x)
00048 {
00049 std::ostringstream out;
00050 out << x;
00051 return out.str();
00052 }
00053
00054
00055 template <> inline String stringify<bool>(const bool& x)
00056 {
00057 std::ostringstream out;
00058 out << std::boolalpha << x;
00059 return out.str();
00060 }
00061
00062 template <> inline String stringify<double>(const double& x)
00063 {
00064 const int sigdigits = std::numeric_limits<double>::digits10;
00065 std::ostringstream out;
00066 out << std::setprecision(sigdigits) << x;
00067 return out.str();
00068 }
00069
00070 template <> inline String stringify<float>(const float& x)
00071 {
00072 const int sigdigits = std::numeric_limits<float>::digits10;
00073 std::ostringstream out;
00074 out << std::setprecision(sigdigits) << x;
00075 return out.str();
00076 }
00077
00078 template <> inline String stringify<long double>(const long double& x)
00079 {
00080 const int sigdigits = std::numeric_limits<long double>::digits10;
00081 std::ostringstream out;
00082 out << std::setprecision(sigdigits) << x;
00083 return out.str();
00084 }
00085
00086 inline String toLower(icl_core::String str)
00087 {
00088 std::transform(str.begin(), str.end(), str.begin(), ::tolower);
00089 return str;
00090 }
00091
00092 inline String toUpper(icl_core::String str)
00093 {
00094 std::transform(str.begin(), str.end(), str.begin(), ::toupper);
00095 return str;
00096 }
00097
00098
00099 template <typename T>
00100 String padLeft(typename ConvertToRef<T>::ToConstRef x, size_t width, char pad_chr = ' ')
00101 {
00102 return padLeft<String>(stringify<T>(x), width, pad_chr);
00103 }
00104
00105 template <>
00106 inline String padLeft<String>(const String& str, size_t width, char pad_chr)
00107 {
00108 size_t str_len = str.length();
00109 if (str_len < width)
00110 {
00111 return String(width - str_len, pad_chr) + str;
00112 }
00113 else
00114 {
00115 return str;
00116 }
00117 }
00118
00119 template <typename T>
00120 String padRight(typename ConvertToRef<T>::ToConstRef x, size_t width, char pad_chr = ' ')
00121 {
00122 return padRight<String>(stringify<T>(x), width, pad_chr);
00123 }
00124
00125 template <>
00126 inline String padRight<String>(const String& str, size_t width, char pad_chr)
00127 {
00128 size_t str_len = str.length();
00129 if (str_len < width)
00130 {
00131 return str + String(width - str_len, pad_chr);
00132 }
00133 else
00134 {
00135 return str;
00136 }
00137 }
00138
00147 ICL_CORE_IMPORT_EXPORT std::vector<String> split(const String& str, const String& delimiter);
00148
00154 ICL_CORE_IMPORT_EXPORT String join(const std::vector<String>& substrings, const String& delimiter);
00155
00156 ICL_CORE_IMPORT_EXPORT String trim(String const & str);
00157
00159 #ifdef _IC_BUILDER_DEPRECATED_STYLE_
00160
00161
00162 template <typename T> String Stringify(typename ConvertToRef<T>::ToConstRef x) ICL_CORE_GCC_DEPRECATE_STYLE;
00163 template <typename T> String Stringify(typename ConvertToRef<T>::ToConstRef x)
00164 {
00165 return stringify<T>(x);
00166 }
00167
00168
00169 template <> inline String Stringify<bool>(const bool& x) ICL_CORE_GCC_DEPRECATE_STYLE;
00170 template <> ICL_CORE_VC_DEPRECATE_STYLE inline String Stringify<bool>(const bool& x)
00171 {
00172 return stringify<bool>(x);
00173 }
00174
00175 template <> inline String Stringify<double>(const double& x) ICL_CORE_GCC_DEPRECATE_STYLE;
00176 template <> ICL_CORE_VC_DEPRECATE_STYLE inline String Stringify<double>(const double& x)
00177 {
00178 return stringify<double>(x);
00179 }
00180
00181 template <> inline String Stringify<float>(const float& x) ICL_CORE_GCC_DEPRECATE_STYLE;
00182 template <> ICL_CORE_VC_DEPRECATE_STYLE inline String Stringify<float>(const float& x)
00183 {
00184 return stringify<float>(x);
00185 }
00186
00187 template <> inline String Stringify<long double>(const long double& x) ICL_CORE_GCC_DEPRECATE_STYLE;
00188 template <> ICL_CORE_VC_DEPRECATE_STYLE inline String Stringify<long double>(const long double& x)
00189 {
00190 return stringify<long double>(x);
00191 }
00192
00193 inline String Tolower(icl_core::String str) ICL_CORE_GCC_DEPRECATE_STYLE;
00194 inline ICL_CORE_VC_DEPRECATE_STYLE String Tolower(icl_core::String str)
00195 {
00196 return toLower(str);
00197 }
00198
00199 inline String Toupper(icl_core::String str) ICL_CORE_GCC_DEPRECATE_STYLE;
00200 inline ICL_CORE_VC_DEPRECATE_STYLE String Toupper(icl_core::String str)
00201 {
00202 return toUpper(str);
00203 }
00204
00205
00206 template <typename T>
00207 String PadLeft(typename ConvertToRef<T>::ToConstRef x, size_t width, char pad_chr = ' ')
00208 ICL_CORE_GCC_DEPRECATE_STYLE;
00209 template <typename T>
00210 ICL_CORE_VC_DEPRECATE_STYLE
00211 String PadLeft(typename ConvertToRef<T>::ToConstRef x, size_t width, char pad_chr)
00212 {
00213 return padLeft<T>(x, width, pad_chr);
00214 }
00215
00216 template <>
00217 inline String PadLeft<String>(const String& str, size_t width, char pad_chr)
00218 ICL_CORE_GCC_DEPRECATE_STYLE;
00219 template <>
00220 inline ICL_CORE_VC_DEPRECATE_STYLE
00221 String PadLeft<String>(const String& str, size_t width, char pad_chr)
00222 {
00223 return padLeft<String>(str, width, pad_chr);
00224 }
00225
00226 template <typename T>
00227 String PadRight(typename ConvertToRef<T>::ToConstRef x, size_t width, char pad_chr = ' ')
00228 ICL_CORE_GCC_DEPRECATE_STYLE;
00229 template <typename T>
00230 ICL_CORE_VC_DEPRECATE_STYLE
00231 String PadRight(typename ConvertToRef<T>::ToConstRef x, size_t width, char pad_chr)
00232 {
00233 return padRight<T>(x, width, pad_chr);
00234 }
00235
00236 template <>
00237 inline String PadRight<String>(const String& str, size_t width, char pad_chr)
00238 ICL_CORE_GCC_DEPRECATE_STYLE;
00239 template <>
00240 inline ICL_CORE_VC_DEPRECATE_STYLE
00241 String PadRight<String>(const String& str, size_t width, char pad_chr)
00242 {
00243 return padRight<String>(str, width, pad_chr);
00244 }
00245
00246 ICL_CORE_VC_DEPRECATE_STYLE String Trim(String const & str) ICL_CORE_GCC_DEPRECATE_STYLE;
00247
00248 #endif
00249
00250
00251 }
00252
00253 #endif