From ebb09db44eee6aeb75bdd2207c43b4b92b7fef6f Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Mon, 22 Sep 2003 19:55:01 +0000 Subject: [PATCH] Separate access and traversal for iterator_adaptor [SVN r20162] --- doc/counting_iterator_ref.rst | 12 +- doc/facade-and-adaptor.html | 185 +++++++++++++----------- doc/facade-and-adaptor.rst | 14 +- doc/filter_iterator_ref.rst | 13 +- doc/function_output_iterator_ref.rst | 2 +- doc/indirect_iterator_ref.rst | 18 +-- doc/iterator_adaptor_body.rst | 19 +-- doc/iterator_adaptor_ref.rst | 85 ++++++----- doc/iterator_facade_ref.rst | 25 +++- doc/new-iter-concepts.html | 201 ++++++++++++++++++++++++++- doc/permutation_iterator_ref.rst | 3 +- doc/style.tex | 78 +++++++++++ 12 files changed, 485 insertions(+), 170 deletions(-) create mode 100755 doc/style.tex diff --git a/doc/counting_iterator_ref.rst b/doc/counting_iterator_ref.rst index fc01011..f443682 100644 --- a/doc/counting_iterator_ref.rst +++ b/doc/counting_iterator_ref.rst @@ -1,12 +1,18 @@ :: - template + template < + class Incrementable + , unsigned Access = use_default_access + , class Traversal = use_default + , class Difference = use_default + > class counting_iterator : public iterator_adaptor< - counting_iterator + counting_iterator , Incrementable , Incrementable - , /* see details for category */ + , Access + , /* see details for traversal category */ , Incrementable const& , Incrementable const* , /* distance = Difference or a signed integral type */> diff --git a/doc/facade-and-adaptor.html b/doc/facade-and-adaptor.html index 747de28..49efb2e 100755 --- a/doc/facade-and-adaptor.html +++ b/doc/facade-and-adaptor.html @@ -219,7 +219,7 @@ Lab, University of Hanover Date: 2003-09-22 -Number:This document is a revised version of the official N1476=03-0059 +Number:N1530=03-0113 Copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved @@ -642,17 +642,18 @@ above. The Base type need not iterator. It need only support the operations used by the core interface functions of iterator_adaptor that have not been redefined in the user's derived class.

-

Several of the template parameters of iterator_adaptor default to -use_default. This allows the user to make use of a default -parameter even when the user wants to specify a parameter later in the -parameter list. Also, the defaults for the corresponding associated -types are fairly complicated, so metaprogramming is required to -compute them, and use_default can help to simplify the -implementation. Finally, use_default is not left unspecified +

Several of the template parameters of iterator_adaptor default +to use_default (or use_default_access). This allows the +user to make use of a default parameter even when she wants to +specify a parameter later in the parameter list. Also, the +defaults for the corresponding associated types are somewhat +complicated, so metaprogramming is required to compute them, and +use_default can help to simplify the implementation. Finally, +the identity of the use_default type is not left unspecified because specification helps to highlight that the Reference template parameter may not always be identical to the iterator's -reference type, and will keep users making mistakes based on that -assumption.

+reference type, and will keep users making mistakes based on +that assumption.

Specialized Adaptors

@@ -697,13 +698,14 @@ Standard compliant iterators).

Header <iterator_helper> synopsis [lib.iterator.helper.synopsis]

 struct use_default;
+const unsigned use_default_access = -1;
 
 struct iterator_core_access { /* implementation detail */ };
 
 template <
     class Derived
   , class Value
-  , class AccessCategory
+  , unsigned AccessCategory
   , class TraversalCategory
   , class Reference  = Value&
   , class Difference = ptrdiff_t
@@ -714,7 +716,8 @@ template <
     class Derived
   , class Base
   , class Value      = use_default
-  , class Category   = use_default
+  , unsigned Access  = use_default_access
+  , class Traversal  = use_default
   , class Reference  = use_default
   , class Difference = use_default
 >
@@ -723,7 +726,8 @@ class iterator_adaptor;
 template <
     class Iterator
   , class Value = use_default
-  , class Category = use_default
+  , unsigned Access  = use_default_access
+  , class Traversal  = use_default
   , class Reference = use_default
   , class Difference = use_default
 >
@@ -745,7 +749,8 @@ class filter_iterator;
 
 template <
     class Incrementable
-  , class Category = use_default
+  , unsigned Access  = use_default_access
+  , class Traversal  = use_default
   , class Difference = use_default
 >
 class counting_iterator
@@ -765,7 +770,7 @@ and associated types, to be supplied by a derived iterator class.

template < class Derived , class Value - , class AccessCategory + , unsigned AccessCategory , class TraversalCategory , class Reference = /* see below */ , class Difference = ptrdiff_t @@ -855,11 +860,21 @@ out of the overload set when the types are not interoperable.]

title prevents an automatic link from being generated -->

iterator_facade requirements

+

Some of the constraints on template parameters to +iterator_facade are expressed in terms of resulting nested +types and should be viewed in the context of their impact on +iterator_traits<Derived>.

The Derived template parameter must be a class derived from iterator_facade.

-

The default for the Reference parameter is Value& if the -access category for iterator_facade is implicitly convertible to -writable_iterator_tag, and const Value& otherwise.

+

The nested ::value_type type will be the same as +remove_cv<Value>::type, so the Value parameter must be +an (optionally const-qualified) non-reference type.

+

AccessCategory must be an unsigned value which uses no more +bits than the greatest value of iterator_access.

+

The nested ::reference will be the same as the Reference +parameter; it must be a suitable reference type for the resulting +iterator. The default for the Reference parameter is +Value&.

The following table describes the other requirements on the Derived parameter. Depending on the resulting iterator's iterator_category, a subset of the expressions listed in the table @@ -973,8 +988,8 @@ of type X::pointer equal to:Otherwise returns an object of unspecified type such that, given an object a of type X, a->m is equivalent to (w = *a, w.m) for some temporary object w of type X::value_type.

-

The type X::pointer is Value* if the access category for -X is implicitly convertible to writable_iterator_tag, and +

The type X::pointer is Value* if +is_writable_iterator<X>::value is true, and Value const* otherwise.

@@ -1107,11 +1122,13 @@ core interface functions of iterator_facad

Class template iterator_adaptor

+bool
 template <
     class Derived
   , class Base
   , class Value      = use_default
-  , class Category   = use_default
+  , unsigned Access  = use_default_access
+  , class Traversal  = use_default
   , class Reference  = use_default
   , class Difference = use_default
 >
@@ -1163,54 +1180,47 @@ parameters specify the types for the member typedefs in
 iterator_facade.  The following pseudo-code specifies the
 traits types for iterator_adaptor.

-if (Value == use_default)
-    value_type = iterator_traits<Base>::value_type;
-else 
-    value_type = remove_cv<Value>::type;
-
-if (Reference == use_default) {
-    if (Value == use_default)
-        reference = iterator_traits<Base>::reference;
-    else 
-        reference = Value&;
-} else
-    reference = Reference;
-
-if (Distance == use_default)
-    difference_type = iterator_traits<Base>::difference_type;
+if (Value != use_default)
+     value_type = remove_cv<Value>::type;
 else
-    difference_type = Distance;
+     value_type = iterator_traits<Base>::value_type;
 
-if (Category == use_default)
-    iterator_category = iterator_tag< 
-        access_category< Base >,
-        traversal_category< Base >
-    >
-else if (Category is convertible to a standard access tag)
-    iterator_category = iterator_tag<
-        Category
-    else if (Category has a nested traversal type)
-         if (reference is not a reference-to-const)
-             Category::access
-         else
-             if (Category
-        
 
-else if (Category is convertable to a standard traversal tag)
-    ...
+if (Traversal != use_default)
+    traversal_category = Traversal
 else
-    iterator_category = Category;
-    // Actually the above is wrong.  See the use of
-    // access_category_tag and
-    // new_category_to_access/iter_category_to_access.
+    traversal_category = traversal_category< Base >::type
+
+iterator_category = iterator_tag<
+                         access_category
+                       , traversal_category
+                     >
+
+if (Access != use_default)
+{
+   access_category = Access
+}
+else
+{
+   access_category
+     = access_category< Base >::value
+
+   if (is_const<Value>)
+       access_category &= ~writable_iterator;
+}
+
+iterator_category = iterator_tag<
+                         access_category
+                       , traversal_category
+                     >
+
+if (Reference != use_default)
+    reference = Reference
+else if (Value != use_default)
+    reference = Value&
+else
+    reference = iterator_traits<Base>::reference
 
-

iterator_adaptor public operations

@@ -1362,7 +1372,8 @@ iterators over smart pointers, which the impl handles. -JGS --> template < class Iterator , class Value = use_default - , class Category = use_default + , unsigned Access = use_default_access + , class Traversal = use_default , class Reference = use_default , class Difference = use_default > @@ -1374,12 +1385,12 @@ class indirect_iterator indirect_iterator(); indirect_iterator(Iterator x); template < - class Iterator2, class Value2, class Category2 + class Iterator2, class Value2, unsigned Access2, class Traversal2 , class Reference2, class Difference2 > indirect_iterator( indirect_iterator< - Iterator2, Value2, Category2, Reference2, Difference2 + Iterator2, Value2, Access2, Traversal2, Reference2, Difference2 > const& y , typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition ); @@ -1408,9 +1419,10 @@ specialization of iterator_traits

The Reference parameter will be the reference type of the indirect_iterator. The default is Value&.

-

The Category parameter is the iterator_category type for the -indirect_iterator. The default is -iterator_traits<Iterator>::iterator_category.

+

The Access and Traversal parameters are passed unchanged to +the corresponding parameters of the iterator_adaptor base +class, and the Iterator parameter is passed unchanged as the +Base parameter to the iterator_adaptor base class.

The indirect iterator will model the most refined standard traversal concept that is modeled by the Iterator type. The indirect iterator will model the most refined standard access concept that is @@ -1442,12 +1454,12 @@ the iterator_adaptor subobject

 template <
-    class Iterator2, class Value2, class Category2
+    class Iterator2, class Value2, unsigned Access, class Traversal
   , class Reference2, class Difference2
 >
 indirect_iterator(
     indirect_iterator<
-         Iterator2, Value2, Category2, Reference2, Difference2
+         Iterator2, Value2, Access, Traversal, Reference2, Difference2
     > const& y
   , typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
 );
@@ -1733,12 +1745,13 @@ class filter_iterator
 

filter_iterator requirements

-

The base Iterator parameter must be a model of Readable Iterator -and Single Pass Iterator. The resulting filter_iterator will be a -model of Forward Traversal Iterator if Iterator is, otherwise the -filter_iterator will be a model of Single Pass Iterator. The -access category of the filter_iterator will be the most refined -standard access category that is modeled by Iterator.

+

The base Iterator parameter must be a model of Readable +Iterator and Single Pass Iterator. The resulting +filter_iterator will be a model of Forward Traversal Iterator +if Iterator is, otherwise the filter_iterator will be a +model of Single Pass Iterator. The access category of the +filter_iterator will be the same as the access category of +Iterator.

The Predicate must be Assignable, Copy Constructible, and the @@ -1830,13 +1843,19 @@ the base m_iterator, as per th

Class template counting_iterator

-template <class Incrementable, class Category = use_default, class Difference = use_default>
+template <
+    class Incrementable
+  , unsigned Access = use_default_access
+  , class Traversal = use_default
+  , class Difference = use_default
+>
 class counting_iterator
   : public iterator_adaptor<
-        counting_iterator<Incrementable, Category, Difference>
+        counting_iterator<Incrementable, Access, Traversal, Difference>
       , Incrementable
       , Incrementable
-      , /* see details for category */
+      , Access
+      , /* see details for traversal category */
       , Incrementable const&
       , Incrementable const*
       , /* distance = Difference or a signed integral type */>
@@ -1935,7 +1954,7 @@ template <class UnaryFunction>
 class function_output_iterator {
 public:
   typedef iterator_tag<
-        writable_iterator_tag
+        writable_iterator
       , incrementable_traversal_tag
   > iterator_category;
   typedef void                value_type;
@@ -2043,7 +2062,7 @@ LocalWords:  OtherIncrementable Coplien -->
 
 
 
diff --git a/doc/facade-and-adaptor.rst b/doc/facade-and-adaptor.rst
index 9ed64a1..0dca788 100644
--- a/doc/facade-and-adaptor.rst
+++ b/doc/facade-and-adaptor.rst
@@ -8,7 +8,7 @@
                Lab`_, University of Hanover `Institute for Transport
                Railway Operation and Construction`_
 :date: $Date$
-:Number: **This document is a revised version of the official** N1476=03-0059
+:Number: N1530=03-0113
 :copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
 
 .. _`Boost Consulting`: http://www.boost-consulting.com
@@ -226,13 +226,14 @@ Header ```` synopsis    [lib.iterator.helper.synopsis]
 ::
 
   struct use_default;
+  const unsigned use_default_access = -1;
 
   struct iterator_core_access { /* implementation detail */ };
   
   template <
       class Derived
     , class Value
-    , class AccessCategory
+    , unsigned AccessCategory
     , class TraversalCategory
     , class Reference  = Value&
     , class Difference = ptrdiff_t
@@ -243,7 +244,8 @@ Header ```` synopsis    [lib.iterator.helper.synopsis]
       class Derived
     , class Base
     , class Value      = use_default
-    , class Category   = use_default
+    , unsigned Access  = use_default_access
+    , class Traversal  = use_default
     , class Reference  = use_default
     , class Difference = use_default
   >
@@ -252,7 +254,8 @@ Header ```` synopsis    [lib.iterator.helper.synopsis]
   template <
       class Iterator
     , class Value = use_default
-    , class Category = use_default
+    , unsigned Access  = use_default_access
+    , class Traversal  = use_default
     , class Reference = use_default
     , class Difference = use_default
   >
@@ -274,7 +277,8 @@ Header ```` synopsis    [lib.iterator.helper.synopsis]
 
   template <
       class Incrementable
-    , class Category = use_default
+    , unsigned Access  = use_default_access
+    , class Traversal  = use_default
     , class Difference = use_default
   >
   class counting_iterator
diff --git a/doc/filter_iterator_ref.rst b/doc/filter_iterator_ref.rst
index 29bc166..239d2f8 100644
--- a/doc/filter_iterator_ref.rst
+++ b/doc/filter_iterator_ref.rst
@@ -41,12 +41,13 @@
 ``filter_iterator`` requirements
 --------------------------------
 
-The base ``Iterator`` parameter must be a model of Readable Iterator
-and Single Pass Iterator. The resulting ``filter_iterator`` will be a
-model of Forward Traversal Iterator if ``Iterator`` is, otherwise the
-``filter_iterator`` will be a model of Single Pass Iterator. The
-access category of the ``filter_iterator`` will be the most refined
-standard access category that is modeled by ``Iterator``.
+The base ``Iterator`` parameter must be a model of Readable
+Iterator and Single Pass Iterator. The resulting
+``filter_iterator`` will be a model of Forward Traversal Iterator
+if ``Iterator`` is, otherwise the ``filter_iterator`` will be a
+model of Single Pass Iterator. The access category of the
+``filter_iterator`` will be the same as the access category of
+``Iterator``.
 
 .. Thomas is going to try implementing filter_iterator so that
    it will be bidirectional if the underlying iterator is. -JGS
diff --git a/doc/function_output_iterator_ref.rst b/doc/function_output_iterator_ref.rst
index 4bb5cf1..bee8a60 100644
--- a/doc/function_output_iterator_ref.rst
+++ b/doc/function_output_iterator_ref.rst
@@ -4,7 +4,7 @@
   class function_output_iterator {
   public:
     typedef iterator_tag<
-          writable_iterator_tag
+          writable_iterator
         , incrementable_traversal_tag
     > iterator_category;
     typedef void                value_type;
diff --git a/doc/indirect_iterator_ref.rst b/doc/indirect_iterator_ref.rst
index ebbe2ff..5525c2e 100644
--- a/doc/indirect_iterator_ref.rst
+++ b/doc/indirect_iterator_ref.rst
@@ -3,7 +3,8 @@
   template <
       class Iterator
     , class Value = use_default
-    , class Category = use_default
+    , unsigned Access  = use_default_access
+    , class Traversal  = use_default
     , class Reference = use_default
     , class Difference = use_default
   >
@@ -15,12 +16,12 @@
       indirect_iterator();
       indirect_iterator(Iterator x);
       template <
-          class Iterator2, class Value2, class Category2
+          class Iterator2, class Value2, unsigned Access2, class Traversal2
         , class Reference2, class Difference2
       >
       indirect_iterator(
           indirect_iterator<
-               Iterator2, Value2, Category2, Reference2, Difference2
+               Iterator2, Value2, Access2, Traversal2, Reference2, Difference2
           > const& y
         , typename enable_if_convertible::type* = 0 // exposition
       );
@@ -53,9 +54,10 @@ iterator.
 The ``Reference`` parameter will be the ``reference`` type of the
 ``indirect_iterator``. The default is ``Value&``.
 
-The ``Category`` parameter is the ``iterator_category`` type for the
-``indirect_iterator``. The default is 
-``iterator_traits::iterator_category``.
+The ``Access`` and ``Traversal`` parameters are passed unchanged to
+the corresponding parameters of the ``iterator_adaptor`` base
+class, and  the ``Iterator`` parameter is passed unchanged as the
+``Base`` parameter to the ``iterator_adaptor`` base class.
 
 The indirect iterator will model the most refined standard traversal
 concept that is modeled by the ``Iterator`` type.  The indirect
@@ -81,12 +83,12 @@ modeled by the value type of ``Iterator``.
 ::
 
   template <
-      class Iterator2, class Value2, class Category2
+      class Iterator2, class Value2, unsigned Access, class Traversal
     , class Reference2, class Difference2
   >
   indirect_iterator(
       indirect_iterator<
-           Iterator2, Value2, Category2, Reference2, Difference2
+           Iterator2, Value2, Access, Traversal, Reference2, Difference2
       > const& y
     , typename enable_if_convertible::type* = 0 // exposition
   );
diff --git a/doc/iterator_adaptor_body.rst b/doc/iterator_adaptor_body.rst
index 0136ad1..942c2f6 100644
--- a/doc/iterator_adaptor_body.rst
+++ b/doc/iterator_adaptor_body.rst
@@ -18,15 +18,16 @@ iterator. It need only support the operations used by the core
 interface functions of ``iterator_adaptor`` that have not been
 redefined in the user's derived class.
 
-Several of the template parameters of ``iterator_adaptor`` default to
-``use_default``. This allows the user to make use of a default
-parameter even when the user wants to specify a parameter later in the
-parameter list.  Also, the defaults for the corresponding associated
-types are fairly complicated, so metaprogramming is required to
-compute them, and ``use_default`` can help to simplify the
-implementation.  Finally, ``use_default`` is not left unspecified
+Several of the template parameters of ``iterator_adaptor`` default
+to ``use_default`` (or ``use_default_access``). This allows the
+user to make use of a default parameter even when she wants to
+specify a parameter later in the parameter list.  Also, the
+defaults for the corresponding associated types are somewhat
+complicated, so metaprogramming is required to compute them, and
+``use_default`` can help to simplify the implementation.  Finally,
+the identity of the ``use_default`` type is not left unspecified
 because specification helps to highlight that the ``Reference``
 template parameter may not always be identical to the iterator's
-``reference`` type, and will keep users making mistakes based on that
-assumption.
+``reference`` type, and will keep users making mistakes based on
+that assumption.
 
diff --git a/doc/iterator_adaptor_ref.rst b/doc/iterator_adaptor_ref.rst
index af910f5..7226341 100644
--- a/doc/iterator_adaptor_ref.rst
+++ b/doc/iterator_adaptor_ref.rst
@@ -1,10 +1,12 @@
 .. parsed-literal::
   
+  bool
   template <
       class Derived
     , class Base
     , class Value      = use_default
-    , class Category   = use_default
+    , unsigned Access  = use_default_access
+    , class Traversal  = use_default
     , class Reference  = use_default
     , class Difference = use_default
   >
@@ -60,55 +62,46 @@ traits types for ``iterator_adaptor``.
 
 ::
 
-    if (Value == use_default)
-        value_type = iterator_traits::value_type;
-    else 
+   if (Value != use_default)
         value_type = remove_cv::type;
-
-    if (Reference == use_default) {
-        if (Value == use_default)
-            reference = iterator_traits::reference;
-        else 
-            reference = Value&;
-    } else
-        reference = Reference;
-
-    if (Distance == use_default)
-        difference_type = iterator_traits::difference_type;
-    else
-        difference_type = Distance;
-
-    if (Category == use_default)
-        iterator_category = iterator_tag< 
-            access_category< Base >,
-            traversal_category< Base >
-        >
-    else if (Category is convertible to a standard access tag)
-        iterator_category = iterator_tag<
-            Category
-        else if (Category has a nested traversal type)
-             if (reference is not a reference-to-const)
-                 Category::access
-             else
-                 if (Category
-            
-    
-    else if (Category is convertable to a standard traversal tag)
-        ...
-    else
-        iterator_category = Category;
-        // Actually the above is wrong.  See the use of
-        // access_category_tag and
-        // new_category_to_access/iter_category_to_access.
+   else
+        value_type = iterator_traits::value_type;
 
 
-..  Replaced with new semantics --thw
-    if (Category == use_default)
-        iterator_category = iterator_traits::iterator_category;
-    else
-        iterator_category = Category;
+   if (Traversal != use_default)
+       traversal_category = Traversal
+   else
+       traversal_category = traversal_category< Base >::type
 
-    Fix this up!!
+   iterator_category = iterator_tag<
+                            access_category
+                          , traversal_category
+                        >
+
+   if (Access != use_default)
+   {
+      access_category = Access
+   }
+   else
+   {
+      access_category
+        = access_category< Base >::value
+
+      if (is_const)
+          access_category &= ~writable_iterator;
+   }
+
+   iterator_category = iterator_tag<
+                            access_category
+                          , traversal_category
+                        >
+
+   if (Reference != use_default)
+       reference = Reference
+   else if (Value != use_default)
+       reference = Value&
+   else
+       reference = iterator_traits::reference
 
 
 ``iterator_adaptor`` public operations
diff --git a/doc/iterator_facade_ref.rst b/doc/iterator_facade_ref.rst
index 04d5150..bba0dd2 100644
--- a/doc/iterator_facade_ref.rst
+++ b/doc/iterator_facade_ref.rst
@@ -3,7 +3,7 @@
   template <
       class Derived
     , class Value
-    , class AccessCategory
+    , unsigned AccessCategory
     , class TraversalCategory
     , class Reference  = /* see below__ \*/
     , class Difference = ptrdiff_t
@@ -108,12 +108,25 @@ out of the overload set when the types are not interoperable.]
 ``iterator_facade`` requirements
 ................................
 
+Some of the constraints on template parameters to
+``iterator_facade`` are expressed in terms of resulting nested
+types and should be viewed in the context of their impact on
+``iterator_traits``.
+
 The ``Derived`` template parameter must be a class derived from
 ``iterator_facade``.
 
-The default for the ``Reference`` parameter is ``Value&`` if the
-access category for ``iterator_facade`` is implicitly convertible to
-``writable_iterator_tag``, and ``const Value&`` otherwise.
+The nested ``::value_type`` type will be the same as
+``remove_cv::type``, so the ``Value`` parameter must be
+an (optionally ``const``\ -qualified) non-reference type.
+
+``AccessCategory`` must be an unsigned value which uses no more
+bits than the greatest value of ``iterator_access``.
+
+The nested ``::reference`` will be the same as the ``Reference``
+parameter; it must be a suitable reference type for the resulting
+iterator.  The default for the ``Reference`` parameter is
+``Value&``.
 
 The following table describes the other requirements on the
 ``Derived`` parameter.  Depending on the resulting iterator's
@@ -188,8 +201,8 @@ __ `operator arrow`_
   object ``a`` of type ``X``, ``a->m`` is equivalent to ``(w = *a,
   w.m)`` for some temporary object ``w`` of type ``X::value_type``.
 
-  The type ``X::pointer`` is ``Value*`` if the access category for
-  ``X`` is implicitly convertible to ``writable_iterator_tag``, and
+  The type ``X::pointer`` is ``Value*`` if
+  ``is_writable_iterator::value`` is ``true``, and
   ``Value const*`` otherwise.
 
 
diff --git a/doc/new-iter-concepts.html b/doc/new-iter-concepts.html
index 6e7e79e..e2a5c85 100755
--- a/doc/new-iter-concepts.html
+++ b/doc/new-iter-concepts.html
@@ -3,13 +3,204 @@
 
 
 
-
+
 New Iterator Concepts
 
 
 
 
-
+
 
 
 
@@ -963,5 +1154,11 @@ LocalWords: TraversalTag typename lvalues DWA Hmm JGS mis enum -->
+ + diff --git a/doc/permutation_iterator_ref.rst b/doc/permutation_iterator_ref.rst index ef84045..ab82271 100644 --- a/doc/permutation_iterator_ref.rst +++ b/doc/permutation_iterator_ref.rst @@ -3,7 +3,8 @@ template< class ElementIterator , class IndexIterator , class ValueT = use_default - , class CategoryT = use_default + , unsigned access = use_default_access + , class Traversal = use_default , class ReferenceT = use_default , class DifferenceT = use_default > class permutation_iterator diff --git a/doc/style.tex b/doc/style.tex new file mode 100755 index 0000000..4b2407e --- /dev/null +++ b/doc/style.tex @@ -0,0 +1,78 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%% docutils.sty: A style for docutils latex output %%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% o author: Alexander Schmolck (a.schmolck@gmx.net) +%% o created: 2002-07-07 10:50:31+00:40 +%% o last modified: $Date: 2003/09/22 19:55:01 $ +%% o keywords: +%% o license: +%XXX titlesec +%% XXX geometry +\usepackage{graphicx} +\usepackage{latexsym} % extra symbols +\usepackage{url} % !!!: pay attention when using in other commands!!! +\usepackage{verbatim} % normal verbatim has lenght-limit +\usepackage{enumerate} % easy style choice with e.g: ``\begin{enumerate}[Ex i.]`` +\usepackage{hyperref} %href, htarget and hlink XXX: pdfauthor, pdfcreator etc. +\usepackage{xr} %XXX do we need this? +% need this to have ``fboxes`` in ``enviroments``, as well as ``verbatim``s +\usepackage{fancybox} +\usepackage{mdwtab} % better tables and arrays (fixes spacing and adds + % vertical align and multirows (m)) +\usepackage{ltxtable} % long and autoscaling tables (use X for autoscaled + % columns) +\newcommand{\transition}{\vspace{2em}\par\hrule{}\par\vspace{2em}} +\newcommand{\classifier}[1]{(\textit{#1})} +\newenvironment{topic}[1]% +{\begin{Sbox}% + \begin{minipage}{.8\textwidth}% + \protect{\large{\textbf{#1}}}\par\vspace{.5em}}% +{\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}} +%XXX shadow box for warnings? +\newenvironment{admonition}[1]% +{\begin{center}% + \begin{Sbox}% + \begin{minipage}{.9\textwidth}% + \protect{\textsc{#1}}\par\vspace{.2em}}% +{\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}\end{center}} + +\newenvironment{doctest}% +{\VerbatimEnvironment + \begin{Verbatim}}% +{\end{Verbatim}} +% {% +% \begin{Sbox}% +% \begin{minipage}{.8\textwidth}% +% \protect{\large{\textsc{#1}}\par\vspace{.5em}}}% +% {\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}} +%{\end{minipage}\end{Sbox}\fbox{\TheSbox}} + + +%% just a piece of example code +% \newcommand{\vitem}% +% {\SaveVerb[{\item[\UseVerb{\MyTemp}]}]{\MyTemp}} + +%%%%%%%%%%%%%%%%%%% Added by DWA %%%%%%%%%%%%%%%%%%%%%%%%% + +% donot indent first line. +\setlength{\parindent}{0pt} +\setlength{\parskip}{5pt plus 2pt minus 1pt} + +% sloppy +% ------ +% Less strict (opposite to default fussy) space size between words. Therefore +% less hyphenation. +\sloppy + +% fonts +% ----- +% times for pdf generation, gives smaller pdf files. +% +% But in standard postscript fonts: courier and times/helvetica do not fit. +% Maybe use pslatex. +\usepackage{times} +\usepackage{pslatex} + +% pagestyle +\pagestyle{headings}