utf16.writer.h.xml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <chapter xml:id="utf16.writer.h">
  2. <title><tt>__vic/utf16/writer.h</tt></title>
  3. <chapter xml:id="utf16--writer">
  4. <title><tt>utf16::writer</tt></title>
  5. <code-block lang="C++"><![CDATA[
  6. template<class CodeUnitWriter>
  7. class utf16::writer
  8. {
  9. public:
  10. using code_unit_writer_type = CodeUnitWriter;
  11. CodeUnitWriter &get_code_unit_writer();
  12. const CodeUnitWriter &get_code_unit_writer() const;
  13. template<class... Args>
  14. explicit writer(Args&&... args); // since C++11
  15. writer(); // C++98 only
  16. explicit writer(CodeUnitWriter w); // C++98 only
  17. void write(unicode_t cp);
  18. };
  19. template<class CodeUnitWriter>
  20. utf16::writer<CodeUnitWriter> utf16::make_writer(CodeUnitWriter w);
  21. ]]></code-block>
  22. <p>Пишет UTF-16 code points в последовательность 2-байтовых
  23. <xref to="utf16--code_unit_t"/>. Для вывода code units используется
  24. <tt>CodeUnitWriter</tt>, моделирующий <tt>Writer&lt;utf16::code_unit_t></tt>
  25. (см. <xref to="writers"/>).</p>
  26. <section><title>Члены класса</title>
  27. <synopsis>
  28. <prototype>CodeUnitWriter &amp;get_code_unit_writer()</prototype>
  29. <prototype>const CodeUnitWriter &amp;get_code_unit_writer() const</prototype>
  30. <p>Возвращает ссылку на используемый code unit writer.</p>
  31. </synopsis>
  32. <synopsis>
  33. <prototype>template&lt;class... Args>
  34. explicit writer(Args&amp;&amp;... args) <badge>C++11</badge></prototype>
  35. <p>Передаёт все параметры в используемый code unit writer.</p>
  36. </synopsis>
  37. <synopsis>
  38. <prototype>writer() <badge>C++98 only</badge></prototype>
  39. <prototype>explicit writer(CodeUnitWriter r) <badge>C++98 only</badge></prototype>
  40. <p>Конструкторы для режима C++98.</p>
  41. </synopsis>
  42. <synopsis>
  43. <prototype>void write(unicode_t cp)</prototype>
  44. <p>Выводит указанный code point согласно правилам кодирования UTF-16.
  45. Для записи отдельных code units ипользуется <tt>CodeUnitWriter::write()</tt>.
  46. </p>
  47. </synopsis>
  48. </section>
  49. <section><title>Свободные функции</title>
  50. <synopsis>
  51. <prototype>template&lt;class CodeUnitWriter>
  52. utf16::writer&lt;CodeUnitWriter> utf16::make_writer(CodeUnitWriter w)</prototype>
  53. <p>Создаёт UTF-16 writer используя указанный <tt>CodeUnitWriter</tt>.</p>
  54. </synopsis>
  55. </section>
  56. <section><title>Пример</title>
  57. <code-block lang="C++"><![CDATA[
  58. #include<__vic/utf16/writer.h>
  59. #include<__vic/writers/string.h>
  60. #include<string>
  61. #include<vector>
  62. std::u16string encode_utf16(const std::vector<__vic::unicode_t> &code_points)
  63. {
  64. std::u16string utf16_res;
  65. __vic::utf16::writer<__vic::basic_string_writer<char16_t>> w(utf16_res);
  66. for(auto cp : code_points) w.write(cp);
  67. return utf16_res;
  68. }
  69. ]]></code-block>
  70. </section>
  71. </chapter>
  72. </chapter>