CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
string.h
1
2#ifndef _aspose_system_string_h_
3#define _aspose_system_string_h_
4
5#include <system/text/normalization_form.h>
6#include <system/string_comparison.h>
7#include <system/shared_ptr.h>
8#include <system/details/icu_namespace.h>
9#include <system/details/stack_array.h>
10#include <system/object.h>
11#include <system/boxable_traits.h>
12#include <system/icomparable.h>
13
14#include <istream>
15#include <ostream>
16#include <string>
17#include <sstream>
18#include <system/diagnostics/debug.h>
19#include <iterator>
20#include <cstdint>
21
22#include <fwd.h>
23
24#ifdef ASPOSECPPLIB_BEING_BUILT
25#include <unicode/unistr.h>
26#endif
28ASPOSECPP_3RD_PARTY_ICU_NAMESPACE_START {
30 ASPOSECPP_3RD_PARTY_CLASS(UnicodeString);
31}
32
34ASPOSECPP_3RD_PARTY_TYPEDEF(UChar, char16_t);
35
36namespace System { namespace Text { class StringBuilder; } }
37namespace System { namespace Text { namespace RegularExpressions { class Regex; } } }
38namespace System { namespace Text { namespace RegularExpressions { namespace Detail { class Formatter; } } } }
39namespace System { namespace Globalization { class CompareInfo; } }
40namespace System { namespace Globalization { class TextElementEnumerator; } }
41namespace System { namespace Globalization { class TextInfo; } }
42namespace System { namespace Collections { namespace Generic { template <typename T> class IEnumerable; } } }
43namespace System { template<typename T> class ReadOnlySpan; }
44
45namespace System { namespace Details { template<typename T> class ArrayView; } }
46
47namespace System
48{
49
50namespace Detail {
52 ASPOSECPP_3RD_PARTY_TYPE_HOLDER(codeporting_icu::UnicodeString, UnicodeString, 64, size_t, UnicodeStringHolder);
53}
54
57{
59 None = 0,
62};
63
64using codeporting_icu::UnicodeString;
65
69template <typename T, typename CharT>
71 : public std::integral_constant<bool, std::is_same<typename std::remove_const<typename std::remove_pointer<typename std::decay<T>::type>::type>::type, CharT>::value> {};
72
76template <typename T, typename CharT>
78 public std::integral_constant<bool, IsStringByteSequence<T, CharT>::value && std::is_pointer<T>::value> {};
79
83template <typename T, typename CharT>
85 public std::integral_constant<bool, IsStringByteSequence<T, CharT>::value && std::is_array<T>::value> {};
86
124class ASPOSECPP_SHARED_CLASS String
125{
126 static const uintptr_t state_literal = 0;
127 static const uintptr_t state_null = 1;
128
132 friend class System::Text::RegularExpressions::Regex; // Uses private method Append for efficient string construction.
133 friend class System::Text::RegularExpressions::Detail::Formatter; // Uses private method Append for efficient string construction.
135 friend class System::Object;
136
137 using ThisType = String;
138
140 RTTI_INFO_VALUE_TYPE(System::String);
141public:
143 using reverse_iterator = std::reverse_iterator<const char16_t*>;
144
147
149 ASPOSECPP_SHARED_API String();
150
153 template<typename T>
154 String(T& value, typename std::enable_if<IsStringLiteral<T, char16_t>::value>::type* = nullptr)
155 : String(value, std::extent<T>::value - 1, state_literal)
156 {}
157
160 template<typename T>
161 String(const T& value, typename std::enable_if<IsStringPointer<T, char16_t>::value>::type* = nullptr)
162 : String(value, -1)
163 {
164 m_state = state_literal;
165 }
166
169 template<typename T>
170 explicit String(T& value, typename std::enable_if<IsStringLiteral<T, char>::value>::type* = nullptr)
171 : String(value, std::extent<T>::value - 1)
172 {
173 m_state = state_literal;
174 }
175
178 template<typename T>
179 explicit String(const T& value, typename std::enable_if<IsStringPointer<T, char>::value>::type* = nullptr)
180 : String(value, -1)
181 {
182 m_state = state_literal;
183 }
184
188 ASPOSECPP_SHARED_API String(const char16_t* str, int length);
189
193 ASPOSECPP_SHARED_API String(const ReadOnlySpan<char16_t>& value);
194
198 ASPOSECPP_SHARED_API String(const char* str, int length);
199
204 ASPOSECPP_SHARED_API String(const char16_t* str, int start, int length);
205
209 ASPOSECPP_SHARED_API explicit String(const char16_t ch, int count);
210
214 template<typename T>
215 String(const T& value,
216 typename std::enable_if<std::is_same<T, std::nullptr_t>::value>::type* = nullptr)
217 : String()
218 {
219 ASPOSE_UNUSED(value);
220 }
221
225 template<typename T>
226 explicit String(T& value, typename std::enable_if<IsStringLiteral<T, wchar_t>::value>::type* = nullptr)
227 : String(value, std::extent<T>::value - 1)
228 {}
229
233 template<typename T>
234 explicit String(const T& value, typename std::enable_if<IsStringPointer<T, wchar_t>::value>::type* = nullptr)
235 : String(value, -1)
236 {}
237
242 ASPOSECPP_SHARED_API explicit String(const wchar_t* str, int length);
247 ASPOSECPP_SHARED_API explicit String(const wchar_t ch, int count = 1);
248
251 ASPOSECPP_SHARED_API String(const String& str);
254 ASPOSECPP_SHARED_API String(String&& str) noexcept;
255
258 ASPOSECPP_SHARED_API String(const ArrayPtr<char16_t>& arr);
263 ASPOSECPP_SHARED_API String(const ArrayPtr<char16_t>& arr, int offset, int len);
264
266 ASPOSECPP_SHARED_API ~String();
267
270 ASPOSECPP_SHARED_API const UChar* u_str() const;
271
274 ASPOSECPP_SHARED_API const UChar* begin() const;
277 ASPOSECPP_SHARED_API const UChar* end() const;
278
281 ASPOSECPP_SHARED_API reverse_iterator rbegin() const;
284 ASPOSECPP_SHARED_API reverse_iterator rend() const;
285
288 ASPOSECPP_SHARED_API bool IsNullOrEmpty() const;
289
293 inline bool IsNull() const { return m_state == state_null; }
294
297 ASPOSECPP_SHARED_API bool IsEmpty() const;
298
301 ASPOSECPP_SHARED_API std::string ToUtf8String() const;
304 ASPOSECPP_SHARED_API std::wstring ToWCS() const;
307 ASPOSECPP_SHARED_API std::u16string ToU16Str() const;
310 ASPOSECPP_SHARED_API std::u32string ToU32Str() const;
314 ASPOSECPP_SHARED_API std::string ToAsciiString() const;
315
318 ASPOSECPP_SHARED_API String& reset();
319
322 ASPOSECPP_SHARED_API int get_Length() const;
326 ASPOSECPP_SHARED_API char_t operator[](int index) const;
331 ASPOSECPP_SHARED_API String& SetCharAt(int index, char_t ch);
332
336 ASPOSECPP_SHARED_API String& operator=(const String& str);
340 ASPOSECPP_SHARED_API String& operator=(String&& str) noexcept;
341
345 ASPOSECPP_SHARED_API String operator+(const String& str) const;
350 template <typename T, std::enable_if_t<IsStringLiteral<T, char_t>::value>* = nullptr>
351 String operator+(const T& arg) const
352 {
353 return *this + String(arg, std::extent<T>::value - 1);
354 }
355
359 ASPOSECPP_SHARED_API String operator+(char_t x) const;
363 ASPOSECPP_SHARED_API String operator+(int i) const;
367 ASPOSECPP_SHARED_API String operator+(uint32_t i) const;
371 ASPOSECPP_SHARED_API String operator+(double d) const;
375 ASPOSECPP_SHARED_API String operator+(int64_t v) const;
380 template <typename T, std::enable_if_t<IsSmartPtr<T>::value>* = nullptr>
381 String operator+(const T& value) const
382 {
383 return value == nullptr ? *this : *this + value->ToString();
384 }
389 template <typename T, std::enable_if_t<!IsSmartPtr<T>::value && !std::is_scalar<T>::value && !std::is_array<T>::value>* = nullptr>
390 String operator+(const T& value) const
391 {
392 return *this + value.ToString();
393 }
398 template <typename T, std::enable_if_t<std::is_same<T, bool>::value>* = nullptr>
399 String operator+(T arg) const
400 {
401 return String(*this).AddBoolImpl(arg);
402 }
403
407 ASPOSECPP_SHARED_API String& operator+=(char_t c);
411 ASPOSECPP_SHARED_API String& operator+=(const String& str);
415 ASPOSECPP_SHARED_API String& operator+=(double value);
419 ASPOSECPP_SHARED_API String& operator+=(uint8_t value);
423 ASPOSECPP_SHARED_API String& operator+=(int16_t value);
427 ASPOSECPP_SHARED_API String& operator+=(uint16_t value);
431 ASPOSECPP_SHARED_API String& operator+=(int32_t value);
435 ASPOSECPP_SHARED_API String& operator+=(uint32_t value);
439 ASPOSECPP_SHARED_API String& operator+=(int64_t value);
443 ASPOSECPP_SHARED_API String& operator+=(uint64_t value);
448 template <typename T, std::enable_if_t<std::is_same<T, bool>::value>* = nullptr>
450 {
451 return AddBoolImpl(value);
452 }
453
457 ASPOSECPP_SHARED_API bool operator==(const String& str) const;
460 ASPOSECPP_SHARED_API bool operator==(std::nullptr_t) const;
461
462
466 ASPOSECPP_SHARED_API bool operator!=(const String& str) const;
469 ASPOSECPP_SHARED_API bool operator!=(std::nullptr_t) const;
470
474 ASPOSECPP_SHARED_API bool operator<(const String& str) const;
475
479 ASPOSECPP_SHARED_API bool operator>(const String& str) const;
480
483 explicit operator std::string() const
484 {
485 return ToUtf8String();
486 }
489 explicit operator std::wstring() const
490 {
491 return ToWCS();
492 }
495 explicit operator std::u16string() const
496 {
497 return ToU16Str();
498 }
501 explicit operator std::u32string() const
502 {
503 return ToU32Str();
504 }
505
508 ASPOSECPP_SHARED_API String Clone() const;
509
512 String ToString() const { return *this; }
515 String ToString(const SharedPtr<IFormatProvider>&) const { return *this; }
516
519 ASPOSECPP_SHARED_API int GetHashCode() const;
524 ASPOSECPP_SHARED_API bool Equals(const String& str, System::StringComparison comparison_type) const;
528 ASPOSECPP_SHARED_API bool Equals(const String& str) const;
529
533 ASPOSECPP_SHARED_API bool Contains(const String& str) const;
537 ASPOSECPP_SHARED_API bool Contains(char16_t value) const;
541 ASPOSECPP_SHARED_API int CompareTo(const String& str) const;
547 ASPOSECPP_SHARED_API void CopyTo(int sourceIndex, const ArrayPtr<char_t>& destination, int destinationIndex, int count) const;
551 ASPOSECPP_SHARED_API String Normalize(System::Text::NormalizationForm form) const;
555 ASPOSECPP_SHARED_API bool IsNormalized(System::Text::NormalizationForm form) const;
556
560 ASPOSECPP_SHARED_API bool StartsWith(const String& value) const;
565 ASPOSECPP_SHARED_API bool StartsWith(const String& value, System::StringComparison comparisonType) const;
571 ASPOSECPP_SHARED_API bool StartsWith(const String& value, bool ignoreCase, const SharedPtr<System::Globalization::CultureInfo>& culture = nullptr) const;
572
576 ASPOSECPP_SHARED_API bool EndsWith(const String& value) const;
581 ASPOSECPP_SHARED_API bool EndsWith(const String& value, System::StringComparison comparisonType) const;
587 ASPOSECPP_SHARED_API bool EndsWith(const String& value, bool ignoreCase, const SharedPtr<System::Globalization::CultureInfo>& culture = nullptr) const;
588
593 ASPOSECPP_SHARED_API ArrayPtr<char_t> ToCharArray(int32_t startIndex = 0, int32_t length = INT32_MAX) const;
599 ASPOSECPP_SHARED_API ArrayPtr<uint8_t> ToByteArray(int32_t startIndex = 0, int32_t length = INT32_MAX, bool LE = true) const;
600
603 ASPOSECPP_SHARED_API operator ReadOnlySpan<char16_t>() const;
604
607 ASPOSECPP_SHARED_API String ToUpper() const;
610 ASPOSECPP_SHARED_API String ToLower() const;
611
615 ASPOSECPP_SHARED_API String ToLower(const SharedPtr<System::Globalization::CultureInfo>& cultureInfo) const;
619 ASPOSECPP_SHARED_API String ToUpper(const SharedPtr<System::Globalization::CultureInfo>& cultureInfo) const;
620
623 ASPOSECPP_SHARED_API String ToUpperInvariant() const;
626 ASPOSECPP_SHARED_API String ToLowerInvariant() const;
627
631 ASPOSECPP_SHARED_API String Substring(int32_t startIndex) const;
636 ASPOSECPP_SHARED_API String Substring(int32_t startIndex, int32_t length) const;
641 ASPOSECPP_SHARED_API String Remove(int32_t startIndex, int32_t count = INT32_MAX) const;
642
646 bool Is(const System::TypeInfo &target) const
647 {
648 return GetType() == target;
649 }
650
651 // Finds
652
657 ASPOSECPP_SHARED_API int IndexOf(const String& str, System::StringComparison comparison_type) const;
662 ASPOSECPP_SHARED_API int IndexOf(char_t c, int startIndex = 0) const;
668 ASPOSECPP_SHARED_API int IndexOf(char_t c, int startIndex, int count) const;
673 ASPOSECPP_SHARED_API int IndexOf(const String& str, int startIndex = 0) const;
679 ASPOSECPP_SHARED_API int IndexOf(const String& str, int startIndex, System::StringComparison comparison_type) const;
686 ASPOSECPP_SHARED_API int IndexOf(const String& value, int startIndex, int count, System::StringComparison comparisonType) const;
692 ASPOSECPP_SHARED_API int IndexOf(const String& str, int startIndex, int count) const;
693
698 ASPOSECPP_SHARED_API int IndexOfAny(char_t c, int startIndex = 0) const;
703 ASPOSECPP_SHARED_API int IndexOfAny(const String& str, int startIndex = 0) const;
708 ASPOSECPP_SHARED_API int IndexOfAny(const ArrayPtr<char_t>& anyOf) const;
714 ASPOSECPP_SHARED_API int IndexOfAny(const ArrayPtr<char_t>& anyOf, int32_t startindex) const;
721 ASPOSECPP_SHARED_API int IndexOfAny(const ArrayPtr<char_t>& anyOf, int32_t startindex, int32_t count) const;
722
727 ASPOSECPP_SHARED_API int LastIndexOf(const String& str, int startIndex = INT32_MAX) const;
732 ASPOSECPP_SHARED_API int LastIndexOf(const String& str, System::StringComparison comparison_type) const;
738 ASPOSECPP_SHARED_API int LastIndexOf(const String& str, int startIndex, System::StringComparison comparison_type) const;
745 ASPOSECPP_SHARED_API int LastIndexOf(const String& value, int startIndex, int count, StringComparison comparisonType) const;
746
750 ASPOSECPP_SHARED_API int LastIndexOf(char_t value) const;
755 ASPOSECPP_SHARED_API int LastIndexOf(char_t value, int32_t startIndex) const;
761 ASPOSECPP_SHARED_API int LastIndexOf(char_t value, int32_t startIndex, int32_t count) const;
762
767 ASPOSECPP_SHARED_API int LastIndexOfAny(const ArrayPtr<char_t>& anyOf) const;
773 ASPOSECPP_SHARED_API int LastIndexOfAny(const ArrayPtr<char_t>& anyOf, int32_t startindex) const;
780 ASPOSECPP_SHARED_API int LastIndexOfAny(const ArrayPtr<char_t>& anyOf, int32_t startindex, int32_t count) const;
781
782 // Trim
783
786 ASPOSECPP_SHARED_API String Trim() const;
790 ASPOSECPP_SHARED_API String Trim(char_t ch) const;
794 ASPOSECPP_SHARED_API String Trim(const String& anyOf) const;
798 ASPOSECPP_SHARED_API String Trim(const ArrayPtr<char_t>& anyOf) const;
799
802 ASPOSECPP_SHARED_API String TrimStart() const;
806 ASPOSECPP_SHARED_API String TrimStart(char_t ch) const;
810 ASPOSECPP_SHARED_API String TrimStart(const String& anyOf) const;
814 ASPOSECPP_SHARED_API String TrimStart(const ArrayPtr<char_t>& anyOf) const;
815
818 ASPOSECPP_SHARED_API String TrimEnd() const;
822 ASPOSECPP_SHARED_API String TrimEnd(char_t ch) const;
826 ASPOSECPP_SHARED_API String TrimEnd(const String& anyOf) const;
830 ASPOSECPP_SHARED_API String TrimEnd(const ArrayPtr<char_t>& anyOf) const;
831
836 ASPOSECPP_SHARED_API String PadLeft(int totalWidth, char_t c = u' ') const;
841 ASPOSECPP_SHARED_API String PadRight(int totalWidth, char_t c = u' ') const;
842
843 // Replace
844
849 ASPOSECPP_SHARED_API String Replace(char_t oldValue, char_t newValue) const;
854 ASPOSECPP_SHARED_API String Replace(const String& oldValue, const String& newValue) const;
855
856 // Insert
857
862 ASPOSECPP_SHARED_API String Insert(int startIndex, const String& value) const;
863
864 // Split
869 ASPOSECPP_SHARED_API ArrayPtr<String> Split(char_t separator = u' ', StringSplitOptions opt = StringSplitOptions::None) const;
875 ASPOSECPP_SHARED_API ArrayPtr<String> Split(char_t separator, int32_t count, StringSplitOptions opt = StringSplitOptions::None) const;
881 ASPOSECPP_SHARED_API ArrayPtr<String> Split(char_t separatorA, char_t separatorB, StringSplitOptions opt = StringSplitOptions::None) const;
886 ASPOSECPP_SHARED_API ArrayPtr<String> Split(const ArrayPtr<char_t>& separators, StringSplitOptions opt = StringSplitOptions::None) const;
892 ASPOSECPP_SHARED_API ArrayPtr<String> Split(const ArrayPtr<char_t>& separators, int32_t count, StringSplitOptions opt = StringSplitOptions::None) const;
893
898 ASPOSECPP_SHARED_API ArrayPtr<String> Split(const String& separator, StringSplitOptions opt = StringSplitOptions::None) const;
904 ASPOSECPP_SHARED_API ArrayPtr<String> Split(const String& separator, int count, StringSplitOptions opt = StringSplitOptions::None) const;
909 ASPOSECPP_SHARED_API ArrayPtr<String> Split(const ArrayPtr<String>& separators, StringSplitOptions opt = StringSplitOptions::None) const;
915 ASPOSECPP_SHARED_API ArrayPtr<String> Split(const ArrayPtr<String>& separators, int count, StringSplitOptions opt = StringSplitOptions::None) const;
916
917 // static members
918
920 static const ASPOSECPP_SHARED_API String Empty;
922 static const ASPOSECPP_SHARED_API String Null;
923
927 static ASPOSECPP_SHARED_API bool IsNullOrEmpty(const String& str);
931 static ASPOSECPP_SHARED_API bool IsNullOrWhiteSpace(const String& str);
936 static ASPOSECPP_SHARED_API bool Equals(const String& strA, const String& strB);
942 static ASPOSECPP_SHARED_API bool Equals(const String& strA, const String& strB, System::StringComparison comparison_type);
943
952 static ASPOSECPP_SHARED_API int Compare(const String& strA, int indexA, const String& strB, int indexB,
953 int length, bool ignoreCase = false);
954
964 static ASPOSECPP_SHARED_API int Compare(const String& strA, int indexA, const String& strB, int indexB,
965 int length, bool ignoreCase,
967
973 static ASPOSECPP_SHARED_API int Compare(const String& strA, const String& strB, System::StringComparison comparison_type);
982 static ASPOSECPP_SHARED_API int Compare(const String& strA, int indexA, const String& strB, int indexB,
983 int length, System::StringComparison comparison_type);
984
990 static ASPOSECPP_SHARED_API int Compare(const String& strA, const String& strB, bool ignoreCase = false);
997 static ASPOSECPP_SHARED_API int Compare(const String& strA, const String& strB, bool ignoreCase,
999
1004 static ASPOSECPP_SHARED_API int CompareOrdinal(const String& strA, const String& strB);
1012 static ASPOSECPP_SHARED_API int CompareOrdinal(const String& strA, int indexA, const String& strB, int indexB, int length);
1013
1020 static ASPOSECPP_SHARED_API String Join(const String& separator, const ArrayPtr<String>& parts, int startIndex = 0, int count = -1);
1021
1028 static ASPOSECPP_SHARED_API String Join(const String& separator, const System::Details::ArrayView<String>& parts, int startIndex = 0, int count = -1);
1029
1034 static ASPOSECPP_SHARED_API String Join(const String& separator, const SharedPtr<System::Collections::Generic::IEnumerable<String> >& parts);
1035
1040 static ASPOSECPP_SHARED_API String Join(const String& separator, const ArrayPtr<SharedPtr<Object>>& parts);
1041
1045 static ASPOSECPP_SHARED_API String Concat(const ArrayPtr<String>& parts);
1050 static ASPOSECPP_SHARED_API String Concat(const String & str0, const String & str1);
1056 static ASPOSECPP_SHARED_API String Concat(const String & str0, const String & str1, const String & str2);
1057
1064 static ASPOSECPP_SHARED_API String Concat(const String& str0, const String& str1, const String& str2, const String& str3);
1065
1069 static String Copy(const String& str) { return str; }
1070
1076 template<class... Args>
1077 static String Format(const SharedPtr<IFormatProvider>& fp, const String& format, const Args&... args);
1078
1083 template<class... Args>
1084 static String Format(std::nullptr_t, const String& format, const Args&... args);
1085
1090 template<std::size_t N, class... Args>
1091 static String Format(std::nullptr_t, const char16_t(&format)[N], const Args&... args);
1092
1097 template<class... Args>
1098 static String Format(const String& format, const Args&... args);
1099
1104 template<class T>
1105 static String Format(const String& format, const System::ArrayPtr<T>& args);
1106
1110 static ASPOSECPP_SHARED_API String FromUtf8(const char* utf8);
1115 static ASPOSECPP_SHARED_API String FromUtf8(const char* utf8, int len);
1119 static ASPOSECPP_SHARED_API String FromUtf8(const uint8_t* utf8);
1123 static ASPOSECPP_SHARED_API String FromUtf8(const std::string& utf8);
1127 static ASPOSECPP_SHARED_API String FromWCS(const std::wstring& wcs);
1132 static ASPOSECPP_SHARED_API String FromUtf32(const uint32_t *utf32, int32_t length);
1136 static ASPOSECPP_SHARED_API String FromUtf16(const std::u16string& u16str);
1140 static ASPOSECPP_SHARED_API String FromAscii(const char* asciiStr);
1145 static ASPOSECPP_SHARED_API String FromAscii(const char* asciiStr, int len);
1149 static ASPOSECPP_SHARED_API String FromAscii(const std::string& asciiStr);
1150
1153 explicit ASPOSECPP_SHARED_API String(const codeporting_icu::UnicodeString& str);
1156 explicit ASPOSECPP_SHARED_API String(codeporting_icu::UnicodeString&& str) noexcept;
1159 explicit String(const std::wstring& str) : String(str.data(), ASPOSECPP_CHECKED_CAST(int, str.length())) {};
1162 explicit String(const std::u16string& str) : String(str.data(), ASPOSECPP_CHECKED_CAST(int, str.length())) {};
1165 explicit ASPOSECPP_SHARED_API String(const std::string& utf8str);
1168 explicit ASPOSECPP_SHARED_API String(const std::u32string& u32str);
1169
1172 bool ASPOSECPP_SHARED_API IsAsciiString() const;
1173
1178 int ASPOSECPP_SHARED_API FastToAscii(char buffer[], int buffer_size) const;
1179
1180protected:
1185 ASPOSECPP_SHARED_API String& Append(const char16_t *src,
1186 int32_t startIndex,
1187 int32_t count);
1188
1190 mutable Detail::UnicodeStringHolder m_str; // mutable because of u_str
1191
1195 uintptr_t m_state;
1196
1197#if defined(_DEBUG) && (defined(_MSC_VER) || defined(__GNUC__))
1198 union IcuDebugHelper
1199 {
1200 struct
1201 {
1202 int16_t fLengthAndFlags;
1203 char16_t fBuffer[(int32_t)(64 - sizeof(void *) - 2) / 2];
1204 } fStackFields;
1205 struct
1206 {
1207 int16_t fLengthAndFlags;
1208 int32_t fLength;
1209 int32_t fCapacity;
1210 char16_t *fArray;
1211 } fFields;
1212 } static icuDebugHelper;
1213#endif
1214
1215private:
1216 static bool StartsWithImpl(const String& that, const String& other, System::StringComparison comparisonType,
1218
1219 static bool EndsWithImpl(const String& that, const String& other, System::StringComparison comparisonType,
1221
1222 static int32_t CompareImpl(const String& strA, int32_t indexA, const String& strB, int32_t indexB,
1223 int32_t length, StringComparison comparisonType,
1225
1226 static int LastIndexOfOrdinalIgnoreCaseImpl(const String& source, const String& value, int startIndex, int count);
1227 static int IndexOfOrdinalIgnoreCaseImpl(const String& source, const String& value, int startIndex, int count);
1228
1229 ASPOSECPP_SHARED_API String& AddBoolImpl(bool value);
1230
1231 static SharedPtr<Text::StringBuilder> GetBuilder();
1232
1233 // Special ctor for literals
1234 ASPOSECPP_SHARED_API String(const char16_t* str, int length, uintptr_t state);
1235
1236 inline void SetState()
1237 {
1238 m_state = reinterpret_cast<uintptr_t>(this);
1239 }
1240
1241}; // class String
1242
1248template<typename T>
1249typename std::enable_if<IsStringLiteral<T, char_t>::value, String>::type inline operator+(T& left, const String& right)
1250{
1251 return String(left, std::extent<T>::value - 1) + right;
1252}
1253
1259template<typename T>
1260typename std::enable_if<IsStringPointer<T, char_t>::value, String>::type inline operator+(T& left, const String& right)
1261{
1262 return String(left) + right;
1263}
1264
1265
1270String inline operator+(const char_t left, const String& right)
1271{
1272 return String(left, 1) + right;
1273}
1274
1280template<class Chars, typename std::enable_if<IsStringLiteral<Chars, char_t>::value>::type* = nullptr>
1281bool inline operator==(Chars& left, const String& right)
1282{
1283 return String(left, std::extent<Chars>::value - 1) == right;
1284}
1285
1291template<class T, typename std::enable_if<IsStringPointer<T, char_t>::value>::type* = nullptr>
1292bool inline operator==(T& left, const String& right)
1293{
1294 return String(left) == right;
1295}
1296
1302template<class Chars, typename std::enable_if<IsStringLiteral<Chars, char_t>::value>::type* = nullptr>
1303bool inline operator!=(Chars& left, const String& right)
1304{
1305 return !(String(left, std::extent<Chars>::value - 1) == right);
1306}
1307
1313template<class T, typename std::enable_if<IsStringPointer<T, char_t>::value>::type* = nullptr>
1314bool inline operator!=(T& left, const String& right)
1315{
1316 return !(String(left) == right);
1317}
1318
1323ASPOSECPP_SHARED_API bool operator==(const SharedPtr<Object>& left, const String& right);
1328ASPOSECPP_SHARED_API bool operator!=(const SharedPtr<Object>& left, const String& right);
1329
1333ASPOSECPP_SHARED_API bool operator==(std::nullptr_t, const String& str);
1337ASPOSECPP_SHARED_API bool operator!=(std::nullptr_t, const String& str);
1338
1343ASPOSECPP_SHARED_API std::ostream& operator<<(std::ostream& os, const String& str);
1348ASPOSECPP_SHARED_API std::wostream& operator<<(std::wostream& os, const String& str);
1349
1354ASPOSECPP_SHARED_API std::istream& operator>>(std::istream &in, String &str);
1359ASPOSECPP_SHARED_API std::wistream& operator>>(std::wistream &in, String &str);
1360
1363template <>
1364struct CastResult<String>
1365{
1367 typedef String type;
1368};
1370
1374template <>
1375inline bool Object::ReferenceEquals(String const& str, std::nullptr_t)
1376{
1377 return str.IsNull();
1378}
1379
1384template <>
1385inline bool Object::ReferenceEquals(String const& str1, String const& str2)
1386{
1387 return str1.m_state == str2.m_state && (str1.m_state == String::state_null || str1 == str2);
1388}
1389
1390namespace BoxedValueDetail {
1392template<>
1393struct ImplementsInterface<String, IComparable<String>> : std::true_type {};
1394}
1395
1399ASPOSECPP_SHARED_API void PrintTo(const System::String& value, std::ostream* os);
1400
1401
1402} // namespace System
1403
1404// boost::hash specialization for System::String
1405
1406namespace std
1407{
1409 template <>
1410 struct hash<System::String>
1411 {
1415 std::size_t operator()(const System::String& str) const
1416 {
1417 return static_cast<std::size_t>(str.GetHashCode());
1418 }
1419 };
1420}
1421
1423typedef char16_t* system_char_array;
1425typedef char16_t const* const_system_char_array;
1426
1427#include <system/details/format_builder.h>
1428
1429namespace System {
1430
1436template<class... Args>
1437String String::Format(const SharedPtr<IFormatProvider>& fp, const String& format, const Args&... args)
1438{
1439 System::Details::FormatBuilder builder(format, fp);
1440 System::Details::FormatBuilder::AddArguments(builder, args...);
1441
1442 return builder.BuildResult();
1443}
1444
1449template<class... Args>
1450String String::Format(std::nullptr_t, const String& format, const Args&... args)
1451{
1452 System::Details::FormatBuilder builder(format);
1453 System::Details::FormatBuilder::AddArguments(builder, args...);
1454
1455 return builder.BuildResult();
1456}
1457
1462template<std::size_t N, class... Args>
1463String String::Format(std::nullptr_t, const char16_t (&format)[N], const Args&... args)
1464{
1465 System::Details::FormatBuilder builder(format);
1466 System::Details::FormatBuilder::AddArguments(builder, args...);
1467
1468 return builder.BuildResult();
1469}
1470
1471
1476template<class... Args>
1477String String::Format(const String& format, const Args&... args)
1478{
1479 System::Details::FormatBuilder builder(format);
1480 System::Details::FormatBuilder::AddArguments(builder, args...);
1481
1482 return builder.BuildResult();
1483}
1484
1489template<class T>
1491{
1492 System::Details::FormatBuilder builder(format);
1493 System::Details::FormatBuilder::AddArguments(builder, args);
1494
1495 return builder.BuildResult();
1496}
1497} // namespace System
1498
1499#endif // _aspose_system_string_h_
Makes culture-sensitive string comparison. Objects of this class should only be allocated using Syste...
Definition: compare_info.h:24
Enumerator to iterate through string elements (characters). Objects of this class should only be allo...
Definition: text_element_enumerator.h:28
Defines locale-specific text properties. Setter operations are only enabled on non-read-only objects....
Definition: text_info.h:23
Defines a method that compares two objects. Objects of this class should only be allocated using Syst...
Definition: icomparable.h:17
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:51
virtual const TypeInfo & GetType() const
Gets actual type of object. Analog of C# System.Object.GetType() call.
static bool ReferenceEquals(ptr const &objA, ptr const &objB)
Compares objects by reference.
Definition: object.h:104
Forward to use within Span class.
Definition: span.h:404
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
String class used across the library. Is a substitute for C# System.String when translating code....
Definition: string.h:125
String & operator+=(uint8_t value)
Concatenation assignment operator.
String(const char *str, int length)
Constructs string from character string pointer and explicit length.
char_t operator[](int index) const
Gets character at specified position.
String(const std::wstring &str)
Creates String from widestring.
Definition: string.h:1159
ArrayPtr< char_t > ToCharArray(int32_t startIndex=0, int32_t length=INT32_MAX) const
Converts string or substring to array of characters.
int IndexOfAny(const ArrayPtr< char_t > &anyOf) const
Looks for any of passed characters through the whole string. Compares first string character to all c...
String(const String &str)
Copy constructor.
static String FromAscii(const char *asciiStr, int len)
Creates String from ASCII string.
int IndexOfAny(char_t c, int startIndex=0) const
Character forward lookup.
String PadRight(int totalWidth, char_t c=u' ') const
Adds padding on the right of original string.
String(const T &value, typename std::enable_if< IsStringPointer< T, wchar_t >::value >::type *=nullptr)
Constructs string based on widecharacter string pointer. Treats pointed string as null-terminated,...
Definition: string.h:234
bool EndsWith(const String &value, bool ignoreCase, const SharedPtr< System::Globalization::CultureInfo > &culture=nullptr) const
Checks if string ends with specified substring.
String(const T &value, typename std::enable_if< IsStringPointer< T, char >::value >::type *=nullptr)
Constructs string based on character string pointer. Treats pointed string as null-terminated in UTF8...
Definition: string.h:179
std::u16string ToU16Str() const
Converts string to std::u16string.
bool operator<(const String &str) const
Order-compares strings.
ArrayPtr< String > Split(char_t separatorA, char_t separatorB, StringSplitOptions opt=StringSplitOptions::None) const
Splits string by one of two characters.
String Substring(int32_t startIndex, int32_t length) const
Extracts substring.
int IndexOf(const String &str, int startIndex=0) const
Substring forward lookup.
String TrimEnd(const String &anyOf) const
Removes all occurrences of passed characters from end of the string.
String & operator+=(int32_t value)
Concatenation assignment operator.
String & operator=(const String &str)
Assignment operator.
static String FromUtf8(const std::string &utf8)
Creates String from utf8 string.
int IndexOfAny(const String &str, int startIndex=0) const
Consequently looks for all characters of str in this. If first character is found,...
String ToLower() const
Converts all string's characters to lower case.
bool IsNormalized(System::Text::NormalizationForm form) const
Checks if unicode string is normalized using normalization form specified.
String Remove(int32_t startIndex, int32_t count=INT32_MAX) const
Extracts everything but substring from current string.
String(const std::u32string &u32str)
Creates String from std::u32string string.
String TrimStart(const String &anyOf) const
Removes all occurrences of passed characters from beginning of the string.
String & reset()
Sets string to null. Is analogous to 'string_variable_name = null' in C#.
String & Append(const char16_t *src, int32_t startIndex, int32_t count)
Puts some characters into string. Changes string size.
String & operator+=(T value)
Concatenation assignment operator.
Definition: string.h:449
uintptr_t m_state
String state. Contains value 0 if string is null, 1 if string is constructed from string literal.
Definition: string.h:1195
String & operator+=(const String &str)
Concatenation assignment operator.
String Trim(const String &anyOf) const
Removes all occurrences of passed characters from both beginning and end of the string.
~String()
Destructor.
bool Equals(const String &str) const
String equality comparison. Uses System::StringComparison::Ordinal comparison mode.
bool operator>(const String &str) const
Order-compares strings.
String TrimStart() const
Removes all whitespace characters from beginning of the string.
String & operator+=(char_t c)
Concatenation assignment operator.
bool EndsWith(const String &value) const
Checks if string ends with specified substring.
int LastIndexOf(const String &str, System::StringComparison comparison_type) const
Substring backward lookup.
String Clone() const
Creates a copy of current string.
int get_Length() const
Gets string length.
static int Compare(const String &strA, int indexA, const String &strB, int indexB, int length, bool ignoreCase, const SharedPtr< System::Globalization::CultureInfo > &ci)
Less-equal-greater-compares two substrings.
bool operator==(const String &str) const
Equality comparison operator.
String & operator+=(int64_t value)
Concatenation assignment operator.
int IndexOf(const String &str, System::StringComparison comparison_type) const
Substring forward lookup.
int GetHashCode() const
Hashes contained string. Implemented in ICU, doesn't match hashes in C#.
reverse_iterator rbegin() const
Returns reverse iterator to the last character (if any) of actual string buffer.
String ToLower(const SharedPtr< System::Globalization::CultureInfo > &cultureInfo) const
Converts all string's characters to lower case using specific culture.
String Trim(char_t ch) const
Removes all occurrences of passed character from both beginning and end of the string.
String(codeporting_icu::UnicodeString &&str) noexcept
Move constructor.
String(const std::u16string &str)
Creates String from utf16 string.
Definition: string.h:1162
static String Join(const String &separator, const SharedPtr< System::Collections::Generic::IEnumerable< String > > &parts)
Joins array using string as separator.
int LastIndexOf(char_t value, int32_t startIndex, int32_t count) const
Character backward lookup.
static String FromAscii(const std::string &asciiStr)
Creates String from ASCII string.
bool Contains(char16_t value) const
Checks if string contains given character.
String & operator=(String &&str) noexcept
Move assignment operator.
static String Format(const SharedPtr< IFormatProvider > &fp, const String &format, const Args &... args)
Formats string in C# style.
Definition: string.h:1437
int LastIndexOfAny(const ArrayPtr< char_t > &anyOf) const
Looks for any of passed characters through whole string backwardly. Compares last string character to...
Detail::UnicodeStringHolder m_str
Actual string value.
Definition: string.h:1190
static String FromUtf16(const std::u16string &u16str)
Creates String from utf16 string.
int LastIndexOf(const String &str, int startIndex, System::StringComparison comparison_type) const
Substring backward lookup.
String operator+(const T &value) const
Adds reference type object string representation to the end of the string.
Definition: string.h:381
bool Is(const System::TypeInfo &target) const
Checks if string object is of type specified by TypeInfo passed.
Definition: string.h:646
String(String &&str) noexcept
Move constructor.
String ToLowerInvariant() const
Converts all string's characters to lower case using invariant culture.
bool StartsWith(const String &value) const
Checks if string begins with specified substring.
reverse_iterator rend() const
Returns reverse iterator to the before first character (if any) of actual string buffer.
String(const wchar_t *str, int length)
Constructs string from widecharacter string pointer and explicit length. Conversion from wchar_t is t...
int IndexOf(const String &str, int startIndex, int count) const
Substring forward lookup.
static String Join(const String &separator, const ArrayPtr< String > &parts, int startIndex=0, int count=-1)
Joins array using string as separator.
static bool Equals(const String &strA, const String &strB)
Equal-compares two strings using Ordial comparison mode.
int LastIndexOfAny(const ArrayPtr< char_t > &anyOf, int32_t startindex, int32_t count) const
Looks for any of passed characters through substring backwardly. Compares last string character to al...
String & operator+=(uint32_t value)
Concatenation assignment operator.
ArrayPtr< String > Split(const String &separator, StringSplitOptions opt=StringSplitOptions::None) const
Splits string by substring.
String(const ArrayPtr< char16_t > &arr)
Converts whole character array to string.
static const String Empty
Empty string.
Definition: string.h:920
String & operator+=(int16_t value)
Concatenation assignment operator.
String(const ReadOnlySpan< char16_t > &value)
Initializes a new instance of the System.String class to the Unicode characters indicated in the spec...
ArrayPtr< String > Split(const String &separator, int count, StringSplitOptions opt=StringSplitOptions::None) const
Splits string by substring.
String(const T &value, typename std::enable_if< std::is_same< T, std::nullptr_t >::value >::type *=nullptr)
Nullptr constructor. Declared as template to resolve priorities with other template constructors.
Definition: string.h:215
static String FromUtf8(const uint8_t *utf8)
Creates String from utf8 string.
String ToUpperInvariant() const
Converts all string's characters to upper case using invariant culture.
static String Copy(const String &str)
Creates string copy.
Definition: string.h:1069
ASPOSECPP_VALUE_TYPE_IMPLEMENTS_INTERFACES()
String is value type on C++ side which implicitly (without inheritance) implements some interfaces.
static const String Null
Null string.
Definition: string.h:922
String(const char16_t *str, int length)
Constructs string from character string pointer and explicit length.
bool operator==(std::nullptr_t) const
Checks if string is null. Applies same logic as IsNull() call.
String operator+(uint32_t i) const
Adds unsigned integer value string representation to the end of the string.
static bool Equals(const String &strA, const String &strB, System::StringComparison comparison_type)
Equal-compares two strings.
String(const wchar_t ch, int count=1)
Fill constructor. Conversion from wchar_t is time-consuming on some platforms, so no implicit convers...
String(const char16_t ch, int count)
Fill constructor.
String & operator+=(uint16_t value)
Concatenation assignment operator.
static int Compare(const String &strA, int indexA, const String &strB, int indexB, int length, bool ignoreCase=false)
Less-equal-greater-compares two substrings.
static bool IsNullOrEmpty(const String &str)
Checks if passed string is null or empty.
bool operator!=(std::nullptr_t) const
Checks if string is not null. Applies same logic as IsNull() call.
static int Compare(const String &strA, int indexA, const String &strB, int indexB, int length, System::StringComparison comparison_type)
Less-equal-greater-compares two strings.
String operator+(int i) const
Adds integer value string representation to the end of the string.
ArrayPtr< String > Split(char_t separator, int32_t count, StringSplitOptions opt=StringSplitOptions::None) const
Splits string by character.
String operator+(T arg) const
Adds boolean value string representation to the end of the string.
Definition: string.h:399
static int Compare(const String &strA, const String &strB, System::StringComparison comparison_type)
Less-equal-greater-compares two strings.
bool EndsWith(const String &value, System::StringComparison comparisonType) const
Checks if string ends with specified substring.
String Substring(int32_t startIndex) const
Extracts substring.
String operator+(const T &arg) const
String concatenation with string literal or character string pointer.
Definition: string.h:351
String TrimEnd(char_t ch) const
Removes all occurrences of passed character from end of the string.
const UChar * begin() const
Returns pointer to the beginning of actual string buffer. Never reallocates anything....
ArrayPtr< String > Split(const ArrayPtr< String > &separators, StringSplitOptions opt=StringSplitOptions::None) const
Splits string by substring.
int LastIndexOf(const String &str, int startIndex=INT32_MAX) const
Substring backward lookup.
std::wstring ToWCS() const
Converts string to std::wstring.
int FastToAscii(char buffer[], int buffer_size) const
Tries to convert a String to an ASCII string.
int IndexOf(const String &value, int startIndex, int count, System::StringComparison comparisonType) const
Substring forward lookup.
String TrimStart(char_t ch) const
Removes all occurrences of passed character from beginning of the string.
String Replace(char_t oldValue, char_t newValue) const
Replaces all occurrences of character in the string.
String ToUpper(const SharedPtr< System::Globalization::CultureInfo > &cultureInfo) const
Converts all string's characters to upper case using specific culture.
String(const T &value, typename std::enable_if< IsStringPointer< T, char16_t >::value >::type *=nullptr)
Constructs string based on character string pointer. Treats pointed string as null-terminated,...
Definition: string.h:161
String operator+(double d) const
Adds floating point value string representation to the end of the string.
String(const ArrayPtr< char16_t > &arr, int offset, int len)
Converts character array subrange to string. If parameters are out of array bounds,...
String ToUpper() const
Converts all string's characters to upper case.
int IndexOf(char_t c, int startIndex, int count) const
Character forward lookup in substring.
void CopyTo(int sourceIndex, const ArrayPtr< char_t > &destination, int destinationIndex, int count) const
Copies string characters into existing array elements. No resize is being done.
static int Compare(const String &strA, const String &strB, bool ignoreCase=false)
Less-equal-greater-compares two strings.
int LastIndexOfAny(const ArrayPtr< char_t > &anyOf, int32_t startindex) const
Looks for any of passed characters through substring backwardly. Compares last string character to al...
String(const char16_t *str, int start, int length)
Constructs string from character string pointer from starting position using length.
int CompareTo(const String &str) const
Compares two strings in 'less-equals-more' style. Uses current culture.
String PadLeft(int totalWidth, char_t c=u' ') const
Adds padding on the left of original string.
String TrimStart(const ArrayPtr< char_t > &anyOf) const
Removes all occurrences of passed characters from beginning of the string.
bool IsAsciiString() const
Indicates if a String contains ASCII symbols only.
ArrayPtr< String > Split(const ArrayPtr< char_t > &separators, int32_t count, StringSplitOptions opt=StringSplitOptions::None) const
Splits string by one of characters specified.
static String Concat(const String &str0, const String &str1, const String &str2, const String &str3)
Concatenates strings.
String operator+(const String &str) const
String concatenation operator.
bool IsNullOrEmpty() const
Checks if string is empty or is considered null.
static String Concat(const String &str0, const String &str1, const String &str2)
Concatenates strings.
static String Join(const String &separator, const System::Details::ArrayView< String > &parts, int startIndex=0, int count=-1)
Joins array using string as separator.
String & operator+=(double value)
Concatenation assignment operator.
static int CompareOrdinal(const String &strA, const String &strB)
Less-equal-greater-compares two strings using ordinal mode.
String(const std::string &utf8str)
Creates String from std::string string presented in format UTF-8.
std::string ToUtf8String() const
Converts string to std::string. Uses UTF-8 encoding.
static String FromUtf8(const char *utf8, int len)
Creates String from utf8 string.
bool StartsWith(const String &value, System::StringComparison comparisonType) const
Checks if string begins with specified substring.
static bool IsNullOrWhiteSpace(const String &str)
Indicates whether a specified string is null, empty, or consists only of white-space characters.
bool operator!=(const String &str) const
Non-equality comparison operator.
static String Join(const String &separator, const ArrayPtr< SharedPtr< Object > > &parts)
Joins array using string as separator.
String operator+(char_t x) const
Adds character to the end of the string.
String TrimEnd() const
Removes all whitespace characters from end of the string.
ArrayPtr< String > Split(const ArrayPtr< char_t > &separators, StringSplitOptions opt=StringSplitOptions::None) const
Splits string by one of characters specified.
bool Equals(const String &str, System::StringComparison comparison_type) const
String equality comparison. Several modes provided by StringComparison enumeration are supported.
const UChar * end() const
Returns pointer to the end of actual string buffer. Never reallocates anything. Doesn't guarantee buf...
String ToString(const SharedPtr< IFormatProvider > &) const
Wrapper for handling String class in contexts where ToString() is being called on value type objects.
Definition: string.h:515
const UChar * u_str() const
Returns ICU-styled null-terminated buffer. May reallocate the string.
ArrayPtr< String > Split(const ArrayPtr< String > &separators, int count, StringSplitOptions opt=StringSplitOptions::None) const
Splits string by substring. Currently, only supports separators array of zero or one elements.
static String Concat(const String &str0, const String &str1)
Concatenates strings.
String ToString() const
Wrapper for handling String class in contexts where ToString() is being called on value type objects.
Definition: string.h:512
String Trim() const
Removes all whitespace characters from both beginning and end of the string.
static int CompareOrdinal(const String &strA, int indexA, const String &strB, int indexB, int length)
Less-equal-greater-compares two strings using ordinal mode.
String operator+(int64_t v) const
Adds integer value string representation to the end of the string.
int IndexOf(char_t c, int startIndex=0) const
Character forward lookup.
ArrayPtr< uint8_t > ToByteArray(int32_t startIndex=0, int32_t length=INT32_MAX, bool LE=true) const
Converts string or substring to array of bytes.
std::u32string ToU32Str() const
Converts string to std::u32string.
int IndexOfAny(const ArrayPtr< char_t > &anyOf, int32_t startindex) const
Looks for any of passed characters through substring. Compares first string character to all characte...
String TrimEnd(const ArrayPtr< char_t > &anyOf) const
Removes all occurrences of passed characters from end of the string.
static String FromUtf32(const uint32_t *utf32, int32_t length)
Creates String from utf32 string.
String(T &value, typename std::enable_if< IsStringLiteral< T, char >::value >::type *=nullptr)
Constructs string based on string literal. Considers literal a null-terminated string in UTF8,...
Definition: string.h:170
int IndexOf(const String &str, int startIndex, System::StringComparison comparison_type) const
Substring forward lookup.
static String FromWCS(const std::wstring &wcs)
Creates String from widestring.
bool IsEmpty() const
Checks if string is both non-null and empty.
int IndexOfAny(const ArrayPtr< char_t > &anyOf, int32_t startindex, int32_t count) const
Looks for any of passed characters through substring. Compares first string character to all characte...
String & operator+=(uint64_t value)
Concatenation assignment operator.
String Insert(int startIndex, const String &value) const
Inserts substring at specified position.
bool Contains(const String &str) const
Checks if str is a substring of current string.
static String FromAscii(const char *asciiStr)
Creates String from ASCII string.
String & SetCharAt(int index, char_t ch)
Sets character at specified position.
int LastIndexOf(char_t value) const
Character backward lookup.
ArrayPtr< String > Split(char_t separator=u' ', StringSplitOptions opt=StringSplitOptions::None) const
Splits string by character.
bool StartsWith(const String &value, bool ignoreCase, const SharedPtr< System::Globalization::CultureInfo > &culture=nullptr) const
Checks if string begins with specified substring.
static String FromUtf8(const char *utf8)
Creates String from utf8 string.
bool IsNull() const
Checks if string is considered null. String is null and only if it is constructed via String() constr...
Definition: string.h:293
std::reverse_iterator< const char16_t * > reverse_iterator
Reverse iterator type.
Definition: string.h:143
String(T &value, typename std::enable_if< IsStringLiteral< T, wchar_t >::value >::type *=nullptr)
Constructs string based on widestring literal. Considers literal a null-terminated string,...
Definition: string.h:226
String Replace(const String &oldValue, const String &newValue) const
Replaces all occurrences of lookup in this string.
String()
Default constructor. Creates string object which is considered null.
String(const codeporting_icu::UnicodeString &str)
Wraps UnicodeString into String.
static String Concat(const ArrayPtr< String > &parts)
Concatenates strings.
String Normalize(System::Text::NormalizationForm form) const
Normalizes unicode string using normalization form specified.
String Trim(const ArrayPtr< char_t > &anyOf) const
Removes all occurrences of passed characters from both beginning and end of the string.
static int Compare(const String &strA, const String &strB, bool ignoreCase, const SharedPtr< System::Globalization::CultureInfo > &ci)
Less-equal-greater-compares two strings.
int LastIndexOf(const String &value, int startIndex, int count, StringComparison comparisonType) const
Substring backward lookup.
String(T &value, typename std::enable_if< IsStringLiteral< T, char16_t >::value >::type *=nullptr)
Constructs string based on string literal. Considers literal a null-terminated string,...
Definition: string.h:154
std::string ToAsciiString() const
Converts string to std::string. Uses ASCII encoding.
int LastIndexOf(char_t value, int32_t startIndex) const
Character backward lookup.
Regular expression that follows C#-like syntax. Objects of this class should only be allocated using ...
Definition: regex.h:30
Buffer to accumulate string part by part. This type can be allocated either in stack as value type or...
Definition: string_builder.h:17
Represents a particular type and provides information about it.
Definition: type_info.h:109
@ Text
Defines color adjustment information for text.
NormalizationForm
Defines how to normalize Unicode string.
Definition: normalization_form.h:9
Definition: db_command.h:9
void PrintTo(DateTime value, std::ostream *stream)
Prints value to ostream. Mostly used for debug.
bool operator!=(ArraySegment< T > a, ArraySegment< T > b)
Definition: array_segment.h:156
Decimal operator+(const T &x, const Decimal &d)
Returns a new instance of Decimal class that represents a value that is a sum of the specified value ...
Definition: decimal.h:542
std::istream & operator>>(std::istream &in, String &str)
Gets a string from the input streamusing UTF-8 encoding.
StringComparison
Defines string comparison style.
Definition: string_comparison.h:13
StringSplitOptions
Determines string splitting behavior.
Definition: string.h:57
@ None
Keep empty strings when splitting string.
@ RemoveEmptyEntries
Discard empty strings when splitting string.
std::ostream & operator<<(std::ostream &stream, DateTime date_time)
Insert data into the stream using UTF-8 encoding.
Definition: date_time.h:729
bool operator==(ArraySegment< T > a, ArraySegment< T > b)
Definition: array_segment.h:150
Template predicate that checks if boxed object should implement given interface by itself.
Definition: boxable_traits.h:33
Template magic to deduce cast results.
Definition: object.h:374
SmartPtr< TTo > type
An alias for a pointer to an instance of TTo.
Definition: object.h:376
Template magic to check if a type is a sequence of string characters.
Definition: string.h:71
Template magic to check if a type is a string literal.
Definition: string.h:85
Template magic to check if a type is a pointer to character string.
Definition: string.h:78