writers.xml 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <chapter xml:id="writers">
  2. <title><tt>__vic/writers/</tt></title>
  3. <chapter xml:id="writer-concept">
  4. <title><tt>Writer</tt> concept</title>
  5. <code-block lang="C++"><![CDATA[
  6. template<class ElementT>
  7. class ]]><nt>Writer</nt><![CDATA[
  8. {
  9. public:
  10. Writer(Writer &&o); or Writer(const Writer &o);
  11. void write(ElementT v); // throws on errors
  12. };
  13. ]]></code-block>
  14. <p>Concept, используемый алгоритмами библиотеки для поэлементной записи
  15. логической последовательности элементов типа <tt>ElementT</tt>. Является
  16. обобщением и переработкой concept'а <tt>OutputIterator</tt>. В частности,
  17. он лучше обрабатывает потоки ввода/вывода и другие последовательности, в
  18. которых <tt>end</tt>-итератор не имеет смысла или его получение дорого. В то
  19. же время, традиционные выходные итераторы являются частным просто случаем и
  20. полностью поддерживаются адаптером <tt>__vic::iterator_writer</tt>.</p>
  21. <p>В случаях, когда конкретный класс удовлетворяет требованиям данного concept
  22. для некоторого <tt>ElementT = T</tt>, говорят, что он <b>моделирует</b> concept
  23. <tt>Writer&lt;T></tt>.</p>
  24. <p>Каждый экземпляр класса должен быть move- или copy-constructible.</p>
  25. <section><title>Члены класса</title>
  26. <synopsis>
  27. <prototype>void write(ElementT v)</prototype>
  28. <p>Записывает элемент или бросает исключение в случае ошибки.</p>
  29. </synopsis>
  30. </section>
  31. </chapter>
  32. <chapter xml:id="null_writer">
  33. <title><tt>null_writer</tt></title>
  34. <code-block lang="C++"><![CDATA[
  35. #include<__vic/writers/null.h>
  36. class null_writer
  37. {
  38. public:
  39. template<class T> void write(T v) {}
  40. };
  41. null_writer make_null_writer();
  42. ]]></code-block>
  43. <p>Фиктивный writer, принимающий любые значения и никуда их не выводящий (как
  44. <tt>/dev/null</tt> в UNIX).</p>
  45. </chapter>
  46. <chapter xml:id="push_back_writer">
  47. <title><tt>push_back_writer</tt></title>
  48. <code-block lang="C++"><![CDATA[
  49. #include<__vic/writers/push_back.h>
  50. template<class Cont, class T = typename Cont::value_type>
  51. class push_back_writer
  52. {
  53. public:
  54. explicit push_back_writer(Cont &c);
  55. void write(T v) { c->push_back(v); }
  56. };
  57. template<class Cont>
  58. push_back_writer<Cont> make_push_back_writer(Cont &c);
  59. template<class T, class Cont>
  60. push_back_writer<Cont,T> make_push_back_writer_for(Cont &c);
  61. ]]></code-block>
  62. <p>Адаптер. Использует функцию-член <tt>push_back()</tt> для записи элементов.
  63. Может быть создан с помощью конструктора или одной из функций <tt>make_...</tt>.
  64. </p>
  65. </chapter>
  66. <chapter xml:id="iterator_writer">
  67. <title><tt>iterator_writer</tt></title>
  68. <code-block lang="C++"><![CDATA[
  69. #include<__vic/writers/iterator.h>
  70. template<class OutputIterator,
  71. class T = typename std::iterator_traits<OutputIterator>::value_type>
  72. class iterator_writer
  73. {
  74. public:
  75. explicit iterator_writer(OutputIterator it);
  76. void write(T v);
  77. };
  78. template<class OutputIterator>
  79. iterator_writer<OutputIterator> make_iterator_writer(OutputIterator it);
  80. template<class T, class OutputIterator>
  81. iterator_writer<OutputIterator,T> make_iterator_writer_for(OutputIterator it);
  82. ]]></code-block>
  83. <p>Записывает элементы в выходной итератор. Может быть создан с помощью
  84. конструктора или одной из функций <tt>make_...</tt>.</p>
  85. </chapter>
  86. <chapter xml:id="string_writer">
  87. <title><tt>string_writer</tt></title>
  88. <code-block lang="C++"><![CDATA[
  89. #include<__vic/writers/string.h>
  90. template<
  91. class charT,
  92. class Tr = std::char_traits<charT>,
  93. class Al = std::allocator<charT>
  94. >
  95. class basic_string_writer
  96. {
  97. public:
  98. explicit basic_string_writer(std::basic_string<charT,Tr,Al> &s);
  99. void write(charT ch);
  100. };
  101. using string_writer = basic_string_writer<char>;
  102. template<class charT, class Tr, class Al>
  103. basic_string_writer<charT,Tr,Al>
  104. make_string_writer(std::basic_string<charT,Tr,Al> &s);
  105. ]]></code-block>
  106. <p>Адаптер для <tt>std::basic_string</tt>. Может быть создан с помощью
  107. конструктора или функции <tt>make_...</tt>.</p>
  108. </chapter>
  109. <chapter xml:id="cstream_writer">
  110. <title><tt>cstream_writer</tt></title>
  111. <code-block lang="C++"><![CDATA[
  112. #include<__vic/writers/cstream.h>
  113. class cstream_writer
  114. {
  115. public:
  116. explicit cstream_writer(std::FILE *fp);
  117. void write(char ch) { __vic::write(fp, ch); }
  118. };
  119. cstream_writer make_cstream_writer(std::FILE *fp);
  120. ]]></code-block>
  121. <p>Моделирует <tt>Writer&lt;char></tt> для <tt>std::FILE</tt>. Может быть
  122. создан с помощью конструктора или функции <tt>make_...</tt>.</p>
  123. </chapter>
  124. </chapter>