tchar.h.xml 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. <chapter xml:id="tchar.h">
  2. <title><tt>__vic/tchar.h</tt></title>
  3. <p>Обобщенные (generic) функции для манипуляции С-строками независимо от
  4. используемого ими типа символов, подобно <tt>std::char_traits&lt;></tt>.
  5. Использование данных функций в шаблонах нередко значительно сокращает
  6. потребность в написании специализаций для различных типов символов.</p>
  7. <p>Все функции находятся в пространстве имён <tt>__vic::tchar</tt>.</p>
  8. <p>Большинство функций являются просто обобщёнными обёртками для функций,
  9. вроде <tt>strcpy</tt>, <tt>wcscpy</tt> и т.п. Поисковые функции имеют более
  10. осмысленные имена, чем их аналоги в билиотеке C, и унифицированные параметры:
  11. они всегда принимают указатели и никогда индексы. Также набор функций дополнен
  12. «логически симметричными», но отсутствующими в стандартной билиотеке.
  13. Поисковые функции возвращают <tt>nullptr</tt> в случае неудачи.</p>
  14. <section><title>Пример</title>
  15. <code-block lang="C++"><![CDATA[
  16. template<class charT>
  17. charT *generic_dup(const charT *st)
  18. {
  19. namespace tchar = __vic::tchar;
  20. charT *st_copy = new charT[tchar::length(st) + 1];
  21. tchar::copy(st_copy, st);
  22. return st_copy;
  23. }
  24. ]]></code-block>
  25. </section>
  26. <chapter xml:id="tchar--length">
  27. <title><tt>tchar::length()</tt></title>
  28. <code-block lang="C++"><![CDATA[
  29. template<class charT>
  30. size_t tchar::length(const charT *str);
  31. ]]></code-block>
  32. <p>Длина строки в элементах. Обобщённый <tt>strlen</tt> / <tt>wcslen</tt>.</p>
  33. </chapter>
  34. <chapter xml:id="tchar--empty">
  35. <title><tt>tchar::empty()</tt></title>
  36. <code-block lang="C++"><![CDATA[
  37. template<class charT>
  38. bool tchar::empty(const charT *str);
  39. ]]></code-block>
  40. <p>Проверяет, является ли <tt>str</tt> <tt>nullptr</tt> или пустой строкой.</p>
  41. </chapter>
  42. <chapter xml:id="tchar--end">
  43. <title><tt>tchar::end()</tt></title>
  44. <code-block lang="C++"><![CDATA[
  45. namespace tchar {
  46. template<class charT>
  47. const charT *end(const charT *str);
  48. template<class charT>
  49. charT *end(charT *str);
  50. }
  51. ]]></code-block>
  52. <p>Указатель на NULL-терминатор. Обобщённый <tt>strchr(str, '\0')</tt> /
  53. <tt>wcschr(str, L'\0')</tt>.</p>
  54. <note>Некоторые «кривые» реализации <tt>std::strchr()</tt>, например в MinGW,
  55. возвращают неконстантный <tt>char *</tt>, даже если аргумент - <tt>const char
  56. *</tt>. В связи с этим, данные функции могут быть использованы как обход
  57. данной проблемы.</note>
  58. </chapter>
  59. <chapter xml:id="tchar--compare">
  60. <title><tt>tchar::compare()</tt></title>
  61. <code-block lang="C++"><![CDATA[
  62. template<class charT>
  63. int tchar::compare(const charT *str1, const charT *str2);
  64. ]]></code-block>
  65. <p>Сравнивает две строки. Обобщённый <tt>strcmp</tt> / <tt>wcscmp</tt>.</p>
  66. </chapter>
  67. <chapter xml:id="tchar--equal">
  68. <title><tt>tchar::equal()</tt></title>
  69. <code-block lang="C++"><![CDATA[
  70. template<class charT>
  71. bool tchar::equal(const charT *str1, const charT *str2);
  72. ]]></code-block>
  73. <p>Проверяет двестроки на равенство.</p>
  74. <precondition><tt>str1 != nullptr &amp;&amp; str2 != nullptr</tt></precondition>
  75. </chapter>
  76. <chapter xml:id="tchar--copy">
  77. <title><tt>tchar::copy()</tt></title>
  78. <code-block lang="C++"><![CDATA[
  79. template<class charT>
  80. charT *tchar::copy(charT *dest, const charT *src);
  81. ]]></code-block>
  82. <p>Копирует строку. Обобщённый <tt>strcpy</tt> / <tt>wcscpy</tt>.</p>
  83. </chapter>
  84. <chapter xml:id="tchar--move">
  85. <title><tt>tchar::move()</tt></title>
  86. <code-block lang="C++"><![CDATA[
  87. template<class charT>
  88. charT *tchar::move(charT *dest, const charT *src);
  89. ]]></code-block>
  90. <p>Сдвигает строку в памяти (<tt>memmove</tt>).</p>
  91. </chapter>
  92. <chapter xml:id="tchar--concat">
  93. <title><tt>tchar::concat()</tt></title>
  94. <code-block lang="C++"><![CDATA[
  95. template<class charT>
  96. charT *tchar::concat(charT *dest, const charT *src);
  97. ]]></code-block>
  98. <p>Конкатенирует две строки. Обобщённый <tt>strcat</tt> / <tt>wcscat</tt>.</p>
  99. </chapter>
  100. <chapter xml:id="tchar--find">
  101. <title><tt>tchar::find()</tt></title>
  102. <code-block lang="C++"><![CDATA[
  103. namespace tchar {
  104. template<class charT>
  105. const charT *find(const charT *str, charT ch);
  106. template<class charT>
  107. charT *find(charT *str, charT ch);
  108. template<class charT>
  109. const charT *find(const charT *str, const charT *sub);
  110. template<class charT>
  111. charT *find(charT *str, const charT *sub);
  112. }
  113. ]]></code-block>
  114. <p>Ищет первое вхождение символа или подстроки. Обобщённые
  115. <tt>strchr</tt> / <tt>wcschr</tt> / <tt>strstr</tt> / <tt>wcsstr</tt>.</p>
  116. </chapter>
  117. <chapter xml:id="tchar--rfind">
  118. <title><tt>tchar::rfind()</tt></title>
  119. <code-block lang="C++"><![CDATA[
  120. namespace tchar {
  121. template<class charT>
  122. const charT *rfind(const charT *str, charT ch);
  123. template<class charT>
  124. charT *rfind(charT *str, charT ch);
  125. }
  126. ]]></code-block>
  127. <p>Ищет последнее вхождение символа. Обобщённые <tt>strrchr</tt> /
  128. <tt>wcsrchr</tt>.</p>
  129. </chapter>
  130. <chapter xml:id="tchar--find_if">
  131. <title><tt>tchar::find_if()</tt></title>
  132. <code-block lang="C++"><![CDATA[
  133. namespace tchar {
  134. template<class charT, class Pred>
  135. const charT *find_if(const charT *str, Pred pred);
  136. template<class charT, class Pred>
  137. charT *find_if(charT *str, Pred pred);
  138. }
  139. ]]></code-block>
  140. <p>Ищет первое вхождение символа, удовлетворяющего указанному предикату.</p>
  141. </chapter>
  142. <chapter xml:id="tchar--find_if_not">
  143. <title><tt>tchar::find_if_not()</tt></title>
  144. <code-block lang="C++"><![CDATA[
  145. namespace tchar {
  146. template<class charT, class Pred>
  147. const charT *find_if_not(const charT *str, Pred pred);
  148. template<class charT, class Pred>
  149. charT *find_if_not(charT *str, Pred pred);
  150. }
  151. ]]></code-block>
  152. <p>Ищет первое вхождение символа, не удовлетворяющего указанному предикату.</p>
  153. </chapter>
  154. <chapter xml:id="tchar--rfind_if">
  155. <title><tt>tchar::rfind_if()</tt></title>
  156. <code-block lang="C++"><![CDATA[
  157. namespace tchar {
  158. template<class charT, class Pred>
  159. const charT *rfind_if(const charT *str, Pred pred);
  160. template<class charT, class Pred>
  161. charT *rfind_if(charT *str, Pred pred);
  162. }
  163. ]]></code-block>
  164. <p>Ищет последнее вхождение символа, удовлетворяющего указанному предикату.</p>
  165. </chapter>
  166. <chapter xml:id="tchar--rfind_if_not">
  167. <title><tt>tchar::rfind_if_not()</tt></title>
  168. <code-block lang="C++"><![CDATA[
  169. namespace tchar {
  170. template<class charT, class Pred>
  171. const charT *rfind_if_not(const charT *str, Pred pred);
  172. template<class charT, class Pred>
  173. charT *rfind_if_not(charT *str, Pred pred);
  174. }
  175. ]]></code-block>
  176. <p>Ищет последнее вхождение символа, не удовлетворяющего указанному предикату.
  177. </p>
  178. </chapter>
  179. <chapter xml:id="tchar--find_first_of">
  180. <title><tt>tchar::find_first_of()</tt></title>
  181. <code-block lang="C++"><![CDATA[
  182. namespace tchar {
  183. template<class charT>
  184. const charT *find_first_of(const charT *str, const charT *set);
  185. template<class charT>
  186. charT *find_first_of(charT *str, const charT *set);
  187. }
  188. ]]></code-block>
  189. <p>Ищет первое вхождение символа из указанного набора. Обобщённый
  190. <tt>strpbrk</tt> / <tt>wcspbrk</tt>.</p>
  191. </chapter>
  192. <chapter xml:id="tchar--find_first_not_of">
  193. <title><tt>tchar::find_first_not_of()</tt></title>
  194. <code-block lang="C++"><![CDATA[
  195. namespace tchar {
  196. template<class charT>
  197. const charT *find_first_not_of(const charT *str, const charT *set);
  198. template<class charT>
  199. charT *find_first_not_of(charT *str, const charT *set);
  200. }
  201. ]]></code-block>
  202. <p>Ищет первое вхождение символа, отсутствующего в указанном наборе.
  203. Обобщённый <tt>strspn</tt> / <tt>wcsspn</tt>.</p>
  204. </chapter>
  205. <chapter xml:id="tchar--find_last_of">
  206. <title><tt>tchar::find_last_of()</tt></title>
  207. <code-block lang="C++"><![CDATA[
  208. namespace tchar {
  209. template<class charT>
  210. const charT *find_last_of(const charT *str, const charT *set);
  211. template<class charT>
  212. charT *find_last_of(charT *str, const charT *set);
  213. }
  214. ]]></code-block>
  215. <p>Ищет последнее вхождение символа из указанного набора.</p>
  216. </chapter>
  217. <chapter xml:id="tchar--find_last_not_of">
  218. <title><tt>tchar::find_last_not_of()</tt></title>
  219. <code-block lang="C++"><![CDATA[
  220. namespace tchar {
  221. template<class charT>
  222. const charT *find_last_not_of(const charT *str, const charT *set);
  223. template<class charT>
  224. charT *find_last_not_of(charT *str, const charT *set);
  225. }
  226. ]]></code-block>
  227. <p>Ищет последнее вхождение символа, отсутсвующего в указанном наборе.</p>
  228. </chapter>
  229. <chapter xml:id="tchar--skip">
  230. <title><tt>tchar::skip()</tt></title>
  231. <code-block lang="C++"><![CDATA[
  232. namespace tchar {
  233. template<class charT>
  234. const charT *skip(const charT *str, charT ch);
  235. template<class charT>
  236. charT *skip(charT *str, charT ch);
  237. }
  238. ]]></code-block>
  239. <p>Пропускает все вхождения указанного символа и возвращает указатель.
  240. Если другие символы в строке отсутствуют, возвращает указатель на
  241. NULL-терминатор.</p>
  242. </chapter>
  243. </chapter>