added all templates

This commit is contained in:
Peter Turcan
2023-04-21 16:05:30 -07:00
committed by Alan de Freitas
parent f75b3ef819
commit 5a6d944990
14 changed files with 819 additions and 37 deletions

View File

@@ -1,2 +1,14 @@
* New content
xref:intro.adoc[Introduction to becoming a Boost Contributor]
* New Content
* xref:intro.adoc[Introduction to becoming a Boost Contributor]
* Legacy Content
** xref:documentation-structure.adoc[Writing Documentation for Boost - Documentation Structure]
** xref:index-file-template.adoc[Index File Template]
** Templates
*** xref:templates/acknowledgements-template.adoc[Acknowledgments Template]
*** xref:templates/bibliography-template.adoc[Bibliography Template]
*** xref:templates/configuration-template.adoc[Configuration Template]
*** xref:templates/definitions-template.adoc[Definitions Template]
*** xref:templates/faq-template.adoc[FAQ Template]
*** xref:templates/header-template.adoc[Header Template]
*** xref:templates/overview-template.adoc[Overview Template]
*** xref:templates/rationale-template.adoc[Rationale Template]

View File

@@ -0,0 +1,300 @@
= Writing Documentation for Boost - Documentation Structure
== [#introduction]#Introduction#
Boost does not require any specific documentation structure. However,
there are some important considerations that influence content and
structure. For example, many Boost libraries wind up being proposed for
inclusion in the C++ Standard, so writing them initially with text
suitable for inclusion in the Standard may be helpful. Also, Boost
library documentation is often accessed via the World Wide Web,
including via search engines, so context is often important for every
page. Finally, Boost libraries should provide additional documentation,
such as introductory, tutorial, example, and rationale content. With
those things in mind, we suggest the following guidelines for Boost
library documentation.
== [#standards-conforming]#Standards Conforming# Documentation
The documentation structure required for the C++ Standard is an
effective way to describe the technical specifications for a library.
Although terse, that format is familiar to many Boost users and is far
more precise than most ad hoc formats. The following description is
based upon §17.3 of the Standard. (Note that while final Standard
proposals must include full standardese wording, which the committee
will not do for you, that level of detail is not expected of Boost
library documentation.)
=== [#elements]#Document elements#
[#footnote1-location]
Each document contains the following elements, as
applicable. link:#footnote1[(1)]:
* link:#summary[Summary]
* link:#requirements[Requirements]
* link:#detailed-specs[Detailed specifications]
* link:#ref-cpp[References to the Standard C++ library]
* link:#ref-c[References to the Standard C library]
==== [#summary]#Summary#
The Summary provides a synopsis of the category, and introduces the
first-level subclauses. Each subclause also provides a summary, listing
the headers specified in the subclause and the library entities provided
in each header.
Paragraphs labeled "Note(s):" or "Example(s):" are informative, other
paragraphs are normative.
The summary and the detailed specifications are presented in the order:
* Macros
* Values
* Types
* Classes
* Functions
* Objects
==== [#requirements]#Requirements#
The library can be extended by a C++ program. Each clause, as
applicable, describes the requirements that such extensions must meet.
Such extensions are generally one of the following:
* Template arguments
* Derived classes
* Containers, iterators, and/or algorithms that meet an interface
convention
Interface convention requirements are stated as generally as possible.
Instead of stating "`class X` has to define a member function
`operator++()`," the interface requires "for any object `x` of
`class X`, `++x` is defined." That is, whether the operator is a member
is unspecified.
Requirements are stated in terms of well-defined expressions, which
define valid terms of the types that satisfy the requirements. For every
set of requirements there is a table that specifies an initial set of
the valid expressions and their semantics. Any generic algorithm that
uses the requirements is described in terms of the valid expressions for
its formal type parameters.
Template argument requirements are sometimes referenced by name.
[#footnote2-location]
In some cases the semantic requirements are presented as C++ code. Such
code is intended as a specification of equivalence of a construct to
another construct, not necessarily as the way the construct must be
implemented.link:#footnote2[(2)]
==== [#detailed-specs]#Detailed specification#
The detailed specifications each contain the following elements:
* Name and brief description
* Synopsis (class definition or function prototype, as appropriate)
* Restrictions on template arguments, if any
* Description of class invariants
* Description of function semantics
[#footnote3-location]
Descriptions of class member functions follow the order (as
appropriate) link:#footnote3[(3)]:
* Constructor(s) and destructor
* Copying and assignment functions
* Comparison functions
* Modifier functions
* Observer functions
* Operators and other non-member functions
[#footnote4-location]
Descriptions of function semantics contain the following
elements (as appropriate) link:#footnote4[(4):]
*link:#requires[Requires:]* the preconditions for calling the function
*link:#effects[Effects:]* the actions performed by the function
*link:#postconditions[Postconditions:]* the observable results
established by the function
*link:#returns[Returns:]* a description of the value(s) returned by the
function
*link:#throws[Throws:]* any exceptions thrown by the function, and the
conditions that would cause the exception
*link:#complexity[Complexity:]* the time and/or space complexity of the
function
*link:#rationale[Rationale:]* the rationale for the function's design or
existence
Complexity requirements specified in the library clauses are upper
bounds, and implementations that provide better complexity guarantees
satisfy the requirements.
==== [#ref-cpp]#References to the C++ Standard library#
==== [#ref-c]#References to the C Standard library#
=== [#other]#Other conventions#
These conventions are for describing implementation-defined types, and
member functions.
==== [#type-descs]#Type descriptions#
The Requirements subclauses may describe names that are used to specify
constraints on template arguments.
== [#more]#More Information#
=== [#function-semantic-explanations]#Function semantic element explanations#
The function semantic element description above is taken directly from the C++ standard, and is quite terse. Here is a
more detailed explanation of each of the elements.
Note the use of the `<code> ... </code>` font tag to distinguish actual
C++ usage from English prose.
==== [#requires]#Requires#
Preconditions for calling the function, typically expressed as
predicates. The most common preconditions are requirements on the value
of arguments, often in the form of C++ expressions. For example,
....
void limit( int * p, int min, int max );
....
*Requires:* `p != 0 && min <= max`
Requirements already enforced by the C++ language rules (such as the
type of arguments) are not repeated in Requires paragraphs.
==== [#effects]#Effects#
The actions performed by the function, described either in prose or in
C++. A description in prose is often less limiting on implementors, but
is often less precise than C++ code.
If an effect is specified in one of the other elements, particularly
_postconditions_, _returns_, or _throws_, it is not also described in
the _effects_ paragraph. Having only a single description ensures that
there is one and only one specification, and thus eliminates the risk of
divergence.
==== [#postconditions]#Postconditions#
The observable results of the function, such as the value of variables.
Postconditions are often expressed as predicates that are true after the
function completes, in the form of C++ expressions. For example:
....
void make_zero_if_negative( int & x );
....
*Postcondition:* `x >= 0`
==== [#returns]#Returns#
The value returned by the function, usually in the form of a C++
expression. For example:
....
int sum( int x, int y );
....
*Returns:* `x + y`
Only specify the return value; the type is already dictated by C++
language rules.
==== [#throws]#Throws#
Specify both the type of exception thrown, and the condition that causes
the exception to be thrown. For example, the `std::basic_string` class
specifies:
....
void resize(size_type n, charT c);
....
*Throws:* `length_error` if `n > max_size()`.
==== [#complexity]#Complexity#
Specifying the time and/or space complexity of a function is often not
desirable because it over-constrains implementors and is hard to specify
correctly. Complexity is thus often best left as a quality of
implementation issue.
A library component, however, can become effectively non-portable if
there is wide variation in performance between conforming
implementations. Containers are a prime example. In these cases it
becomes worthwhile to specify complexity.
Complexity is often specified in generalized
https://web.mit.edu/16.070/www/lecture/big_o.pdf["Big-O" notation].
==== [#rationale]#Rationale#
Specifying the rationale for a function's design or existence can often
give users a lot of insight into why a library is designed the way it
is. More importantly, it can help prevent "fixing" something that wasn't
really broken as the library matures.
[[web]]
== Web Reference Documentation
Boost library documentation is often accessed via the World Web. Using
search engines, a page deep in the reference content could be viewed
without any further context. Therefore, it is helpful to add extra
context, such as the following, to each page:
* Describe the enclosing namespace or use fully scoped identifiers.
* Document required headers for each type or function.
* Link to relevant tutorial information.
* Link to related example code.
* Include the library name.
* Include navigation elements to the beginning of the documentation.
It is also useful to consider the effectiveness of a description in
search engines. Terse or cryptic descriptions are less likely to help
the curious find a relevant function or type.
== [#footnotes]#Footnotes#
[#footnote1]
link:#footnote1-location[(1)] To save space, items that do not apply to
a clause are omitted. For example, if a clause does not specify any
requirements, there will be no "Requirements" subclause.
[#footnote2]
link:#footnote2-location[(2)] Although in some cases the code is
unambiguously the optimum implementation.
[#footnote3]
link:#footnote3-location[(3)] To save space, items that do not apply to
a class are omitted. For example, if a class does not specify any
comparison functions, there will be no "Comparison functions" subclause.
[#footnote4]
link:#footnote4-location[(4)] To save space, items that do not apply to
a function are omitted. For example, if a function does not specify any
precondition, there will be no "Requires" paragraph.
'''''
Revised 04 December, 2006
_Copyright © 2001 mailto:williamkempf@hotmail.com[William E. Kempf]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,31 @@
= \{\{Library}} Index File Template
== Contents
xref:templates/overview-template.adoc[Overview]
=== Reference
xref:templates/header-template.adoc[\{\{header}}]
xref:templates/configuration-template.adoc[Configuration Information]
xref:templates/rationale-template.adoc[Rationale]
xref:templates/definitions-template.adoc[Definitions]
xref:templates/faq-template.adoc[Frequently Asked Questions (FAQs)]
xref:templates/bibliography-template.adoc[Bibliography]
xref:templates/acknowledgements-template.adoc[Acknowledgements]
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,17 @@
= Acknowledgements Template
== \{\{Library}}
=== Acknowledgments
'''''
\{\{text}}
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,17 @@
= Bibliography Template
== \{\{Library}}
=== Bibliography
'''''
\{\{bibliographical information}}
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,54 @@
= Configuration Template
== \{\{Library}} Configuration
== Introduction
\{\{library}} uses several configuration macros in
http://www.boost.org/libs/config/config.htm[<boost/config.hpp>], as well as configuration macros meant to be supplied by the application. These
macros are documented here.
== Application Defined Macros
These are the macros that may be defined by an application using
\{\{library}}.
[cols=",",]
|===
|*Macro* |*Meaning*
|\{\{macro}} |\{\{meaning}}
|\{\{macro}} |\{\{meaning}}
|===
== Public Library Defined Macros
These macros are defined by \{\{library}} but are expected to be used by
application code.
[cols=",",]
|===
|*Macro* |*Meaning*
|\{\{macro}} |\{\{meaning}}
|\{\{macro}} |\{\{meaning}}
|===
== Library Defined Implementation Macros
These macros are defined by \{\{library}} and are implementation details
of interest only to implementers.
[cols=",",]
|===
|*Macro* |*Meaning*
|\{\{macro}} |\{\{meaning}}
|\{\{macro}} |\{\{meaning}}
|===
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,20 @@
= Definitions Template
== Introduction
\{\{Introductory text}}
== Definitions
[#definition-term1]*\{\{term}}:* \{\{definition}}
[#definition-term2]*\{\{term}}:* \{\{definition}}
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,22 @@
= FAQ Template
== \{\{Library}} Frequently Asked Questions (FAQs)
'''''
== \{\{question1}}
\{\{answer}}
== \{\{question2}}
\{\{answer}}
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,220 @@
= Header Template
== \{\{library}} Header <\{\{header}}>
== Introduction
\{\{Introductory text}}
== Macros
[#macro-spec]##\{\{Macro specifications}}
== Values
[#value-spec]##\{\{Value specifications}}
== Types
[#type-spec]##\{\{Type specifications}}
== Classes
=== Class `{{class name}}`
\{\{class overview text}}
==== Class `{{class name}}` synopsis
....
namespace boost
{
class {{class name}}
{
};
};
....
==== Class `{{class name}}` constructors and destructor
....
{{constructor}}
....
*Requires:* \{\{text}}
*Effects:* \{\{text}}
*Postconditions:* \{\{text}}
*Returns:* \{\{text}}
*Throws:* \{\{text}}
*Complexity:* \{\{text}}
*Note:* \{\{text}}
*Danger:* \{\{text}}
*Rationale:* \{\{text}}
....
{{destructor}}
....
*Requires:* \{\{text}}
*Effects:* \{\{text}}
*Postconditions:* \{\{text}}
*Returns:* \{\{text}}
*Throws:* \{\{text}}
*Complexity:* \{\{text}}
*Note:* \{\{text}}
*Danger:* \{\{text}}
*Rationale:* \{\{text}}
==== Class `{{class name}}` comparison functions
....
{{function}}
....
*Requires:* \{\{text}}
*Effects:* \{\{text}}
*Postconditions:* \{\{text}}
*Returns:* \{\{text}}
*Throws:* \{\{text}}
*Complexity:* \{\{text}}
*Note:* \{\{text}}
*Danger:* \{\{text}}
*Rationale:* \{\{text}}
==== Class `{{class name}}` modifier functions
....
{{function}}
....
*Requires:* \{\{text}}
*Effects:* \{\{text}}
*Postconditions:* \{\{text}}
*Returns:* \{\{text}}
*Throws:* \{\{text}}
*Complexity:* \{\{text}}
*Note:* \{\{text}}
*Danger:* \{\{text}}
*Rationale:* \{\{text}}
==== Class `{{class name}}` observer functions
....
{{function}}
....
*Requires:* \{\{text}}
*Effects:* \{\{text}}
*Postconditions:* \{\{text}}
*Returns:* \{\{text}}
*Throws:* \{\{text}}
*Complexity:* \{\{text}}
*Note:* \{\{text}}
*Danger:* \{\{text}}
*Rationale:* \{\{text}}
==== Class `{{class name}}` static functions
....
{{function}}
....
*Requires:* \{\{text}}
*Effects:* \{\{text}}
*Postconditions:* \{\{text}}
*Returns:* \{\{text}}
*Throws:* \{\{text}}
*Complexity:* \{\{text}}
*Note:* \{\{text}}
*Danger:* \{\{text}}
*Rationale:* \{\{text}}
== Functions
....
{{function}}
....
*Requires:* \{\{text}}
*Effects:* \{\{text}}
*Postconditions:* \{\{text}}
*Returns:* \{\{text}}
*Throws:* \{\{text}}
*Complexity:* \{\{text}}
*Note:* \{\{text}}
*Danger:* \{\{text}}
*Rationale:* \{\{text}}
== Objects
[#object-spec]
\{\{Object specifications}}
== Examples
\{\{Example(s)}}
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,35 @@
= Overview Template
== \{\{Library}} Overview
== Introduction
\{\{text}}
== First Topic
[#footnote1-location]
\{\{text}}
== Second Topic
[#footnote2-location]
\{\{text}}
== Footnotes
[#footnote1]
link:#footnote1-location[(1)]: \{\{text}}
[#footnote2]
link:#footnote2-location[(2)]: \{\{text}}
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

View File

@@ -0,0 +1,34 @@
= Rationale Template
== \{\{Library}} Rationale
== Introduction
\{\{text}}
== First Topic
[#footnote1-location]
\{\{text}}
== Second Topic
[#footnote2-location]
\{\{text}}
== Footnotes
[#footnote1]
link:#footnote1-location[(1)]: \{\{text}}
[#footnote2]
link:#footnote2-location[(2)]: \{\{text}}
'''''
Revised 04 December, 2006
_Copyright © 2006 mailto:%7B%7Baddress%7D%7D[\{\{author}}]_
_Distributed under the Boost Software License, Version 1.0. (See
http://www.boost.org/LICENSE_1_0.txt)_.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -8,11 +8,20 @@ To install the Boost libraries on a Linux system, you can either use the package
. Install the Boost development libraries using your package manager. For Ubuntu or Debian-based distributions, you can use the following command: `sudo apt install libboost-all-dev`. This command installs all the Boost development libraries available in the package repository.
== Method 2: Installing from source
== Method 2: Installing from Source
. Open a terminal window. Install the necessary build tools and libraries. For Ubuntu or Debian-based distributions, use the following command: `sudo apt install build-essential g++ python-dev autotools-dev libicu-dev libbz2-dev libtool`
. Download the latest Boost source code from the official website (https://www.boost.org/users/download/), or use `wget` to download it directly: `wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_82_0.tar.bz2`. Replace the URL and version number (1.82.0) with the latest version available.
. Download the latest Boost source code from the official website (https://www.boost.org/users/download/), or use `wget` to download it directly:
+
[source]
----
`wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_82_0.tar.bz2`
----
+
Replace the URL and version number (1.82.0) with the latest version available.
. Extract the downloaded archive: `tar xvfj boost_1_82_0.tar.bz2`.
@@ -26,18 +35,12 @@ To install the Boost libraries on a Linux system, you can either use the package
+
For LD_LIBRARY_PATH: `export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH`.
For CPLUS_INCLUDE_PATH: `export CPLUS_INCLUDE_PATH=/usr/local/include:$CPLUS_INCLUDE_PATH`.
Replace /usr/local with the prefix directory you specified during the installation, if different.
Replace `/usr/local` with the prefix directory you specified during the installation, if different.
You can add these `export` commands to your `~/.bashrc` or `~/.profile` file to make the changes permanent.
After completing either method, you should have the Boost libraries installed on your Linux system.
== Next Steps
* xref:use-boost-with-linux-package-manager.adoc[Use Boost with Linux and a Package Manager]

View File

@@ -1,42 +1,59 @@
= Use Boost with Linux and a Package Manager
= Use Boost with Linux and the vcpkg Package Manager
Yes, you can use vcpkg on Linux. To install vcpkg on a Linux system, follow these steps:
You can use vcpkg on Linux. To install vcpkg on a Linux system, follow these steps:
Open a terminal.
. Open a terminal. Install the necessary packages for building vcpkg by running the following command (for Ubuntu or Debian-based systems):
Install the necessary packages for building vcpkg by running the following command (for Ubuntu or Debian-based systems):
sql
Copy code
+
[source]
----
sudo apt-get update
sudo apt-get install build-essential tar curl zip unzip git
For other Linux distributions, install the equivalent packages using the appropriate package manager, such as yum, dnf, or pacman.
----
Clone the vcpkg repository from GitHub by running the following command:
bash
Copy code
+
For other Linux distributions, install the equivalent packages using the appropriate package manager, such as _yum_, _dnf_, or _pacman_.
. Clone the vcpkg repository from GitHub by running the following command:
+
[source]
----
git clone https://github.com/microsoft/vcpkg.git
----
+
This command will create a new directory named "vcpkg" in your current directory and clone the repository into it.
Change to the "vcpkg" directory using the "cd" command:
bash
Copy code
cd vcpkg
Run the bootstrap script to build the vcpkg executable:
bash
Copy code
. Change to the *vcpkg* directory: `cd vcpkg`. Then run the bootstrap script to build the vcpkg executable:
+
[source]
----
./bootstrap-vcpkg.sh
----
+
This script will download and build the necessary components for vcpkg. It might take a few minutes to complete.
(Optional) Add the vcpkg executable to your system's PATH environment variable. This step makes it easier to run vcpkg from any directory. Run the following command:
bash
Copy code
. (Optional) Add the vcpkg executable to your system's PATH environment variable. This step makes it easier to run vcpkg from any directory. Run the following command:
+
[source]
----
export PATH=$PATH:$(pwd)
To make this change permanent, add the above export command to your shell's configuration file, such as ~/.bashrc or ~/.bash_profile for the Bash shell.
----
Now, vcpkg is installed on your Linux system, and you can start using it to manage your C++ project dependencies. To install a package, you can run a command like:
+
To make this change permanent, add the above export command to your shell's configuration file, such as `~/.bashrc` or `~/.bash_profile` for the Bash shell.
bash
Copy code
. Now, vcpkg is installed on your Linux system, and you can start using it to manage your C++ project dependencies. To install a package, you can run a command like:
+
[source]
----
./vcpkg install <package-name>
Replace <package-name> with the name of the package you want to install.
----
+
Replace `<package-name>` with the name of the package you want to install.