@@ -1009,3 +1009,204 @@ void test_CSimpleStringT() {
1009
1009
1010
1010
sink (s1[0 ]); // $ ir
1011
1011
}
1012
+
1013
+ template <typename T>
1014
+ struct MakeOther {};
1015
+
1016
+ template <>
1017
+ struct MakeOther <char > {
1018
+ using other_t = wchar_t ;
1019
+ };
1020
+
1021
+ template <>
1022
+ struct MakeOther <wchar_t > {
1023
+ using other_t = char ;
1024
+ };
1025
+
1026
+ template <typename BaseType>
1027
+ struct CStringT : public CSimpleStringT <BaseType> {
1028
+ using XCHAR = BaseType; // simplified
1029
+ using YCHAR = typename MakeOther<BaseType>::other_t ; // simplified
1030
+ using PCXSTR = typename CSimpleStringT<BaseType>::PCXSTR;
1031
+ using PXSTR = typename CSimpleStringT<BaseType>::PXSTR;
1032
+ CStringT () throw ();
1033
+
1034
+ CStringT (IAtlStringMgr* pStringMgr) throw ();
1035
+ CStringT (const VARIANT& varSrc);
1036
+ CStringT (const VARIANT& varSrc, IAtlStringMgr* pStringMgr);
1037
+ CStringT (const CStringT& strSrc);
1038
+ CStringT (const CSimpleStringT<BaseType>& strSrc);
1039
+ CStringT (const XCHAR* pszSrc);
1040
+ CStringT (const YCHAR* pszSrc);
1041
+ CStringT (LPCSTR pszSrc, IAtlStringMgr* pStringMgr);
1042
+ CStringT (LPCWSTR pszSrc, IAtlStringMgr* pStringMgr);
1043
+ CStringT (const unsigned char * pszSrc);
1044
+ CStringT (char * pszSrc);
1045
+ CStringT (unsigned char * pszSrc);
1046
+ CStringT (wchar_t * pszSrc);
1047
+ CStringT (const unsigned char * pszSrc, IAtlStringMgr* pStringMgr);
1048
+ CStringT (char ch, int nLength = 1 );
1049
+ CStringT (wchar_t ch, int nLength = 1 );
1050
+ CStringT (const XCHAR* pch, int nLength);
1051
+ CStringT (const YCHAR* pch, int nLength);
1052
+ CStringT (const XCHAR* pch, int nLength, IAtlStringMgr* pStringMgr);
1053
+ CStringT (const YCHAR* pch, int nLength, IAtlStringMgr* pStringMgr);
1054
+
1055
+ operator CSimpleStringT<BaseType> &();
1056
+
1057
+ ~CStringT () throw ();
1058
+
1059
+ BSTR AllocSysString () const ;
1060
+ void AppendFormat (PCXSTR pszFormat, ...);
1061
+ void AppendFormat (UINT nFormatID, ...);
1062
+ int Delete (int iIndex, int nCount = 1 );
1063
+ int Find (PCXSTR pszSub, int iStart=0 ) const throw();
1064
+ int Find (XCHAR ch, int iStart=0 ) const throw();
1065
+ int FindOneOf (PCXSTR pszCharSet) const throw();
1066
+ void Format (UINT nFormatID, ...);
1067
+ void Format (PCXSTR pszFormat, ...);
1068
+ BOOL GetEnvironmentVariable (PCXSTR pszVar);
1069
+ int Insert (int iIndex, PCXSTR psz);
1070
+ int Insert (int iIndex, XCHAR ch);
1071
+ CStringT Left (int nCount) const ;
1072
+ BOOL LoadString (HINSTANCE hInstance, UINT nID, WORD wLanguageID);
1073
+ BOOL LoadString (HINSTANCE hInstance, UINT nID);
1074
+ BOOL LoadString (UINT nID);
1075
+ CStringT& MakeLower ();
1076
+ CStringT& MakeReverse ();
1077
+ CStringT& MakeUpper ();
1078
+ CStringT Mid (int iFirst, int nCount) const ;
1079
+ CStringT Mid (int iFirst) const ;
1080
+ int Replace (PCXSTR pszOld, PCXSTR pszNew);
1081
+ int Replace (XCHAR chOld, XCHAR chNew);
1082
+ CStringT Right (int nCount) const ;
1083
+ BSTR SetSysString (BSTR* pbstr) const ;
1084
+ CStringT SpanExcluding (PCXSTR pszCharSet) const ;
1085
+ CStringT SpanIncluding (PCXSTR pszCharSet) const ;
1086
+ CStringT Tokenize (PCXSTR pszTokens, int & iStart) const ;
1087
+ CStringT& Trim (XCHAR chTarget);
1088
+ CStringT& Trim (PCXSTR pszTargets);
1089
+ CStringT& Trim ();
1090
+ CStringT& TrimLeft (XCHAR chTarget);
1091
+ CStringT& TrimLeft (PCXSTR pszTargets);
1092
+ CStringT& TrimLeft ();
1093
+ CStringT& TrimRight (XCHAR chTarget);
1094
+ CStringT& TrimRight (PCXSTR pszTargets);
1095
+ CStringT& TrimRight ();
1096
+ };
1097
+
1098
+ void test_CStringT () {
1099
+ VARIANT v = source<VARIANT>();
1100
+
1101
+ CStringT<char > s1 (v);
1102
+ sink (s1.GetString ()); // $ ir
1103
+
1104
+ CStringT<char > s2 (v, nullptr );
1105
+ sink (s2.GetString ()); // $ MISSING: ir
1106
+
1107
+ CStringT<char > s3 (s2);
1108
+ sink (s3.GetString ()); // $ MISSING: ir
1109
+
1110
+ char * x = indirect_source<char >();
1111
+ CStringT<char > s4 (x);
1112
+ sink (s4.GetString ()); // $ ir
1113
+
1114
+ wchar_t * y = indirect_source<wchar_t >();
1115
+ CStringT<wchar_t > s5 (y);
1116
+ sink (s5.GetString ()); // $ ir
1117
+
1118
+ CStringT<char > s6 (x, nullptr );
1119
+ sink (s6.GetString ()); // $ MISSING: ir
1120
+
1121
+ CStringT<wchar_t > s7 (y, nullptr );
1122
+ sink (s7.GetString ()); // $ MISSING: ir
1123
+
1124
+ unsigned char * ucs = indirect_source<unsigned char >();
1125
+ CStringT<char > s8 (ucs);
1126
+ sink (s8.GetString ()); // $ ir
1127
+
1128
+ char c = source<char >();
1129
+ CStringT<char > s9 (c);
1130
+ sink (s9.GetString ()); // $ ir
1131
+
1132
+ wchar_t wc = source<wchar_t >();
1133
+ CStringT<wchar_t > s10 (wc);
1134
+ sink (s10.GetString ()); // $ ir
1135
+
1136
+ sink (&s1); // $ ast ir
1137
+
1138
+ auto bstr = s1.AllocSysString ();
1139
+ sink (bstr); // $ MISSING: ir
1140
+
1141
+ CStringT<char > s11;
1142
+ s11.AppendFormat (" %d" , source<int >());
1143
+ sink (s11.GetString ()); // $ MISSING: ir
1144
+
1145
+ CStringT<char > s12;
1146
+ s12.AppendFormat (indirect_source<char >());
1147
+ sink (s12.GetString ()); // $ MISSING: ir
1148
+
1149
+ CStringT<char > s13;
1150
+ s13.AppendFormat (source<UINT>());
1151
+ sink (s13.GetString ()); // $ MISSING: ir
1152
+
1153
+ CStringT<char > s14;
1154
+ s14.AppendFormat (42 , source<char >());
1155
+ sink (s14.GetString ()); // $ MISSING: ir
1156
+
1157
+ CStringT<char > s15;
1158
+ s15.AppendFormat (42 , source<char >());
1159
+ sink (s15.GetString ()); // $ MISSING: ir
1160
+
1161
+ CStringT<char > s16;
1162
+ s16.AppendFormat (" %s" , indirect_source<char >());
1163
+
1164
+ CStringT<char > s17;
1165
+ s17.Insert (0 , x);
1166
+ sink (s17.GetString ()); // $ MISSING: ir
1167
+
1168
+ CStringT<char > s18;
1169
+ s18.Insert (0 , source<char >());
1170
+ sink (s18.GetString ()); // $ MISSING: ir
1171
+
1172
+ sink (s1.Left (42 ).GetString ()); // $ MISSING: ir
1173
+
1174
+ CStringT<char > s20;
1175
+ s20.LoadString (source<UINT>());
1176
+ sink (s20.GetString ()); // $ MISSING: ir
1177
+
1178
+ sink (s1.MakeLower ().GetString ()); // $ MISSING: ir
1179
+ sink (s1.MakeReverse ().GetString ()); // $ MISSING: ir
1180
+ sink (s1.MakeUpper ().GetString ()); // $ MISSING: ir
1181
+ sink (s1.Mid (0 , 42 ).GetString ()); // $ MISSING: ir
1182
+
1183
+ CStringT<char > s21;
1184
+ s21.Replace (" abc" , x);
1185
+ sink (s21.GetString ()); // $ MISSING: ir
1186
+
1187
+ CStringT<char > s22;
1188
+ s22.Replace (' \n ' , source<char >());
1189
+ sink (s22.GetString ()); // $ MISSING: ir
1190
+
1191
+ sink (s2.Right (42 ).GetString ()); // $ MISSING: ir
1192
+
1193
+ BSTR bstr2;
1194
+ s1.SetSysString (&bstr2);
1195
+ sink (bstr2); // $ ast MISSING: ir
1196
+
1197
+ sink (s1.SpanExcluding (" abc" ).GetString ()); // $ MISSING: ir
1198
+ sink (s1.SpanIncluding (" abc" ).GetString ()); // $ MISSING: ir
1199
+
1200
+ int start = 0 ;
1201
+ sink (s1.Tokenize (" abc" , start).GetString ()); // $ MISSING: ir
1202
+
1203
+ sink (s1.Trim (' a' ).GetString ()); // $ MISSING: ir
1204
+ sink (s1.Trim (" abc" ).GetString ()); // $ MISSING: ir
1205
+ sink (s1.Trim ().GetString ()); // $ MISSING: ir
1206
+ sink (s1.TrimLeft (' a' ).GetString ()); // $ MISSING: ir
1207
+ sink (s1.TrimLeft (" abc" ).GetString ()); // $ MISSING: ir
1208
+ sink (s1.TrimLeft ().GetString ()); // $ MISSING: ir
1209
+ sink (s1.TrimRight (' a' ).GetString ()); // $ MISSING: ir
1210
+ sink (s1.TrimRight (" abc" ).GetString ()); // $ MISSING: ir
1211
+ sink (s1.TrimRight ().GetString ()); // $ MISSING: ir
1212
+ }
0 commit comments