• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
3<html>
4<head>
5  <meta http-equiv="Content-Language" content="en-us">
6  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
7  <link rel="stylesheet" type="text/css" href="../../boost.css">
8
9  <title>Writing Documentation for Boost - Documentation Structure</title>
10</head>
11
12<body link="#0000FF" vlink="#800080">
13  <table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
14  "header">
15    <tr>
16      <td valign="top" width="300">
17        <h3><a href="index.html"><img height="86" width="277" alt="C++ Boost"
18        src="../../boost.png" border="0"></a></h3>
19      </td>
20
21      <td valign="top">
22        <h1 align="center">Writing Documentation for Boost</h1>
23
24        <h2 align="center">Documentation Structure</h2>
25      </td>
26    </tr>
27  </table>
28  <hr>
29
30  <dl class="page-index">
31    <dt><a href="#introduction">Introduction</a></dt>
32
33    <dt><a href="#standards-conforming">Standards Conforming
34    Documentation</a></dt>
35
36    <dd>
37      <dl class="page-index">
38        <dt><a href="#elements">Document elements</a></dt>
39
40        <dd>
41          <dl class="page-index">
42            <dt><a href="#summary">Summary</a></dt>
43
44            <dt><a href="#requirements">Requirements</a></dt>
45
46            <dt><a href="#detailed-specs">Detailed specifications</a></dt>
47
48            <dt><a href="#ref-cpp">References to the Standard C++
49            library</a></dt>
50
51            <dt><a href="#ref-c">References to the Standard C
52            library</a></dt>
53          </dl>
54        </dd>
55
56        <dt><a href="#other">Other conventions</a></dt>
57
58        <dd>
59          <dl class="page-index">
60            <dt><a href="#type-descs">Type descriptions</a></dt>
61          </dl>
62        </dd>
63      </dl>
64    </dd>
65
66    <dt><a href="#more">More Information</a></dt>
67
68    <dd>
69      <dl class="page-index">
70        <dt><a href="#function-semantic-explanations">Function semantic
71        element explanations</a></dt>
72
73        <dd>
74          <dl class="page-index">
75            <dt><a href="#requires">Requires</a></dt>
76
77            <dt><a href="#effects">Effects</a></dt>
78
79            <dt><a href="#postconditions">Postconditions</a></dt>
80
81            <dt><a href="#returns">Returns</a></dt>
82
83            <dt><a href="#throws">Throws</a></dt>
84
85            <dt><a href="#complexity">Complexity</a></dt>
86
87            <dt><a href="#rationale">Rationale</a></dt>
88          </dl>
89        </dd>
90      </dl>
91    </dd>
92
93    <dt><a href="#web">Web Reference Documentation</a></dt>
94
95    <dt><a href="#footnotes">Footnotes</a></dt>
96  </dl>
97
98  <h2><a name="introduction" id="introduction">Introduction</a></h2>
99
100  <p>Boost does not require any specific documentation structure.
101  However, there are some important considerations that
102  influence content and structure. For example, many Boost
103  libraries wind up being proposed for inclusion in the C++
104  Standard, so writing them initially with text suitable for
105  inclusion in the Standard may be helpful. Also, Boost library
106  documentation is often accessed via the World Wide Web,
107  including via search engines, so context is often important
108  for every page. Finally, Boost libraries should provide
109  additional documentation, such as introductory, tutorial,
110  example, and rationale content. With those things in mind, we
111  suggest the following guidelines for Boost library
112  documentation.</p>
113
114  <h2><a name="standards-conforming" id="standards-conforming">Standards
115  Conforming</a> Documentation</h2>
116
117  <p>The documentation structure required for the C++ Standard is
118  an effective way to describe the technical specifications for
119  a library.  Although terse, that format is familiar to many
120  Boost users and is far more precise than most ad hoc formats.
121  The following description is based upon &sect;17.3 of the
122  Standard.  (Note that while final Standard proposals must
123  include full standardese wording, which the committee will
124  not do for you, that level of detail is not expected of Boost
125  library documentation.)</p>
126
127  <h3><a name="elements" id="elements">Document elements</a></h3>
128
129  <p>Each document contains the following elements, as applicable<a class=
130  "footnote" href="#footnote1" id="footnote1-location">(1)</a>:</p>
131
132  <ul>
133    <li><a href="#summary">Summary</a></li>
134
135    <li><a href="#requirements">Requirements</a></li>
136
137    <li><a href="#detailed-specs">Detailed specifications</a></li>
138
139    <li><a href="#ref-cpp">References to the Standard C++ library</a></li>
140
141    <li><a href="#ref-c">References to the Standard C library</a></li>
142  </ul>
143
144  <h4><a name="summary" id="summary">Summary</a></h4>
145
146  <p>The Summary provides a synopsis of the category, and introduces the
147  first-level subclauses. Each subclause also provides a summary, listing the
148  headers specified in the subclause and the library entities provided in
149  each header.</p>
150
151  <p>Paragraphs labeled "Note(s):" or "Example(s):" are informative, other
152  paragraphs are normative.</p>
153
154  <p>The summary and the detailed specifications are presented in the
155  order:</p>
156
157  <ul>
158    <li>Macros</li>
159
160    <li>Values</li>
161
162    <li>Types</li>
163
164    <li>Classes</li>
165
166    <li>Functions</li>
167
168    <li>Objects</li>
169  </ul>
170
171  <h4><a name="requirements" id="requirements">Requirements</a></h4>
172
173  <p>The library can be extended by a C++ program. Each clause, as
174  applicable, describes the requirements that such extensions must meet. Such
175  extensions are generally one of the following:</p>
176
177  <ul>
178    <li>Template arguments</li>
179
180    <li>Derived classes</li>
181
182    <li>Containers, iterators, and/or algorithms that meet an interface
183    convention</li>
184  </ul>
185
186  <p>Interface convention requirements are stated as generally as possible.
187  Instead of stating "<code>class X</code> has to define a member function
188  <code>operator++()</code>," the interface requires "for any object
189  <code>x</code> of <code>class X</code>, <code>++x</code> is defined." That
190  is, whether the operator is a member is unspecified.</p>
191
192  <p>Requirements are stated in terms of well-defined expressions, which
193  define valid terms of the types that satisfy the requirements. For every
194  set of requirements there is a table that specifies an initial set of the
195  valid expressions and their semantics. Any generic algorithm that uses the
196  requirements is described in terms of the valid expressions for its formal
197  type parameters.</p>
198
199  <p>Template argument requirements are sometimes referenced by name.</p>
200
201  <p>In some cases the semantic requirements are presented as C++ code. Such
202  code is intended as a specification of equivalance of a construct to
203  another construct, not necessarily as the way the construct must be
204  implemented.<a class="footnote" href="#footnote2" id="footnote2-location">(2)</a></p>
205
206  <h4><a name="detailed-specs" id="detailed-specs">Detailed
207  specification</a></h4>
208
209  <p>The detailed specifications each contain the following elements:</p>
210
211  <ul>
212    <li>Name and brief description</li>
213
214    <li>Synopsis (class definition or function prototype, as
215    appropriate)</li>
216
217    <li>Restrictions on template arguments, if any</li>
218
219    <li>Description of class invariants</li>
220
221    <li>Description of function semantics</li>
222  </ul>
223
224  <p>Descriptions of class member functions follow the order (as
225  appropriate)<a class="footnote" href="#footnote3" id="footnote3-location">(3)</a>:</p>
226
227  <ul>
228    <li>Constructor(s) and destructor</li>
229
230    <li>Copying and assignment functions</li>
231
232    <li>Comparison functions</li>
233
234    <li>Modifier functions</li>
235
236    <li>Observer functions</li>
237
238    <li>Operators and other non-member functions</li>
239  </ul>
240
241  <p>Descriptions of function semantics contain the following <a name=
242  "function-elements" id="function-elements">elements</a> (as
243  appropriate)<a class="footnote" href="#footnote4" id="footnote4-location">(4):</a></p>
244
245  <dl class="function-semantics">
246    <dt><b><a href="#requires">Requires:</a></b> the preconditions for
247    calling the function</dt>
248
249    <dt><b><a href="#effects">Effects:</a></b> the actions performed by the
250    function</dt>
251
252    <dt><b><a href="#postconditions">Postconditions:</a></b> the observable
253    results established by the function</dt>
254
255    <dt><b><a href="#returns">Returns:</a></b> a description of the value(s)
256    returned by the function</dt>
257
258    <dt><b><a href="#throws">Throws:</a></b> any exceptions thrown by the
259    function, and the conditions that would cause the exception</dt>
260
261    <dt><b><a href="#complexity">Complexity:</a></b> the time and/or space
262    complexity of the function</dt>
263
264    <dt><b><a href="#rationale">Rationale:</a></b> the rationale for the
265    function's design or existence</dt>
266  </dl>
267
268  <p>Complexity requirements specified in the library clauses are upper
269  bounds, and implementations that provide better complexity guarantees
270  satisfy the requirements.</p>
271
272  <h4><a name="ref-cpp" id="ref-cpp">References to the C++ Standard
273  library</a></h4>
274
275  <h4><a name="ref-c" id="ref-c">References to the C Standard
276  library</a></h4>
277
278  <h3><a name="other" id="other">Other conventions</a></h3>
279
280  <p>These conventions are for describing implementation-defined types, and
281  member functions.</p>
282
283  <h4><a name="type-descs" id="type-descs">Type descriptions</a></h4>
284
285  <p>The Requirements subclauses may describe names that are used to specify
286  constraints on template arguments.</p>
287
288  <h2><a name="more" id="more">More Information</a></h2>
289
290  <h3><a name="function-semantic-explanations" id=
291  "function-semantic-explanations">Function semantic element
292  explanations</a></h3>
293
294  <p>The function semantic element description <a href=
295  "#function-elements">above</a> is taken directly from the C++ standard, and
296  is quite terse. Here is a more detailed explanation of each of the
297  elements.</p>
298
299  <p>Note the use of the <code>&lt;code&gt; ... &lt;/code&gt;</code> font tag
300  to distinguish actual C++ usage from English prose.</p>
301
302  <h4><a name="requires" id="requires">Requires</a></h4>
303
304  <p>Preconditions for calling the function, typically expressed as
305  predicates. The most common preconditions are requirements on the value of
306  arguments, often in the form of C++ expressions. For example,</p>
307  <pre>
308
309<code>void limit( int * p, int min, int max );</code>
310</pre>
311
312  <dl class="function-semantics">
313    <dt><b>Requires:</b> <code>p != 0 &amp;&amp; min &lt;= max</code></dt>
314  </dl>
315
316  <p>Requirements already enforced by the C++ language rules (such as the
317  type of arguments) are not repeated in Requires paragraphs.</p>
318
319  <h4><a name="effects" id="effects">Effects</a></h4>
320
321  <p>The actions performed by the function, described either in prose or in
322  C++. A description in prose is often less limiting on implementors, but is
323  often less precise than C++ code.</p>
324
325  <p>If an effect is specified in one of the other elements, particularly
326  <i>postconditions</i>, <i>returns</i>, or <i>throws</i>, it is not also
327  described in the <i>effects</i> paragraph. Having only a single description
328  ensures that there is one and only one specification, and thus eliminates
329  the risk of divergence.</p>
330
331  <h4><a name="postconditions" id="postconditions">Postconditions</a></h4>
332
333  <p>The observable results of the function, such as the value of variables.
334  Postconditions are often expressed as predicates that are true after the
335  function completes, in the form of C++ expressions. For example:</p>
336  <pre>
337
338void make_zero_if_negative( int &amp; x );
339</pre>
340
341  <dl class="function-semantics">
342    <dt><b>Postcondition:</b> <code>x &gt;= 0</code></dt>
343  </dl>
344
345  <h4><a name="returns" id="returns">Returns</a></h4>
346
347  <p>The value returned by the function, usually in the form of a C++
348  expression. For example:</p>
349  <pre>
350int sum( int x, int y );
351</pre>
352
353  <dl class="function-semantics">
354    <dt><b>Returns:</b> <code>x + y</code></dt>
355  </dl>
356
357  <p>Only specify the return value; the type is already dictated by C++
358  language rules.</p>
359
360  <h4><a name="throws" id="throws">Throws</a></h4>
361
362  <p>Specify both the type of exception thrown, and the condition that causes
363  the exception to be thrown. For example, the <code>std::basic_string</code>
364  class specifies:</p>
365  <pre>
366
367void resize(size_type n, charT c);
368</pre>
369
370  <dl class="function-semantics">
371    <dt><b>Throws:</b> <code>length_error</code> if <code>n &gt;
372    max_size()</code>.</dt>
373  </dl>
374
375  <h4><a name="complexity" id="complexity">Complexity</a></h4>
376
377  <p>Specifying the time and/or space complexity of a function is often not
378  desirable because it over-constrains implementors and is hard to specify
379  correctly. Complexity is thus often best left as a quality of
380  implementation issue.</p>
381
382  <p>A library component, however, can become effectively non-portable if
383  there is wide variation in performance between conforming implementations.
384  Containers are a prime example. In these cases it becomes worthwhile to
385  specify complexity.</p>
386
387  <p>Complexity is often specified in generalized <a href=
388  "http://hissa.nist.gov/dads/HTML/bigOnotation.html">"Big-O"
389  notation</a>.</p>
390
391  <h4><a name="rationale" id="rationale">Rationale</a></h4>
392
393  <p>Specifying the rationale for a function's design or existence can often
394  give users a lot of insight into why a library is designed the way it is.
395  More importantly, it can help prevent "fixing" something that wasn't really
396  broken as the library matures.</p>
397
398  <h2 id="web">Web Reference Documentation</h2>
399
400  <p>Boost library documentation is often accessed via the World
401  Web. Using search engines, a page deep in the reference
402  content could be viewed without any further context.
403  Therefore, it is helpful to add extra context, such as the
404  following, to each page:</p>
405
406  <ul>
407  <li>Describe the enclosing namespace or use fully scoped
408    identifiers.
409  <li>Document required headers for each type or function.
410  <li>Link to relevant tutorial information.
411  <li>Link to related example code.
412  <li>Include the library name.
413  <li>Include navigation elements to the beginning of the
414    documentation.
415  </ul>
416
417  <p>It is also useful to consider the effectiveness of a
418  description in search engines. Terse or cryptic descriptions
419  are less likely to help the curious find a relevant function
420  or type.</p>
421
422  <h2><a name="footnotes" id="footnotes">Footnotes</a></h2>
423
424  <dl>
425    <dt><a class="footnote" id="footnote1" href="#footnote1-location">(1)</a> To save
426    space, items that do not apply to a clause are omitted. For example, if a
427    clause does not specify any requirements, there will be no "Requirements"
428    subclause.</dt>
429
430    <dt><a class="footnote" id="footnote2" href="#footnote2-location">(2)</a> Although
431    in some cases the code is unambiguously the optimum implementation.</dt>
432
433    <dt><a class="footnote" id="footnote3" href="#footnote3-location">(3)</a> To save
434    space, items that do not apply to a class are omitted. For example, if a
435    class does not specify any comparison functions, there will be no
436    "Comparison functions" subclause.</dt>
437
438    <dt><a class="footnote" id="footnote4" href="#footnote4-location">(4)</a> To save
439    space, items that do not apply to a function are omitted. For example, if
440    a function does not specify any precondition, there will be no "Requires"
441    paragraph.</dt>
442  </dl>
443  <hr>
444
445  <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
446  "../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional"
447  height="31" width="88"></a></p>
448
449  <p>Revised
450  <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->04
451  December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p>
452
453  <p><i>Copyright &copy; 2001 <a href=
454  "mailto:williamkempf@hotmail.com">William E. Kempf</a></i></p>
455
456  <p><i>Distributed under the Boost Software License, Version 1.0. (See
457  accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
458  copy at <a href=
459  "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
460</body>
461</html>
462