1
0

wa_strings.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  1. #include "WAT.h"
  2. //
  3. // to const char*
  4. //
  5. const char *wa::strings::convert::to_char( const wchar_t *p_message )
  6. {
  7. std::wstring l_message_w( p_message );
  8. std::string l_message( l_message_w.begin(), l_message_w.end() );
  9. return _strdup( l_message.c_str() );
  10. }
  11. const char *wa::strings::convert::to_char( const std::wstring p_message )
  12. {
  13. std::string l_message = wa::strings::convert::to_string( p_message );
  14. return _strdup( l_message.c_str() );
  15. }
  16. //
  17. // to const wchar_t*
  18. //
  19. const wchar_t *wa::strings::convert::to_wchar( const char *p_message )
  20. {
  21. std::string l_message( p_message );
  22. std::wstring l_message_w( l_message.begin(), l_message.end() );
  23. return _wcsdup( l_message_w.c_str() );
  24. }
  25. //
  26. // to std::string
  27. //
  28. std::string wa::strings::convert::to_string( const char *p_message )
  29. {
  30. std::string l_message( p_message );
  31. return l_message;
  32. }
  33. std::string wa::strings::convert::to_string( const wchar_t *p_message )
  34. {
  35. std::wstring l_message_w( p_message );
  36. std::string l_message( l_message_w.begin(), l_message_w.end() );
  37. return l_message;
  38. }
  39. std::string wa::strings::convert::to_string( const std::wstring p_message )
  40. {
  41. std::string l_message( p_message.begin(), p_message.end() );
  42. return l_message;
  43. }
  44. //
  45. // to std::wstring
  46. //
  47. std::wstring wa::strings::convert::to_wstring( const char *p_message )
  48. {
  49. std::string l_message_w( p_message );
  50. std::wstring l_message( l_message_w.begin(), l_message_w.end() );
  51. return l_message;
  52. }
  53. std::wstring wa::strings::convert::to_wstring( const wchar_t *p_message )
  54. {
  55. std::wstring l_message( p_message );
  56. return l_message;
  57. }
  58. std::wstring wa::strings::convert::to_wstring( const std::string p_message )
  59. {
  60. std::wstring l_message( p_message.begin(), p_message.end() );
  61. return l_message;
  62. }
  63. //
  64. // replace
  65. //
  66. void wa::strings::replace( std::string &p_string, const std::string &p_from, const std::string &p_to )
  67. {
  68. if ( p_from.empty() )
  69. return;
  70. size_t start_pos = p_string.find( p_from );
  71. if ( start_pos == std::string::npos )
  72. return;
  73. p_string.replace( start_pos, p_from.length(), p_to );
  74. return;
  75. }
  76. void wa::strings::replace( char *p_string, const char *p_from, const char *p_to )
  77. {
  78. std::string l_string( p_string );
  79. wa::strings::replace( l_string, std::string( p_from ), std::string( p_to ) );
  80. p_string = (char *)l_string.c_str();
  81. }
  82. void wa::strings::replace( wchar_t *p_string, const wchar_t *p_from, const wchar_t *p_to )
  83. {
  84. std::string l_string = wa::strings::convert::to_string( p_string );
  85. wa::strings::replace( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) );
  86. std::wstring l_wstring = wa::strings::convert::to_wstring( l_string );
  87. p_string = (wchar_t *)( l_wstring.c_str() );
  88. }
  89. //
  90. // replaceAll
  91. //
  92. void wa::strings::replaceAll( std::string &p_string, const std::string &p_from, const std::string &p_to )
  93. {
  94. if ( p_from.empty() )
  95. return;
  96. size_t start_pos = 0;
  97. while ( ( start_pos = p_string.find( p_from, start_pos ) ) != std::string::npos )
  98. {
  99. p_string.replace( start_pos, p_from.length(), p_to );
  100. start_pos += p_to.length(); // In case 'p_to' contains 'p_from', like replacing 'x' with 'yx'
  101. }
  102. }
  103. void wa::strings::replaceAll( char *p_string, const char *p_from, const char *p_to )
  104. {
  105. std::string l_string( p_string );
  106. wa::strings::replaceAll( l_string, std::string( p_from ), std::string( p_to ) );
  107. p_string = (char *)l_string.c_str();
  108. }
  109. void wa::strings::replaceAll( wchar_t *p_string, const wchar_t *p_from, const wchar_t *p_to )
  110. {
  111. std::string l_string = wa::strings::convert::to_string( p_string );
  112. wa::strings::replaceAll( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) );
  113. std::wstring l_wstring = wa::strings::convert::to_wstring( l_string );
  114. p_string = (wchar_t *)( l_wstring.c_str() );
  115. }
  116. //
  117. // create_string
  118. //
  119. std::string wa::strings::create_string( const char *Format, ... )
  120. {
  121. char _log_message_a[ DEFAULT_STR_BUFFER_SIZE ];
  122. va_list args;
  123. va_start( args, Format );
  124. snprintf( _log_message_a, DEFAULT_STR_BUFFER_SIZE, Format, args );
  125. return std::string( _log_message_a );
  126. }
  127. std::string wa::strings::create_string( const wchar_t *Format, ... )
  128. {
  129. wchar_t _log_message_w[ DEFAULT_STR_BUFFER_SIZE ];
  130. va_list args;
  131. va_start( args, Format );
  132. _vsnwprintf( _log_message_w, DEFAULT_STR_BUFFER_SIZE, Format, args );
  133. return wa::strings::convert::to_string( _log_message_w );
  134. }
  135. std::string wa::strings::create_string( const std::string Format, ... )
  136. {
  137. va_list args;
  138. va_start( args, Format );
  139. return create_string( Format.c_str(), args );
  140. }
  141. //=====================================================================================================================
  142. //
  143. // wa_string::wa_string (constructor)
  144. //
  145. wa::strings::wa_string::wa_string( const char *p_initial )
  146. {
  147. if ( p_initial == NULL )
  148. _wa_string.clear();
  149. else
  150. _wa_string = wa::strings::convert::to_wstring( p_initial );
  151. }
  152. wa::strings::wa_string::wa_string( const wchar_t *p_initial )
  153. {
  154. if ( p_initial == NULL )
  155. _wa_string.clear();
  156. else
  157. _wa_string = std::wstring( p_initial );
  158. }
  159. wa::strings::wa_string::wa_string( const std::string &p_initial )
  160. {
  161. _wa_string = wa::strings::convert::to_wstring( p_initial );
  162. }
  163. wa::strings::wa_string::wa_string( const std::wstring &p_initial )
  164. {
  165. _wa_string = p_initial;
  166. }
  167. //
  168. // wa_string::operator=
  169. //
  170. void wa::strings::wa_string::operator=( const char *p_value )
  171. {
  172. _wa_string = wa::strings::convert::to_wstring( p_value );
  173. }
  174. void wa::strings::wa_string::operator=( const wchar_t *p_value )
  175. {
  176. _wa_string = std::wstring( p_value );
  177. }
  178. void wa::strings::wa_string::operator=( const std::string &p_value )
  179. {
  180. _wa_string = wa::strings::convert::to_wstring( p_value );
  181. }
  182. void wa::strings::wa_string::operator=( const std::wstring &p_value )
  183. {
  184. _wa_string = p_value;
  185. }
  186. //
  187. // wa_string::operator==
  188. //
  189. bool wa::strings::wa_string::operator==( const char *p_value ) const
  190. {
  191. std::string l_wa_string( wa::strings::convert::to_string( _wa_string ) );
  192. return l_wa_string.compare( p_value ) == 0;
  193. }
  194. bool wa::strings::wa_string::operator==( const wchar_t *p_value ) const
  195. {
  196. return _wa_string.compare( p_value ) == 0;
  197. }
  198. bool wa::strings::wa_string::operator==( const std::string &p_value ) const
  199. {
  200. std::string l_wa_string( wa::strings::convert::to_string( _wa_string ) );
  201. return l_wa_string.compare( p_value ) == 0;
  202. }
  203. bool wa::strings::wa_string::operator==( const std::wstring &p_value ) const
  204. {
  205. return _wa_string.compare( p_value ) == 0;
  206. }
  207. //
  208. // wa_string::operator!=
  209. //
  210. bool wa::strings::wa_string::operator!=( const char *p_value ) const
  211. {
  212. std::string l_wa_string( wa::strings::convert::to_string( _wa_string ) );
  213. return l_wa_string.compare( p_value ) != 0;
  214. }
  215. bool wa::strings::wa_string::operator!=( const wchar_t *p_value ) const
  216. {
  217. return _wa_string.compare( p_value ) != 0;
  218. }
  219. bool wa::strings::wa_string::operator!=( const std::string &p_value ) const
  220. {
  221. std::string l_wa_string( wa::strings::convert::to_string( _wa_string ) );
  222. return l_wa_string.compare( p_value ) != 0;
  223. }
  224. bool wa::strings::wa_string::operator!=( const int p_value ) const
  225. {
  226. return std::to_wstring( p_value ).compare( _wa_string ) != 0;
  227. }
  228. //
  229. // wa_string::operator+
  230. //
  231. wa::strings::wa_string wa::strings::wa_string::operator+( const char *p_value )
  232. {
  233. _wa_string.append( wa::strings::convert::to_wstring( p_value ) );
  234. return *this;
  235. }
  236. wa::strings::wa_string wa::strings::wa_string::operator+( const wchar_t *p_value )
  237. {
  238. _wa_string.append( p_value );
  239. return *this;
  240. }
  241. wa::strings::wa_string wa::strings::wa_string::operator+( const std::string &p_value )
  242. {
  243. _wa_string.append( wa::strings::convert::to_wstring( p_value ) );
  244. return *this;
  245. }
  246. wa::strings::wa_string wa::strings::wa_string::operator+( const std::wstring &p_value )
  247. {
  248. _wa_string.append( p_value );
  249. return *this;
  250. }
  251. wa::strings::wa_string wa::strings::wa_string::operator+( const int p_value )
  252. {
  253. append( p_value );
  254. return *this;
  255. }
  256. //
  257. // wa_string::append
  258. //
  259. wa::strings::wa_string wa::strings::wa_string::append( const char *p_value )
  260. {
  261. _wa_string.append( wa::strings::convert::to_wstring( p_value ) );
  262. return *this;
  263. }
  264. wa::strings::wa_string wa::strings::wa_string::append( const wchar_t *p_value )
  265. {
  266. _wa_string.append( p_value );
  267. return *this;
  268. }
  269. wa::strings::wa_string wa::strings::wa_string::append( const std::string &p_value )
  270. {
  271. _wa_string.append( wa::strings::convert::to_wstring( p_value ) );
  272. return *this;
  273. }
  274. wa::strings::wa_string wa::strings::wa_string::append( const std::wstring &p_value )
  275. {
  276. _wa_string.append( p_value );
  277. return *this;
  278. }
  279. wa::strings::wa_string wa::strings::wa_string::append( const wa_string p_value )
  280. {
  281. _wa_string.append(p_value.GetW().c_str());
  282. return *this;
  283. }
  284. wa::strings::wa_string wa::strings::wa_string::append( const int p_value )
  285. {
  286. #ifdef WIN32
  287. // max size is 4294967295 is 10 character
  288. wchar_t temp[ 11 ] = { 0 };
  289. #elif WIN64
  290. // maxsize 9223372036854775807 is 19
  291. wchar_t temp[ 20 ] = { 0 };
  292. #endif
  293. _itow( p_value, temp, 10 );
  294. _wa_string.append( temp );
  295. return *this;
  296. }
  297. // wa_string::GetA
  298. const std::string wa::strings::wa_string::GetA() const
  299. {
  300. return wa::strings::convert::to_string( _wa_string );
  301. }
  302. // wa_string::GetW
  303. const std::wstring wa::strings::wa_string::GetW() const
  304. {
  305. return _wa_string;
  306. }
  307. //
  308. // wa_string::lengthA
  309. //
  310. unsigned int wa::strings::wa_string::lengthA() const
  311. {
  312. return strlen( wa::strings::convert::to_char( _wa_string ) );
  313. }
  314. unsigned int wa::strings::wa_string::lengthW() const
  315. {
  316. return wcslen( _wa_string.c_str() );
  317. }
  318. unsigned int wa::strings::wa_string::lengthS() const
  319. {
  320. std::string l_wa_string = wa::strings::convert::to_string( _wa_string );
  321. return l_wa_string.length();
  322. }
  323. unsigned int wa::strings::wa_string::lengthWS() const
  324. {
  325. return _wa_string.length();
  326. }
  327. //
  328. // wa_string::replace
  329. //
  330. bool wa::strings::wa_string::contains( const char *p_value )
  331. {
  332. std::string l_value( p_value );
  333. return this->contains( l_value );
  334. }
  335. bool wa::strings::wa_string::contains( const wchar_t *p_value )
  336. {
  337. std::string l_value = wa::strings::convert::to_string( p_value );
  338. return this->contains( l_value );
  339. }
  340. bool wa::strings::wa_string::contains( const std::string &p_value )
  341. {
  342. std::string l_wa_string = wa::strings::convert::to_string( _wa_string );
  343. return ( l_wa_string.find( p_value ) != std::string::npos );
  344. }
  345. bool wa::strings::wa_string::contains( const std::wstring &p_value )
  346. {
  347. std::string l_value = wa::strings::convert::to_string( p_value );
  348. return this->contains( l_value );
  349. }
  350. //
  351. // wa_string::replace
  352. //
  353. wa::strings::wa_string wa::strings::wa_string::replace( const char *p_from, const char *p_to )
  354. {
  355. std::string l_string = wa::strings::convert::to_string( _wa_string );
  356. wa::strings::replace( l_string, std::string( p_from ), std::string( p_to ) );
  357. _wa_string = wa::strings::convert::to_wstring( l_string );
  358. return *this;
  359. }
  360. wa::strings::wa_string wa::strings::wa_string::replace( const wchar_t *p_from, const wchar_t *p_to )
  361. {
  362. std::string l_string = wa::strings::convert::to_string( _wa_string );
  363. wa::strings::replace( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) );
  364. _wa_string = wa::strings::convert::to_wstring( l_string );
  365. return *this;
  366. }
  367. wa::strings::wa_string wa::strings::wa_string::replace( const std::string &p_from, const std::string &p_to )
  368. {
  369. std::string l_string = wa::strings::convert::to_string( _wa_string );
  370. wa::strings::replace( l_string, p_from, p_to );
  371. _wa_string = wa::strings::convert::to_wstring( l_string );
  372. return *this;
  373. }
  374. wa::strings::wa_string wa::strings::wa_string::replace( const std::wstring &p_from, const std::wstring &p_to )
  375. {
  376. std::string l_string = wa::strings::convert::to_string( _wa_string );
  377. wa::strings::replace( l_string, wa::strings::convert::to_string( p_from), wa::strings::convert::to_string( p_to ) );
  378. _wa_string = wa::strings::convert::to_wstring( l_string );
  379. return *this;
  380. }
  381. //
  382. // wa_string::replaceAll
  383. //
  384. wa::strings::wa_string wa::strings::wa_string::replaceAll( const char *p_from, const char *p_to )
  385. {
  386. std::string l_string = wa::strings::convert::to_string( _wa_string );
  387. wa::strings::replaceAll( l_string, std::string( p_from ), std::string( p_to ) );
  388. _wa_string = wa::strings::convert::to_wstring( l_string );
  389. return *this;
  390. }
  391. wa::strings::wa_string wa::strings::wa_string::replaceAll( const wchar_t *p_from, const wchar_t *p_to )
  392. {
  393. std::string l_string = wa::strings::convert::to_string( _wa_string );
  394. wa::strings::replaceAll( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) );
  395. _wa_string = wa::strings::convert::to_wstring( l_string );
  396. return *this;
  397. }
  398. wa::strings::wa_string wa::strings::wa_string::replaceAll( const std::string &p_from, const std::string &p_to )
  399. {
  400. std::string l_string = wa::strings::convert::to_string( _wa_string );
  401. wa::strings::replaceAll( l_string, p_from, p_to );
  402. _wa_string = wa::strings::convert::to_wstring( l_string );
  403. return *this;
  404. }
  405. wa::strings::wa_string wa::strings::wa_string::replaceAll( const std::wstring &p_from, const std::wstring &p_to )
  406. {
  407. std::string l_string = wa::strings::convert::to_string( _wa_string );
  408. wa::strings::replaceAll( l_string, wa::strings::convert::to_string( p_from ), wa::strings::convert::to_string( p_to ) );
  409. _wa_string = wa::strings::convert::to_wstring( l_string );
  410. return *this;
  411. }
  412. //
  413. // wa_string::startsWith
  414. //
  415. bool wa::strings::wa_string::startsWith( const char *l_head ) const
  416. {
  417. std::string l_string = wa::strings::convert::to_string( _wa_string );
  418. return ( l_string.substr( 0, std::strlen( l_head ) ).compare( l_head ) == 0 );
  419. }
  420. bool wa::strings::wa_string::startsWith( const wchar_t *l_head ) const
  421. {
  422. return ( _wa_string.substr( 0, wcslen( l_head ) ).compare( l_head ) == 0 );
  423. }
  424. bool wa::strings::wa_string::startsWith( const std::string &l_head ) const
  425. {
  426. std::string l_string = wa::strings::convert::to_string( _wa_string );
  427. return ( l_string.substr( 0, l_head.size() ).compare( l_head ) == 0 );
  428. }
  429. bool wa::strings::wa_string::startsWith( const std::wstring &l_head ) const
  430. {
  431. return ( _wa_string.substr( 0, l_head.size() ).compare( l_head ) == 0 );
  432. }
  433. //
  434. // wa_string::endsWith
  435. //
  436. bool wa::strings::wa_string::endsWith( const char *l_tail ) const
  437. {
  438. // TODO
  439. return false;
  440. }
  441. bool wa::strings::wa_string::endsWith( const wchar_t *l_tail ) const
  442. {
  443. // TODO
  444. return false;
  445. }
  446. bool wa::strings::wa_string::endsWith( const std::string &l_tail ) const
  447. {
  448. // TODO
  449. return false;
  450. }
  451. bool wa::strings::wa_string::endsWith( const std::wstring &l_tail ) const
  452. {
  453. // TODO
  454. return false;
  455. }
  456. //
  457. // wa_string::findFirst
  458. //
  459. int wa::strings::wa_string::findFirst( const char *l_text ) const
  460. {
  461. std::string l_string = wa::strings::convert::to_string( _wa_string );
  462. return l_string.find_first_of( l_text );
  463. }
  464. int wa::strings::wa_string::findFirst( const wchar_t *l_text ) const
  465. {
  466. return _wa_string.find_first_of( l_text );
  467. }
  468. int wa::strings::wa_string::findFirst( const std::string &l_text ) const
  469. {
  470. std::string l_string = wa::strings::convert::to_string( _wa_string );
  471. return l_string.find_first_of( l_text );
  472. }
  473. int wa::strings::wa_string::findFirst( const std::wstring &l_text ) const
  474. {
  475. return _wa_string.find_first_of( l_text );
  476. }
  477. //
  478. // wa_string::findLast
  479. //
  480. int wa::strings::wa_string::findLast( const char *l_text ) const
  481. {
  482. std::string l_string = wa::strings::convert::to_string( _wa_string );
  483. return l_string.find_last_of( l_text );
  484. }
  485. int wa::strings::wa_string::findLast( const wchar_t *l_text ) const
  486. {
  487. return _wa_string.find_last_of( l_text );
  488. }
  489. int wa::strings::wa_string::findLast( const std::string &l_text ) const
  490. {
  491. std::string l_string = wa::strings::convert::to_string( _wa_string );
  492. return l_string.find_last_of( l_text );
  493. }
  494. int wa::strings::wa_string::findLast( const std::wstring &l_text ) const
  495. {
  496. return _wa_string.find_last_of( l_text );
  497. }
  498. //
  499. // wa_string::find
  500. //
  501. int wa::strings::wa_string::find( const std::wstring &l_text ) const
  502. {
  503. return _wa_string.find( l_text );
  504. }
  505. // wa_string::mid
  506. std::wstring wa::strings::wa_string::mid( const int p_start, const int p_length ) const
  507. {
  508. return _wa_string.substr( p_start, p_length );
  509. }
  510. // wa_string::toUpper
  511. wa::strings::wa_string wa::strings::wa_string::toUpper()
  512. {
  513. std::transform( _wa_string.begin(), _wa_string.end(), _wa_string.begin(), ::toupper );
  514. return *this;
  515. }