Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r73536 - in sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html: . reference tut
From: cpp.cabrera_at_[hidden]
Date: 2011-08-04 15:06:11


Author: alejandro
Date: 2011-08-04 15:06:09 EDT (Thu, 04 Aug 2011)
New Revision: 73536
URL: http://svn.boost.org/trac/boost/changeset/73536

Log:
Major documentation update, some testing update:

    - Documentation updates:
       - Updated history.
       - Updated dynamic Bloom filter reference.
         - added exception warnings to function ref.
         - added latest exposed typedefs.
       - Completed update of counting Bloom filter reference.
       - Added in new typedefs to basic Bloom filter reference.
       - Added new functions to reference for counting Bloom filter.
       - Moved all link targets out of divs and into global structure
         to slightly improve navigation.
       - Updated tut/removing.html content to reflect addition of
         exceptions.
       - Removed false negative warning from tut/tips.html.

    - Testing updates:
       - Added intersection test.
       - Changed implementation of union test.
       - Added tests for union operations.
       - Added test to ensure overflow exception is thrown
         for default data structure.
       - Re-added test falsePositiveRate.
       - Added test for bitsPerBin.
       - Added test for blockTypes.
       - Made countMulti test more comprehensive.

   - Benchmark updates:
      - Restructured benchmarks to eliminate re-instantiation step.
Text files modified:
   sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/history.html | 75 ++++++++++++++
   sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/bloom.html | 42 ++++---
   sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/counting_bloom.html | 202 ++++++++++++++++++++++++++++-----------
   sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/dynamic_bloom.html | 62 ++++++++----
   sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/tut/removing.html | 20 ++-
   sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/tut/tips.html | 6 -
   6 files changed, 292 insertions(+), 115 deletions(-)

Modified: sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/history.html
==============================================================================
--- sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/history.html (original)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/history.html 2011-08-04 15:06:09 EDT (Thu, 04 Aug 2011)
@@ -36,6 +36,81 @@
     </div>
 
     <h1 class="title">Version history</h1>
+ <h3>v0.6.5 (August 3rd)</h3>
+ <ul>
+ <li><strong>Documentation Update</strong>
+ <ul>
+ <li>Updated reference - basic_bloom_filter, dynamic_bloom_filter,
+ counting_bloom_filter</li>
+ <li>Updated tutorial - added information regarding new
+ exception support for counting_bloom_filter</li>
+ <li>Updated history</li>
+ </ul>
+ </li>
+ </ul>
+
+ <h3>v0.6.0 (August 2nd)</h3>
+ <ul>
+ <li><strong>Implementation Update</strong>
+ <ul>
+ <li>Refactored counting_apply_hash - LOC cut in half,
+ also usable for future dynamic_counting_bloom_filter.</li>
+ </ul>
+ </li>
+ <li><strong>API Changes</strong>
+ <ul>
+ <li>counting_bloom_filter - added various typedefs and a few
+ metadata functions. More specifically:
+ <ul>
+ <li>Added bits_per_bin()</li>
+ <li>Added bins_per_slot()</li>
+ <li>Added mask()</li>
+ <li>Added num_bins()</li>
+ <li>Changed operator|=() -&gt; experimental_union_assign</li>
+ <li>Changed operator|() -&gt; experimental_union</li>
+ <li>Changed operator&amp;=() -&gt; experimental_intersect_assign</li>
+ <li>Changed operator&amp;() -&gt; experimental_intersect</li>
+ <li>Added restraint on BitsPerBin - must be greater than 0</li>
+ <li>Added restraint on BitsPerBin - must be &lt;= sizeof(block_type)</li>
+ </ul>
+ </li>
+ </ul>
+ <ul>
+ <li><strong>Testing Update</strong>
+ <ul>
+ <li>Greatly expanded counting_bloom_filter tests. New coverage:
+ <ul>
+ <li>Ensured all valid BitsPerBin sizes compile</li>
+ <li>Ensured that many valid block_types compile</li>
+ <li>Added tests for falsePositiveRate()</li>
+ <li>Added tests for union/intersection</li>
+ <li>Added more tests for exception triggering</li>
+ <li>Made countMulti test more comprehensive - tested on
+ all valid bitsPerBin values</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <h3>v0.5.0 (July 26nd)</h3>
+ <ul>
+ <li><strong>Implementation Update</strong>
+ <ul>
+ <li>Refactored apply_hash - both basic_bloom_filter and
+ dynamic_bloom_filter use same apply_hash meta-function.</li>
+ </ul>
+ </li>
+ <li><strong>API Changes</strong>
+ <ul>
+ <li>basic_bloom_filter - added [this_type, bitset_type] typedef</li>
+ <li>dynamic_bloom_filter - added [this_type, bitset_type] typedef</li>
+ </ul>
+ </li>
+ </ul>
+
     <h3>v0.4.4 (July 24nd)</h3>
     <ul>
       <li><strong>New!</strong>

Modified: sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/bloom.html
==============================================================================
--- sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/bloom.html (original)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/bloom.html 2011-08-04 15:06:09 EDT (Thu, 04 Aug 2011)
@@ -48,7 +48,9 @@
         <code class="c_comment">// exported typedefs</code>
         <code class="c_keyword">typedef</code> <code class="c_type">T value_type</code>;
         <code class="c_keyword">typedef</code> <code class="c_type">T key_type</code>;
+ <code class="c_keyword">typedef</code> <code class="c_namespace">std::</code><code class="c_type">bitset</code>&lt;Size&gt; <code class="c_type">bitset_type</code>;
         <code class="c_keyword">typedef</code> <code class="c_type">HashFunctions hash_function_type</code>;
+ <code class="c_keyword">typedef</code> <code class="c_type">basic_bloom_filter</code>&lt;<code class="c_type">T</code>, Size, <code class="c_type">HashFunctions</code>&gt; <code class="c_type">this_type</code>;
 
         <code class="c_comment">// constructors</code>
         <code class="c_func">basic_bloom_filter</code>();
@@ -162,8 +164,8 @@
 
     <br/>
 
+ <a name="default_constructor"></a>
     <div class="func_ref">
- <a name="default_constructor"></a>
       <div class="ref_listing"><code class="c_func">basic_bloom_filter</code>();</div>
       <dl>
         <dt>Description</dt>
@@ -173,8 +175,8 @@
       </dl>
     </div>
 
+ <a name="range_constructor"></a>
     <div class="func_ref">
- <a name="range_constructor"></a>
       <div class="ref_listing"><code class="c_func">basic_bloom_filter</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -184,8 +186,8 @@
       </dl>
     </div>
 
+ <a name="ilist_constructor"></a>
     <div class="func_ref">
- <a name="ilist_constructor"></a>
       <div class="ref_listing"><code class="c_func">basic_bloom_filter</code>(<code class="c_keyword">const</code> <code class="c_namespace">std::initializer</code>&lt;<code class="c_type">T</code>&gt;&amp;);</div>
       <dl>
         <dt>Description</dt>
@@ -197,8 +199,8 @@
       </dl>
     </div>
 
+ <a name="bit_capacity"></a>
     <div class="func_ref">
- <a name="bit_capacity"></a>
       <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">bit_capacity</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -211,8 +213,8 @@
     </div>
 
 
+ <a name="num_hash_functions"></a>
     <div class="func_ref">
- <a name="num_hash_functions"></a>
       <div class="ref_listing"><code class="c_type">size_t</code><code class="c_func"> num_hash_functions</code>()<code class="c_keyword"> const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -224,8 +226,8 @@
       </dl>
     </div>
 
+ <a name="false_positive_rate"></a>
     <div class="func_ref">
- <a name="false_positive_rate"></a>
       <div class="ref_listing"><code class="c_type">double </code><code class="c_func">false_positive_rate</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -237,8 +239,8 @@
       </dl>
     </div>
 
+ <a name="empty"></a>
     <div class="func_ref">
- <a name="empty"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">empty</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -250,8 +252,8 @@
       </dl>
     </div>
 
+ <a name="count"></a>
     <div class="func_ref">
- <a name="count"></a>
       <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">count</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -263,8 +265,8 @@
       </dl>
     </div>
 
+ <a name="insert"></a>
     <div class="func_ref">
- <a name="insert"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">insert</code>(<code class="c_keyword">const</code> <code class="c_type">T&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -276,8 +278,8 @@
       </dl>
     </div>
 
+ <a name="range_insert"></a>
     <div class="func_ref">
- <a name="range_insert"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">insert</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -289,8 +291,8 @@
       </dl>
     </div>
 
+ <a name="probably_contains"></a>
     <div class="func_ref">
- <a name="probably_contains"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">probably_contains</code>(<code class="c_keyword">const</code> <code class="c_type">T&amp;</code>) <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -304,8 +306,8 @@
       </dl>
     </div>
 
+ <a name="clear"></a>
     <div class="func_ref">
- <a name="clear"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">clear</code>();</div>
       <dl>
         <dt>Description</dt>
@@ -317,8 +319,8 @@
       </dl>
     </div>
 
+ <a name="swap"></a>
     <div class="func_ref">
- <a name="swap"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">swap</code>(<code class="c_type">basic_bloom_filter</code>&amp;);</div>
       <dl>
         <dt>Description</dt>
@@ -328,8 +330,8 @@
       </dl>
     </div>
 
+ <a name="union_assign"></a>
     <div class="func_ref">
- <a name="union_assign"></a>
       <div class="ref_listing"><code class="c_type">basic_bloom_filter&amp;</code> <code class="c_func">operator|=</code>(<code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -343,8 +345,8 @@
       </dl>
     </div>
 
+ <a name="intersect_assign"></a>
     <div class="func_ref">
- <a name="intersect_assign"></a>
       <div class="ref_listing"><code class="c_type">basic_bloom_filter&amp;</code> <code class="c_func">operator&amp;=</code>(<code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -358,8 +360,8 @@
       </dl>
     </div>
 
+ <a name="union"></a>
     <div class="func_ref">
- <a name="union"></a>
       <div class="ref_listing"><code class="c_type">basic_bloom_filter&amp;</code> <code class="c_func">operator|</code>(<code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -373,8 +375,8 @@
       </dl>
     </div>
 
+ <a name="intersect"></a>
     <div class="func_ref">
- <a name="intersect"></a>
       <div class="ref_listing"><code class="c_type">basic_bloom_filter&amp;</code> <code class="c_func">operator&amp;</code>(<code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -388,8 +390,8 @@
       </dl>
     </div>
 
+ <a name="global_swap"></a>
     <div class="func_ref">
- <a name="global_swap"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">swap</code>(<code class="c_type">basic_bloom_filter</code>&amp;, <code class="c_type">basic_bloom_filter</code>&amp;);</div>
       <dl>
         <dt>Description</dt>
@@ -399,8 +401,8 @@
       </dl>
     </div>
 
+ <a name="operator_equality"></a>
     <div class="func_ref">
- <a name="operator_equality"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">operator==</code>(<code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -412,8 +414,8 @@
       </dl>
     </div>
 
+ <a name="operator_inequality"></a>
     <div class="func_ref">
- <a name="operator_inequality"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">operator!=</code>(<code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">basic_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>

Modified: sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/counting_bloom.html
==============================================================================
--- sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/counting_bloom.html (original)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/counting_bloom.html 2011-08-04 15:06:09 EDT (Thu, 04 Aug 2011)
@@ -44,14 +44,15 @@
       <code class="c_keyword">template</code> &lt;<code class="c_keyword">typename</code> <code class="c_type">T</code>,
                 <code class="c_type">size_t</code> <code class="c_type">NumBins</code>,
                 <code class="c_type">size_t</code> <code class="c_type">BitsPerBin</code> = 4,
- <code class="c_keyword">class</code> <code class="c_type">HashFunctions</code> = <code class="c_namespace">mpl::</code><code class="c_type">vector</code>&lt;<code class="c_type">boost_hash</code>&lt;<code class="c_type">T</code>, 3&gt; &gt;,
+ <code class="c_keyword">class</code> <code class="c_type">HashFunctions</code> = <code class="c_namespace">mpl::</code><code class="c_type">vector</code>&lt;<code class="c_type">boost_hash</code>&lt;<code class="c_type">T</code>, 0&gt; &gt;,
                 <code class="c_keyword">typename</code> <code class="c_type">Block</code> = size_t&gt;
       <code class="c_keyword">class</code> <code class="c_type">counting_bloom_filter</code> {
 
         <code class="c_comment">// restrictions on template parameters</code>
         <code class="c_keyword">static_assert</code>( <code class="c_namespace">boost::</code>is_integral&lt;<code class="c_type">Block</code>&gt;::value == true);
         <code class="c_keyword">static_assert</code>( <code class="c_namespace">boost::</code>is_unsigned&lt;<code class="c_type">Block</code>&gt;::value == true);
- <code class="c_keyword">static_assert</code>( (<code class="c_type">BitsPerBin</code> &lt;= (<code class="c_keyword">sizeof</code>(<code class="c_type">Block</code>) * 8) ) );
+ <code class="c_keyword">static_assert</code>( BitsPerBin > 0 );
+ <code class="c_keyword">static_assert</code>( (<code class="c_type">BitsPerBin</code> &lt; (<code class="c_keyword">sizeof</code>(<code class="c_type">Block</code>) * 8) ) );
         <code class="c_keyword">static_assert</code>( ((<code class="c_keyword">sizeof</code>(<code class="c_type">Block</code>) * 8) % <code class="c_type">BitsPerBin</code>) == 0);
 
         <code class="c_comment">// exported typedefs</code>
@@ -59,22 +60,31 @@
         <code class="c_keyword">typedef</code> <code class="c_type">T key_type</code>;
         <code class="c_keyword">typedef</code> <code class="c_type">HashFunctions hash_function_type</code>;
         <code class="c_keyword">typedef</code> <code class="c_type">Block block_type</code>;
+ <code class="c_keyword">typedef</code> <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T</code>, NumBins, BitsPerBin, <code class="c_type">HashFunctions</code>, <code class="c_type">Block</code>&gt; <code class="c_type">this_type</code>;
 
- <code class="c_comment">// constructors</code>
+ <code class="c_keyword">typedef</code> <code class="c_namespace">boost::</code><code class="c_type">array</code>&lt;<code class="c_type">Block</code>, array_size&gt; <code class="c_type">bucket_type</code>;
+ <code class="c_keyword">typedef</code> <code class="c_type">bucket_type::iterator bucket_iterator</code>;
+ <code class="c_keyword">typedef</code> <code class="c_type">bucket_type::const_iterator bucket_const_iterator</code>;
+
+ <code class="c_comment">//! constructors</code>
         <code class="c_func">counting_bloom_filter</code>();
         <code class="c_func">counting_bloom_filter</code>(<code class="c_keyword">const</code> <code class="c_namespace">std::initializer_list</code>&lt;<code class="c_type">T</code>&gt;&amp;); <code class="c_comment">// requires C++11</code>
 
         &lt;<code class="c_keyword">typename</code> <code class="c_type">InputIterator</code>&gt;
         <code class="c_func">counting_bloom_filter</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);
 
- <code class="c_comment">// data structure metadata query functions</code>
+ <code class="c_comment">//! data structure metadata query functions</code>
+ <code class="c_keyword">static constexpr</code> <code class="c_type">size_t</code> <code class="c_func">num_bins</code>() <code class="c_keyword">const</code>;
+ <code class="c_keyword">static constexpr</code> <code class="c_type">size_t</code> <code class="c_func">bits_per_bin</code>() <code class="c_keyword">const</code>;
+ <code class="c_keyword">static constexpr</code> <code class="c_type">size_t</code> <code class="c_func">bins_per_slot</code>() <code class="c_keyword">const</code>;
+ <code class="c_keyword">static constexpr</code> <code class="c_type">size_t</code> <code class="c_func">mask</code>() <code class="c_keyword">const</code>;
         <code class="c_keyword">static constexpr</code> <code class="c_type">size_t</code> <code class="c_func">bit_capacity</code>() <code class="c_keyword">const</code>;
         <code class="c_keyword">static constexpr</code> <code class="c_type">size_t</code> <code class="c_func">num_hash_functions</code>() <code class="c_keyword">const</code>;
         <code class="c_type">double</code> <code class="c_func">false_positive_rate</code>() <code class="c_keyword">const</code>;
         <code class="c_type">size_t</code> <code class="c_func">count</code>() <code class="c_keyword">const</code>;
         <code class="c_type">bool</code> <code class="c_func">empty</code>() <code class="c_keyword">const</code>;
 
- <code class="c_comment">// data structures core ops</code>
+ <code class="c_comment">//! data structures core ops</code>
         <code class="c_type">void</code> <code class="c_func">insert</code>(<code class="c_keyword">const</code> <code class="c_type">T</code>&amp;);
 
         &lt;<code class="c_keyword">typename</code> <code class="c_type">InputIterator</code>&gt;
@@ -87,33 +97,33 @@
         &lt;<code class="c_keyword">typename</code> <code class="c_type">InputIterator</code>&gt;
         <code class="c_type">void</code> <code class="c_func">remove</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);
 
- <code class="c_comment">// auxilliary ops</code>
+ <code class="c_comment">//! auxilliary ops</code>
         <code class="c_type">void</code> <code class="c_func">clear</code>();
         <code class="c_type">void</code> <code class="c_func">swap</code>(<code class="c_type">counting_bloom_filter</code>&amp;);
         
- <code class="c_comment">// union assign/intersect assign</code>
- <code class="c_type">counting_bloom_filter</code>&amp; <code class="c_func">operator|=</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&amp;);
- <code class="c_type">counting_bloom_filter</code>&amp; <code class="c_func">operator&amp;=</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&amp;);
+ <code class="c_comment">//! union assign/intersect assign</code>
+ <code class="c_type">counting_bloom_filter</code>&amp; <code class="c_func">experimental_union_assign</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&amp;);
+ <code class="c_type">counting_bloom_filter</code>&amp; <code class="c_func">experimental_intersect_assign</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&amp;);
       };
 
- <code class="c_comment">// union</code>
+ <code class="c_comment">//! union</code>
       <code class="c_keyword">template</code> &lt;<code class="c_keyword">typename</code> <code class="c_type">T</code>,
                 <code class="c_type">size_t</code> <code class="c_type">NumBins</code>,
                 <code class="c_type">size_t</code> <code class="c_type">BitsPerBin</code>,
                 <code class="c_keyword">class</code> <code class="c_type">HashFunctions</code>,
                 <code class="c_keyword">typename</code> <code class="c_type">Block</code>&gt;
       <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T, NumBins, BitsPerBin, HashFunctions, Block</code>&gt;
- <code class="c_func">operator|</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T, NumBins, BitsPerBin, HashFunctions, Block</code>&gt;&amp; <code class="c_id">lhs</code>,
+ <code class="c_func">experimental_union</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T, NumBins, BitsPerBin, HashFunctions, Block</code>&gt;&amp; <code class="c_id">lhs</code>,
                 <code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T, NumBins, BitsPerBin, HashFunctions, Block</code>&gt;&amp; <code class="c_id">rhs</code>);
 
- <code class="c_comment">// intersect</code>
+ <code class="c_comment">//! intersect</code>
       <code class="c_keyword">template</code> &lt;<code class="c_keyword">typename</code> <code class="c_type">T</code>,
                 <code class="c_type">size_t</code> <code class="c_type">NumBins</code>,
                 <code class="c_type">size_t</code> <code class="c_type">BitsPerBin</code>,
                 <code class="c_keyword">class</code> <code class="c_type">HashFunctions</code>,
                 <code class="c_keyword">typename</code> <code class="c_type">Block</code>&gt;
       <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T, NumBins, BitsPerBin, HashFunctions, Block</code>&gt;
- <code class="c_func">operator&amp;</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T, NumBins, BitsPerBin, HashFunctions, Block</code>&gt;&amp; <code class="c_id">lhs</code>,
+ <code class="c_func">experimental_intersect</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T, NumBins, BitsPerBin, HashFunctions, Block</code>&gt;&amp; <code class="c_id">lhs</code>,
                 <code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">T, NumBins, BitsPerBin, HashFunctions, Block</code>&gt;&amp; <code class="c_id">rhs</code>);
 
       <code class="c_keyword">template</code> &lt;<code class="c_keyword">typename</code> <code class="c_type">T</code>,
@@ -179,6 +189,10 @@
         <li>counting_bloom_filter()</li>
         <li>counting_bloom_filter(start, end)</li>
         <li>counting_bloom_filter(initializer_list)</li>
+ <li>num_bins()</li>
+ <li>bits_per_bin()</li>
+ <li>bins_per_slot()</li>
+ <li>mask()</li>
         <li>bit_capacity()</li>
         <li>num_hash_functions()</li>
         <li>false_positive_rate()</li>
@@ -191,10 +205,10 @@
         <li>probably_contains(T)</li>
         <li>clear()</li>
         <li>swap(bloom)</li>
- <li>operator|=(bloom)</li>
- <li>operator&=(bloom)</li>
- <li>operator|(bloom, bloom)</li>
- <li>operator&(bloom, bloom)</li>
+ <li>experimental_union_assign(bloom)</li>
+ <li>experimental_intersect_assign(bloom)</li>
+ <li>experimental_union(bloom, bloom)</li>
+ <li>experimental_intersect(bloom, bloom)</li>
         <li>swap(bloom, bloom)</li>
         <li>operator==(bloom, bloom)</li>
         <li>operator!=(bloom, bloom)</li>
@@ -203,8 +217,8 @@
 
     <br/>
 
+ <a name="default_constructor"></a>
     <div class="func_ref">
- <a name="default_constructor"></a>
       <div class="ref_listing"><code class="c_func">counting_bloom_filter</code>();</div>
       <dl>
         <dt>Description</dt>
@@ -214,32 +228,91 @@
       </dl>
     </div>
 
+ <a name="range_constructor"></a>
     <div class="func_ref">
- <a name="range_constructor"></a>
       <div class="ref_listing"><code class="c_func">counting_bloom_filter</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);</div>
       <dl>
         <dt>Description</dt>
         <dd>Constructs a counting_bloom_filter by inserting all the elements in the range (start, end).</dd>
+ <dt>Throws</dt>
+ <dd>May throw bin_overflow exception if an insertion makes the value of
+ a bin greater than 2**BitsPerBin</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(n*k)</span>.</dd>
       </dl>
     </div>
 
+ <a name="ilist_constructor"></a>
     <div class="func_ref">
- <a name="ilist_constructor"></a>
       <div class="ref_listing"><code class="c_func">counting_bloom_filter</code>(<code class="c_keyword">const</code> <code class="c_namespace">std::initializer</code>&lt;<code class="c_type">T</code>&gt;&amp;);</div>
       <dl>
         <dt>Description</dt>
         <dd>Constructs a counting_bloom_filter by inserting all elements in the initializer list.</dd>
         <dt>Warning</dt>
         <dd>Only available in C++11-supporting compilers.</dd>
+ <dt>Throws</dt>
+ <dd>May throw bin_overflow exception if an insertion makes the value of
+ a bin greater than 2**BitsPerBin</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(n*k)</span>.</dd>
       </dl>
     </div>
 
+ <a name="num_bins"></a>
+ <div class="func_ref">
+ <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">num_bins</code>() <code class="c_keyword">const</code>;</div>
+ <dl>
+ <dt>Description</dt>
+ <dd>Returns the number of bins allocated for this Bloom filter.</dd>
+ <dt>Returns</dt>
+ <dd>Value of template parameter NumBins.</dd>
+ <dt>Complexity</dt>
+ <dd><span class="complexity">O(1)</span>.</dd>
+ </dl>
+ </div>
+
+ <a name="bits_per_bin"></a>
+ <div class="func_ref">
+ <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">bits_per_bin</code>() <code class="c_keyword">const</code>;</div>
+ <dl>
+ <dt>Description</dt>
+ <dd>Returns the number of bits used per bin.</dd>
+ <dt>Returns</dt>
+ <dd>Value of template parameter BitsPerBin.</dd>
+ <dt>Complexity</dt>
+ <dd><span class="complexity">O(1)</span>.</dd>
+ </dl>
+ </div>
+
+ <a name="bins_per_slot"></a>
+ <div class="func_ref">
+ <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">bins_per_slot</code>() <code class="c_keyword">const</code>;</div>
+ <dl>
+ <dt>Description</dt>
+ <dd>Returns the number of bins that fit in a single slot of the
+ data structure's internal storage.</dd>
+ <dt>Returns</dt>
+ <dd>sizeof(Block) * 8 / BitsPerBin</dd>
+ <dt>Complexity</dt>
+ <dd><span class="complexity">O(1)</span>.</dd>
+ </dl>
+ </div>
+
+ <a name="mask"></a>
+ <div class="func_ref">
+ <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">mask</code>() <code class="c_keyword">const</code>;</div>
+ <dl>
+ <dt>Description</dt>
+ <dd>Returns the mask used internally to extract a bin from a slot.</dd>
+ <dt>Returns</dt>
+ <dd>static_cast&lt;Block&gt;(0 - 1) &gt;&gt; (sizeof(Block)*8 - BitsPerBin).</dd>
+ <dt>Complexity</dt>
+ <dd><span class="complexity">O(1)</span>.</dd>
+ </dl>
+ </div>
+
+ <a name="bit_capacity"></a>
     <div class="func_ref">
- <a name="bit_capacity"></a>
       <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">bit_capacity</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -251,9 +324,8 @@
       </dl>
     </div>
 
-
+ <a name="num_hash_functions"></a>
     <div class="func_ref">
- <a name="num_hash_functions"></a>
       <div class="ref_listing"><code class="c_type">size_t</code><code class="c_func"> num_hash_functions</code>()<code class="c_keyword"> const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -265,8 +337,8 @@
       </dl>
     </div>
 
+ <a name="false_positive_rate"></a>
     <div class="func_ref">
- <a name="false_positive_rate"></a>
       <div class="ref_listing"><code class="c_type">double </code><code class="c_func">false_positive_rate</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -278,8 +350,8 @@
       </dl>
     </div>
 
+ <a name="empty"></a>
     <div class="func_ref">
- <a name="empty"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">empty</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -291,8 +363,8 @@
       </dl>
     </div>
 
+ <a name="count"></a>
     <div class="func_ref">
- <a name="count"></a>
       <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">count</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -305,72 +377,72 @@
       </dl>
     </div>
 
+ <a name="insert"></a>
     <div class="func_ref">
- <a name="insert"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">insert</code>(<code class="c_keyword">const</code> <code class="c_type">T&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
         <dd>Inserts an element into the Bloom filter.</dd>
         <dt>Post-condition</dt>
         <dd>At least 1 bit and at most num_hash_functions() bits of the Bloom filter will have been set.</dd>
- <dd>Throws</dd>
- <dt>May throw bin_overflow exception if an insertion makes the value of
- a bin greater than 2**BitsPerBin</dt>
+ <dt>Throws</dt>
+ <dd>May throw bin_overflow exception if an insertion makes the value of
+ a bin greater than 2**BitsPerBin</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(k)</span>.</dd>
       </dl>
     </div>
 
+ <a name="range_insert"></a>
     <div class="func_ref">
- <a name="range_insert"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">insert</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);</div>
       <dl>
         <dt>Description</dt>
         <dd>Inserts all elements in range (start, end).</dd>
         <dt>Post-condition</dt>
         <dd>At least n bits and at most (n * num_hash_functions()) bits of the Bloom filter will have been set, where n = distance(start, end).</dd>
- <dd>Throws</dd>
- <dt>May throw bin_overflow exception if an insertion makes the value of
- a bin greater than 2**BitsPerBin</dt>
+ <dt>Throws</dt>
+ <dd>May throw bin_overflow exception if an insertion makes the value of
+ a bin greater than 2**BitsPerBin</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(n*k)</span>.</dd>
       </dl>
     </div>
 
+ <a name="remove"></a>
     <div class="func_ref">
- <a name="remove"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">remove</code>(<code class="c_keyword">const</code> <code class="c_type">T&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
         <dd>Removes an element into the Bloom filter.</dd>
         <dt>Post-condition</dt>
         <dd>At least 1 bit and at most num_hash_functions() bits of the Bloom filter will have been set.</dd>
- <dd>Throws</dd>
- <dt>May throw bin_underflow exception if a removal makes the value of
- a bin less than 0.</dt>
+ <dt>Throws</dt>
+ <dd>May throw bin_underflow exception if a removal makes the value of
+ a bin less than 0.</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(k)</span>.</dd>
       </dl>
     </div>
 
+ <a name="range_remove"></a>
     <div class="func_ref">
- <a name="range_remove"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">remove</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);</div>
       <dl>
         <dt>Description</dt>
         <dd>Removes all elements in range (start, end).</dd>
         <dt>Post-condition</dt>
         <dd>At least n bits and at most (n * num_hash_functions()) bits of the Bloom filter will have been set, where n = distance(start, end).</dd>
- <dd>Throws</dd>
- <dt>May throw bin_underflow exception if a removal makes the value of
- a bin less than 0.</dt>
+ <dt>Throws</dt>
+ <dd>May throw bin_underflow exception if a removal makes the value of
+ a bin less than 0.</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(n*k)</span>.</dd>
       </dl>
     </div>
 
+ <a name="probably_contains"></a>
     <div class="func_ref">
- <a name="probably_contains"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">probably_contains</code>(<code class="c_keyword">const</code> <code class="c_type">T&amp;</code>) <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -384,8 +456,8 @@
       </dl>
     </div>
 
+ <a name="clear"></a>
     <div class="func_ref">
- <a name="clear"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">clear</code>();</div>
       <dl>
         <dt>Description</dt>
@@ -397,8 +469,8 @@
       </dl>
     </div>
 
+ <a name="swap"></a>
     <div class="func_ref">
- <a name="swap"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">swap</code>(<code class="c_type">counting_bloom_filter</code>&amp;);</div>
       <dl>
         <dt>Description</dt>
@@ -408,54 +480,63 @@
       </dl>
     </div>
 
+ <a name="union_assign"></a>
     <div class="func_ref">
- <a name="union_assign"></a>
- <div class="ref_listing"><code class="c_type">counting_bloom_filter&amp;</code> <code class="c_func">operator|=</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code>);</div>
+ <div class="ref_listing"><code class="c_type">counting_bloom_filter&amp;</code> <code class="c_func">experimental_union_assign</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
- <dd>Performs a union on a per-bin basis.</dd>
+ <dd>Performs a union on a per-slot basis.</dd>
         <dt>Returns</dt>
         <dd>Returns a reference to <code class="c_keyword">this</code>.</dd>
         <dt>Post-condition</dt>
         <dd>The number of bits set in <code class="c_keyword">this</code> will be greater than or equal to the number of bits set before the operation.</dd>
+ <dt>Warning</dt>
+ <dd>This operation is only an approximation. The resulting Bloom filter
+ may have very high bin values. See regression suite for details.</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(n)</span>.</dd>
       </dl>
     </div>
 
+ <a name="intersect_assign"></a>
     <div class="func_ref">
- <a name="intersect_assign"></a>
- <div class="ref_listing"><code class="c_type">counting_bloom_filter&amp;</code> <code class="c_func">operator&amp;=</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code>);</div>
+ <div class="ref_listing"><code class="c_type">counting_bloom_filter&amp;</code> <code class="c_func">experimental_intersect_assign</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
- <dd>Performs an intersection on a per-bin basis.</dd>
+ <dd>Performs an intersection on a per-slot basis.</dd>
         <dt>Returns</dt>
         <dd>Returns a reference to <code class="c_keyword">this</code>.</dd>
         <dt>Post-condition</dt>
         <dd>The number of bits set in <code class="c_keyword">this</code> will be less than or equal to the number of bits set before the operation.</dd>
+ <dt>Warning</dt>
+ <dd>This operation is only an approximation. The resulting Bloom filter
+ may have false negatives. See regression suite for details.</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(n)</span>.</dd>
       </dl>
     </div>
 
+ <a name="union"></a>
     <div class="func_ref">
- <a name="union"></a>
- <div class="ref_listing"><code class="c_type">counting_bloom_filter&amp;</code> <code class="c_func">operator|</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
+ <div class="ref_listing"><code class="c_type">counting_bloom_filter&amp;</code> <code class="c_func">experimental_union</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
- <dd>Performs a union on a per-bin basis.</dd>
+ <dd>Performs a union on a per-slot basis.</dd>
         <dt>Returns</dt>
         <dd>Returns a new, stack-allocated Bloom filter that is the result of performing a union between the lhs and the rhs.</dd>
         <dt>Post-condition</dt>
         <dd>The number of bits set in the new filter will be greater than or equal to the number of bits set in max(lhs.count(), rhs.count()).</dd>
+ <dt>Warning</dt>
+ <dd>This operation is only an approximation. The resulting Bloom filter
+ may have very high bin values. See regression suite for details.</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(n)</span>.</dd>
       </dl>
     </div>
 
+ <a name="intersect"></a>
     <div class="func_ref">
- <a name="intersect"></a>
- <div class="ref_listing"><code class="c_type">counting_bloom_filter&amp;</code> <code class="c_func">operator&amp;</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
+ <div class="ref_listing"><code class="c_type">counting_bloom_filter&amp;</code> <code class="c_func">experimental_intersect</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
         <dd>Performs an intersection on a per-bin basis.</dd>
@@ -463,13 +544,16 @@
         <dd>Returns a new, stack-allocated Bloom filter that is the result of performing an intersect between the lhs and the rhs.</dd>
         <dt>Post-condition</dt>
         <dd>The number of bits set in the new filter will be less than or equal to the number of bits set in min(lhs.count(), rhs.count()).</dd>
+ <dt>Warning</dt>
+ <dd>This operation is only an approximation. The resulting Bloom filter
+ may have false negatives. See regression suite for details.</dd>
         <dt>Complexity</dt>
         <dd><span class="complexity">O(n)</span>.</dd>
       </dl>
     </div>
 
+ <a name="global_swap"></a>
     <div class="func_ref">
- <a name="global_swap"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">swap</code>(<code class="c_type">counting_bloom_filter</code>&amp;, <code class="c_type">counting_bloom_filter</code>&amp;);</div>
       <dl>
         <dt>Description</dt>
@@ -479,8 +563,8 @@
       </dl>
     </div>
 
+ <a name="operator_equality"></a>
     <div class="func_ref">
- <a name="operator_equality"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">operator==</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -492,8 +576,8 @@
       </dl>
     </div>
 
+ <a name="operator_inequality"></a>
     <div class="func_ref">
- <a name="operator_inequality"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">operator!=</code>(<code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">counting_bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>

Modified: sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/dynamic_bloom.html
==============================================================================
--- sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/dynamic_bloom.html (original)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/reference/dynamic_bloom.html 2011-08-04 15:06:09 EDT (Thu, 04 Aug 2011)
@@ -52,6 +52,8 @@
         <code class="c_keyword">typedef</code> <code class="c_type">HashFunctions hash_function_type</code>;
         <code class="c_keyword">typedef</code> <code class="c_type">Block block_type</code>;
         <code class="c_keyword">typedef</code> <code class="c_type">Allocator allocator_type</code>;
+ <code class="c_keyword">typedef</code> <code class="c_type">dynamic_bitset</code>&lt;<code class="c_type">Block</code>, <code class="c_type">Allocator</code>&gt; <code class="c_type">bitset_type</code>;
+ <code class="c_keyword">typedef</code> <code class="c_type">dynamic_bloom_filter</code>&lt<code class="c_type">T</code>, <code class="c_type">HashFunctions</code>, <code class="c_type">Block</code>, <code class="c_type">Allocator</code>&gt; <code class="c_type">this_type</code>;
 
         <code class="c_comment">// constructors</code>
         <code class="c_func">dynamic_bloom_filter</code>();
@@ -180,8 +182,8 @@
 
     <br/>
 
+ <a name="default_constructor"></a>
     <div class="func_ref">
- <a name="default_constructor"></a>
       <div class="ref_listing"><code class="c_func">dynamic_bloom_filter</code>();</div>
       <dl>
         <dt>Description</dt>
@@ -195,8 +197,8 @@
       </dl>
     </div>
 
+ <a name="capacity_constructor"></a>
     <div class="func_ref">
- <a name="capacity_constructor"></a>
       <div class="ref_listing"><code class="c_func">dynamic_bloom_filter</code>(<code class="c_keyword">const</code> <code class="c_type">size_t</code> <code class="c_id">capacity</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -208,8 +210,8 @@
       </dl>
     </div>
 
+ <a name="range_constructor"></a>
     <div class="func_ref">
- <a name="range_constructor"></a>
       <div class="ref_listing"><code class="c_func">dynamic_bloom_filter</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -221,8 +223,8 @@
       </dl>
     </div>
 
+ <a name="bit_capacity"></a>
     <div class="func_ref">
- <a name="bit_capacity"></a>
       <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">bit_capacity</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -235,8 +237,8 @@
     </div>
 
 
+ <a name="num_hash_functions"></a>
     <div class="func_ref">
- <a name="num_hash_functions"></a>
       <div class="ref_listing"><code class="c_type">size_t</code><code class="c_func"> num_hash_functions</code>()<code class="c_keyword"> const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -248,8 +250,8 @@
       </dl>
     </div>
 
+ <a name="false_positive_rate"></a>
     <div class="func_ref">
- <a name="false_positive_rate"></a>
       <div class="ref_listing"><code class="c_type">double </code><code class="c_func">false_positive_rate</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -261,8 +263,8 @@
       </dl>
     </div>
 
+ <a name="empty"></a>
     <div class="func_ref">
- <a name="empty"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">empty</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -276,8 +278,8 @@
       </dl>
     </div>
 
+ <a name="count"></a>
     <div class="func_ref">
- <a name="count"></a>
       <div class="ref_listing"><code class="c_type">size_t</code> <code class="c_func">count</code>() <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -291,8 +293,8 @@
       </dl>
     </div>
 
+ <a name="insert"></a>
     <div class="func_ref">
- <a name="insert"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">insert</code>(<code class="c_keyword">const</code> <code class="c_type">T&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -304,8 +306,8 @@
       </dl>
     </div>
 
+ <a name="range_insert"></a>
     <div class="func_ref">
- <a name="range_insert"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">insert</code>(<code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">start</code>, <code class="c_keyword">const</code> <code class="c_type">InputIterator</code> <code class="c_id">end</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -317,8 +319,8 @@
       </dl>
     </div>
 
+ <a name="probably_contains"></a>
     <div class="func_ref">
- <a name="probably_contains"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">probably_contains</code>(<code class="c_keyword">const</code> <code class="c_type">T&amp;</code>) <code class="c_keyword">const</code>;</div>
       <dl>
         <dt>Description</dt>
@@ -332,8 +334,8 @@
       </dl>
     </div>
 
+ <a name="clear"></a>
     <div class="func_ref">
- <a name="clear"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">clear</code>();</div>
       <dl>
         <dt>Description</dt>
@@ -347,8 +349,8 @@
       </dl>
     </div>
 
+ <a name="swap"></a>
     <div class="func_ref">
- <a name="swap"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">swap</code>(<code class="c_type">bloom_filter</code>&amp;);</div>
       <dl>
         <dt>Description</dt>
@@ -358,8 +360,8 @@
       </dl>
     </div>
 
+ <a name="resize"></a>
     <div class="func_ref">
- <a name="resize"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">resize</code>(<code class="c_type">size_t</code> <code class="c_id">new_capacity</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -373,8 +375,8 @@
       </dl>
     </div>
 
+ <a name="union_assign"></a>
     <div class="func_ref">
- <a name="union_assign"></a>
       <div class="ref_listing"><code class="c_type">bloom_filter&amp;</code> <code class="c_func">operator|=</code>(<code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -385,6 +387,9 @@
         <dd>Returns a reference to <code class="c_keyword">this</code>.</dd>
         <dt>Post-condition</dt>
         <dd>The number of bits set in <code class="c_keyword">this</code> will be greater than or equal to the number of bits set before the operation.</dd>
+ <dt>Throws</dt>
+ <dd>incompatible_size exception if the argument Bloom filters
+ have a different bit_capacity.</dd>
         <dt>Complexity</dt>
         <dd>Depends on the implementation of
         <a href="http://www.boost.org/doc/libs/1_47_0/libs/dynamic_bitset/dynamic_bitset.html#member-functions">
@@ -392,8 +397,8 @@
       </dl>
     </div>
 
+ <a name="intersect_assign"></a>
     <div class="func_ref">
- <a name="intersect_assign"></a>
       <div class="ref_listing"><code class="c_type">bloom_filter&amp;</code> <code class="c_func">operator&amp;=</code>(<code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -404,6 +409,9 @@
         <dd>Returns a reference to <code class="c_keyword">this</code>.</dd>
         <dt>Post-condition</dt>
         <dd>The number of bits set in <code class="c_keyword">this</code> will be less than or equal to the number of bits set before the operation.</dd>
+ <dt>Throws</dt>
+ <dd>incompatible_size exception if the argument Bloom filters
+ have a different bit_capacity.</dd>
         <dt>Complexity</dt>
         <dd>Depends on the implementation of
         <a href="http://www.boost.org/doc/libs/1_47_0/libs/dynamic_bitset/dynamic_bitset.html#member-functions">
@@ -411,8 +419,8 @@
       </dl>
     </div>
 
+ <a name="union"></a>
     <div class="func_ref">
- <a name="union"></a>
       <div class="ref_listing"><code class="c_type">bloom_filter&amp;</code> <code class="c_func">operator|</code>(<code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -423,6 +431,9 @@
         <dd>Returns a new, stack-allocated Bloom filter that is the result of performing a union between the lhs and the rhs.</dd>
         <dt>Post-condition</dt>
         <dd>The number of bits set in the new filter will be greater than or equal to the number of bits set in max(lhs.count(), rhs.count()).</dd>
+ <dt>Throws</dt>
+ <dd>incompatible_size exception if the argument Bloom filters
+ have a different bit_capacity.</dd>
         <dt>Complexity</dt>
         <dd>Depends on the implementation of
         <a href="http://www.boost.org/doc/libs/1_47_0/libs/dynamic_bitset/dynamic_bitset.html#member-functions">
@@ -430,8 +441,8 @@
       </dl>
     </div>
 
+ <a name="intersect"></a>
     <div class="func_ref">
- <a name="intersect"></a>
       <div class="ref_listing"><code class="c_type">bloom_filter&amp;</code> <code class="c_func">operator&amp;</code>(<code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
@@ -442,6 +453,9 @@
         <dd>Returns a new, stack-allocated Bloom filter that is the result of performing an intersect between the lhs and the rhs.</dd>
         <dt>Post-condition</dt>
         <dd>The number of bits set in the new filter will be less than or equal to the number of bits set in min(lhs.count(), rhs.count()).</dd>
+ <dt>Throws</dt>
+ <dd>incompatible_size exception if the argument Bloom filters
+ have a different bit_capacity.</dd>
         <dt>Complexity</dt>
         <dd>Depends on the implementation of
         <a href="http://www.boost.org/doc/libs/1_47_0/libs/dynamic_bitset/dynamic_bitset.html#member-functions">
@@ -449,8 +463,8 @@
       </dl>
     </div>
 
+ <a name="global_swap"></a>
     <div class="func_ref">
- <a name="global_swap"></a>
       <div class="ref_listing"><code class="c_type">void</code> <code class="c_func">swap</code>(<code class="c_type">bloom_filter</code>&amp;, <code class="c_type">bloom_filter</code>&amp;);</div>
       <dl>
         <dt>Description</dt>
@@ -460,14 +474,17 @@
       </dl>
     </div>
 
+ <a name="operator_equality"></a>
     <div class="func_ref">
- <a name="operator_equality"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">operator==</code>(<code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
         <dd>Compares the bits of the argument Bloom filters for equality.</dd>
         <dt>Returns</dt>
         <dd>True if the bits match, false otherwise.</dd>
+ <dt>Throws</dt>
+ <dd>incompatible_size exception if the argument Bloom filters
+ have a different bit_capacity.</dd>
         <dt>Complexity</dt>
         <dd>Depends on the implementation of
         <a href="http://www.boost.org/doc/libs/1_47_0/libs/dynamic_bitset/dynamic_bitset.html#member-functions">
@@ -475,14 +492,17 @@
       </dl>
     </div>
 
+ <a name="operator_inequality"></a>
     <div class="func_ref">
- <a name="operator_inequality"></a>
       <div class="ref_listing"><code class="c_type">bool</code> <code class="c_func">operator!=</code>(<code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code> <code class="c_id">lhs</code>, <code class="c_keyword">const</code> <code class="c_type">bloom_filter&amp;</code> <code class="c_id">rhs</code>);</div>
       <dl>
         <dt>Description</dt>
         <dd>Compares the bits of the argument Bloom filters for equality.</dd>
         <dt>Returns</dt>
         <dd>True if the bits don't match, false otherwise.</dd>
+ <dt>Throws</dt>
+ <dd>incompatible_size exception if the argument Bloom filters
+ have a different bit_capacity.</dd>
         <dt>Complexity</dt>
         <dd>Depends on the implementation of
         <a href="http://www.boost.org/doc/libs/1_47_0/libs/dynamic_bitset/dynamic_bitset.html#member-functions">

Modified: sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/tut/removing.html
==============================================================================
--- sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/tut/removing.html (original)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/tut/removing.html 2011-08-04 15:06:09 EDT (Thu, 04 Aug 2011)
@@ -42,9 +42,10 @@
 
     <p>
       Element removal is an operation supported only by the counting
- Bloom filters. <em>remove</em> can introduce false negatives, so
- it must be used with caution. The list below highlights the
- possibilities:
+ Bloom filters. Depending on the implementation of <em>remove</em>,
+ false negatives can be introduced. This implementation
+ <strong>does not</strong> allow false negatives. The following
+ means of reaching a false negative are ordinarily possible:
     </p>
 
     <ul>
@@ -53,11 +54,12 @@
     </ul>
 
     <p>
- This implementation does not check for either error.
+ This implementation checks for both kinds of errors, and throws
+ an exception when one of the errors is encountered.
     </p>
 
     <div class="example">
- <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">int</code>, 1000, 2&gt; <code class="c_id">bloom</code>;
+ <code class="c_type">counting_bloom_filter</code>&lt;<code class="c_type">int</code>, 1000, 2, 2&gt; <code class="c_id">bloom</code>;
       
       bloom.insert(1);
       bloom.probably_contains(1); <code class="c_comment">// true</code>
@@ -67,11 +69,11 @@
       bloom.insert(1); <code class="c_comment">// bin[1] = 01 </code>
       bloom.insert(1); <code class="c_comment">// bin[1] = 10 </code>
       bloom.insert(1); <code class="c_comment">// bin[1] = 11 </code>
- bloom.insert(1); <code class="c_comment">// bin[1] = 00 </code>
- bloom.probably_contains(1); <code class="c_comment">// overflow, false</code>
+ bloom.insert(1); <code class="c_comment">// bin[1] = 11, exception thrown </code>
+ bloom.probably_contains(1); <code class="c_comment">// true</code>
 
- bloom.remove(1); <code class="c_comment">// bin[1] = 11 </code>
- bloom.probably_contains(1); <code class="c_comment">// underflow, true</code>
+ bloom.remove(1); <code class="c_comment">// bin[1] = 00, exception thrown </code>
+ bloom.probably_contains(1); <code class="c_comment">// false</code>
     </div>
 
     <p>

Modified: sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/tut/tips.html
==============================================================================
--- sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/tut/tips.html (original)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/doc/html/tut/tips.html 2011-08-04 15:06:09 EDT (Thu, 04 Aug 2011)
@@ -82,12 +82,6 @@
       Refer to the bibliography for more details.
     </p>
 
- <h3>False Negatives</h3>
- <p>
- A false negative can occur in any Bloom filter that supports a <em>remove</em>
- operation.
- </p>
-
     <h3>Hasher Set Trade-Offs</h3>
     <p>
       A fast Bloom filter will prefer to use fewer and faster hashers. If your


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk