Update of /cvsroot/boost/boost/libs/intrusive/doc
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv27901/doc
Modified Files:
intrusive.qbk Jamfile.v2
Log Message:
New Intrusive version
Index: intrusive.qbk
===================================================================
RCS file: /cvsroot/boost/boost/libs/intrusive/doc/intrusive.qbk,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- intrusive.qbk 23 Jun 2007 13:06:50 -0000 1.4
+++ intrusive.qbk 22 Jul 2007 14:19:19 -0000 1.5
@@ -1,8 +1,16 @@
+[/
+ / Copyright (c) 2007 Ion Gaztanaga
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
[library Boost.Intrusive
[quickbook 1.3]
- [version 2007-06-23]
[authors [Krzikalla, Olaf], [Gaztañaga, Ion]]
[copyright 2005 Olaf Krzikalla, 2006-2007 Ion Gaztañaga]
+ [id intrusive]
+ [dirname intrusive]
[purpose Intrusive containers]
[license
Distributed under the Boost Software License, Version 1.0.
@@ -17,7 +25,7 @@
[*Boost.Intrusive] is a library presenting some intrusive containers to
the world of C++. Intrusive containers are special containers
-that offer [link boost_intrusive.performance better performance]
+that offer [link intrusive.performance better performance]
and exception safety guarantees than non-intrusive containers (like STL
containers).
The performance benefits of intrusive containers makes them ideal as a building
@@ -190,7 +198,7 @@
swapping can be used to implement move-capabilities. To ease the
implementation of
copy constructors and assignment operators of classes storing
[*Boost.Intrusive]
containers, [*Boost.Intrusive] offers special cloning functions. See
- [link boost_intrusive.clone_from Cloning [*Boost.Intrusive] containers]
section for more information.
+ [link intrusive.clone_from Cloning [*Boost.Intrusive] containers] section
for more information.
* Analyzing thread-safety of a program that uses containers is harder with
intrusive containers, becuase
the container might be modified indirectly without an explicitly call to a
container member.
@@ -214,7 +222,7 @@
]
For a performance comparison between Intrusive and Non-intrusive containers see
-[link boost_intrusive.performance Performance] section.
+[link intrusive.performance Performance] section.
[endsect]
@@ -259,11 +267,11 @@
* The second template argument controls the linking policy.
[*Boost.Intrusive] currently supports
3 policies: `normal_link`, `safe_link`, `auto_unlink`. More about these in
the sections
- [link boost_intrusive.safe_hook Safe hooks] and [link
boost_intrusive.auto_unlink_hooks Auto-unlink hooks]
+ [link intrusive.safe_hook Safe hooks] and [link intrusive.auto_unlink_hooks
Auto-unlink hooks]
* The third template argument is the pointer type to be used internally in
the hook.
The default value is `void *`, which means that raw pointers will be used
in the hook.
- More about this in the section titled [link
boost_intrusive.using_smart_pointers Using smart pointers with Boost.Intrusive
containers]
+ More about this in the section titled [link intrusive.using_smart_pointers
Using smart pointers with Boost.Intrusive containers]
Example:
@@ -591,13 +599,13 @@
information about `BOOST_ASSERT`.
`BOOST_ASSERT` is globally configured for all the libraries, so the user might
-want to redefine safe-mode assertions without modifying `BOOST_ASSERT`. This
can
-be achieved redefining the following macros:
+want to redefine intrusive safe-mode assertions without modifying the global
+`BOOST_ASSERT`. This can be achieved redefining the following macros:
-* `BOOST_INTRUSIVE_SAFE_MODE_CONTAINER_INSERTION_ASSERT`: This assertion will
be
+* `BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT`: This assertion will be
used in insertion functions of the intrusive containers to check that
the hook of the value to be inserted is default constructed.
-* `BOOST_INTRUSIVE_SAFE_MODE_HOOK_DESTRUCTOR_ASSERT`: This assertion will be
+* `BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT`: This assertion will be
used in hooks' destructors to check that the hook is in a default state.
If any of these macros is not redefined, it will be defaulted to
`BOOST_ASSERT`.
@@ -620,7 +628,7 @@
These hooks have exactly the same size overhead as their analogue non
auto-unlinking
hooks, but they have a restriction: they can only be used with
-[link boost_intrusive.presenting_containers non-constant time containers].
+[link intrusive.presenting_containers non-constant time containers].
There is a reason for this:
* Auto-unlink hooks don't store any reference to the container where they are
inserted.
@@ -1594,7 +1602,7 @@
[section:node_algorithms Node algorithms with custom NodeTraits]
-As explained in the [link boost_intrusive.concepts Concepts] section,
[*Boost.Intrusive]
+As explained in the [link intrusive.concepts Concepts] section,
[*Boost.Intrusive]
containers are implemented using node algorithms that work on generic nodes.
Sometimes, the use of intrusive containers is expensive for some environments
@@ -1775,7 +1783,7 @@
[section:value_traits Containers with custom ValueTraits]
-As explained in the [link boost_intrusive.concepts Concepts] section,
[*Boost.Intrusive]
+As explained in the [link intrusive.concepts Concepts] section,
[*Boost.Intrusive]
containers are templatized using a `ValueTraits` parameter. This parameter
contains
all the information to glue the `value_type` of the containers and the node to
be
used in node algorithms, since these types can be different. Apart from this,
@@ -1819,7 +1827,7 @@
* ['node_traits]: The node configuration that it's needed by node algorithms.
These node traits and algorithms are
- described in the previous chapter: [link boost_intrusive.node_algorithms
Nodes Algorithms].
+ described in the previous chapter: [link intrusive.node_algorithms Nodes
Algorithms].
* If my_value_traits is meant to be used with [classref
boost::intrusive::slist slist],
`node_traits` should follow
@@ -1912,6 +1920,21 @@
[doc_value_traits_value_traits]
+Defining a value traits class that just defines `value_type` as
+`legacy_node_traits::node` is a common approach when defining customized
+intrusive containers, so [*Boost.Intrusive] offers a templatized
+[classref boost::intrusive::trivial_value_traits trivial_value_traits] class
+that does exactly what we want:
+
+[c++]
+
+ #include <boost/intrusive/trivial_value_traits.hpp>
+
+ //Now we can define legacy_value_traits just with a single line
+ using namespace boost::intrusive;
+ typedef trivial_value_traits<legacy_node_traits, normal_link>
legacy_value_traits;
+
+
Now we can just define the containers that will store the legacy abi objects
and write
a little test:
@@ -1955,6 +1978,40 @@
[endsect]
+[section:simplifying_value_traits Simplifying value traits definition]
+
+The previous example can be further simplified using
+[classref boost::intrusive::derivation_value_traits derivation_value_traits]
+class to define a value traits class with a value that stores the
+`simple_node` as a base class:
+
+[c++]
+
+ #include <boost/intrusive/derivation_value_traits.hpp>
+
+ //value_1, value_2, simple_node and simple_node_traits are defined
+ //as in the previous example...
+ //...
+
+ using namespace boost::intrusive;
+
+ //Now define the needed value traits using
+ typedef derivation_value_traits<value_1, simple_node_traits, normal_link>
ValueTraits1;
+ typedef derivation_value_traits<value_2, simple_node_traits, normal_link>
ValueTraits2;
+
+ //Now define the containers
+ typedef list <ValueTraits1> Value1List;
+ typedef list <ValueTraits2> Value2List;
+
+We can even choose to store `simple_node` as a member of `value_1` and
`value_2`
+classes and use [classref boost::intrusive::member_value_traits
member_value_traits]
+to define the needed value traits classes:
+
+[import ../example/doc_advanced_value_traits2.cpp]
+[doc_advanced_value_traits2_value_traits]
+
+[endsect]
+
[endsect]
[section:thread_safety Thread safety guarantees]
@@ -2108,7 +2165,7 @@
You can find the full test code code in the
[EMAIL PROTECTED]/../perf/perf_list.cpp perf_list.cpp] source file.
-[section:performance_results_push_back Back insertions and destruction]
+[section:performance_results_push_back Back insertion and destruction]
The first test will measure the benefits we can obtain with intrusive
containers
avoiding memory allocations and deallocations . All the objects to be
@@ -2171,7 +2228,7 @@
The results are logical: intrusive lists just need one allocation. The
destruction
time of the `normal_link` intrusive container is trivial (complexity: `O(1)`),
-whereas `safe_link` and `auto_unlink` intrusive containers need to the hook of
+whereas `safe_link` and `auto_unlink` intrusive containers need to put the
hook of
erased values' in the default state (complexity: `O(NumElements)`). That's why
`normal_link` intrusive list shines in this test.
@@ -2187,7 +2244,7 @@
[section:performance_results_reversing Reversing]
-The next test measures the time needed to complete calss to the member
function `reverse()`.
+The next test measures the time needed to complete calls to the member
function `reverse()`.
Values (`test_class` and `itest_class`) and lists are created like explained
in the
previous section.
@@ -2405,6 +2462,21 @@
[endsect]
+[section:disabling_exceptions Disabling exceptions support]
+
+[*Boost.Intrusive] might be useful in environments where exceptions are not
available
+or recommendable (like embedded or real-time systems). [*Boost.Intrusive] uses
the
+global Boost mechanism to disable exception handling, so that if the compiler
+configuration disables exceptions, `BOOST_NO_EXCEPTIONS` is defined and
exception
+handling is disabled.
+
+This mechanism is a global mechanism to disable exceptions. If for any reason,
+the user wants to disable exception handling [*only] in [*Boost.Intrusive],
+`BOOST_INTRUSIVE_DISABLE_EXCEPTION_HANDLING` can be defined to disable
+exception handling in the library.
+
+[endsect]
+
[section:tested_compilers Tested compilers]
[*Boost.Intrusive] has been tested in the following compilers/platforms:
@@ -2418,6 +2490,7 @@
* Codewarrior 9.4/WinXP
* GCC 3.4.3/Solaris 11
* GCC 4.0/Mac Os 10.4.1
+* SunCC 5.8/Solaris 11
[endsect]
@@ -2448,7 +2521,7 @@
[endsect]
-[xinclude intrusive_doxygen.xml]
+[xinclude autodoc.xml]
[section:license_notices License notices]
Index: Jamfile.v2
===================================================================
RCS file: /cvsroot/boost/boost/libs/intrusive/doc/Jamfile.v2,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- Jamfile.v2 12 Jun 2007 17:13:44 -0000 1.2
+++ Jamfile.v2 22 Jul 2007 14:19:19 -0000 1.3
@@ -8,12 +8,10 @@
# See http://www.boost.org/libs/intrusive for documentation.
-project boost/intrusive/doc ;
-
-import boostbook : boostbook ;
+import doxygen ;
import quickbook ;
-doxygen intrusive_doxygen
+doxygen autodoc
:
[ glob ../../../boost/intrusive/*.hpp ]
:
@@ -26,15 +24,15 @@
<doxygen:param>SEARCH_INCLUDES=YES
;
-xml intrusive_xml : intrusive.qbk ;
+xml intrusive : intrusive.qbk ;
-boostbook intrusive
+boostbook standalone
:
- intrusive_xml
- intrusive_doxygen
+ intrusive
:
<xsl:param>boost.root=../../../..
<xsl:param>boost.libraries=../../../../libs/libraries.htm
<xsl:param>generate.section.toc.level=3
<xsl:param>chunk.first.sections=1
+ <dependency>autodoc
;
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs