@@ -1009,3 +1009,204 @@ void test_CSimpleStringT() {
10091009
10101010 sink (s1[0 ]); // $ ir
10111011}
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