|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r53769 - in sandbox/bloom_filter/trunk: boost/bloom_filter boost/bloom_filter/detail libs/bloom_filter/test
From: mikhailberis_at_[hidden]
Date: 2009-06-09 03:33:24
Author: mikhailberis
Date: 2009-06-09 03:33:22 EDT (Tue, 09 Jun 2009)
New Revision: 53769
URL: http://svn.boost.org/trac/boost/changeset/53769
Log:
Changes:
* Adding default constructed filter test.
* Adding default hash function implementation.
* Adding bloom_filter convenience include header.
* Simplifying test for bloom filter implementation.
Added:
sandbox/bloom_filter/trunk/boost/bloom_filter/detail/
sandbox/bloom_filter/trunk/boost/bloom_filter/detail/default_hash.hpp (contents, props changed)
sandbox/bloom_filter/trunk/libs/bloom_filter/test/default_constructed_filter_test.cpp (contents, props changed)
Text files modified:
sandbox/bloom_filter/trunk/boost/bloom_filter/bloom_filter.hpp | 9 ++++++++-
sandbox/bloom_filter/trunk/libs/bloom_filter/test/Jamfile.v2 | 4 +++-
sandbox/bloom_filter/trunk/libs/bloom_filter/test/bloom_filter_test.cpp | 5 -----
3 files changed, 11 insertions(+), 7 deletions(-)
Modified: sandbox/bloom_filter/trunk/boost/bloom_filter/bloom_filter.hpp
==============================================================================
--- sandbox/bloom_filter/trunk/boost/bloom_filter/bloom_filter.hpp (original)
+++ sandbox/bloom_filter/trunk/boost/bloom_filter/bloom_filter.hpp 2009-06-09 03:33:22 EDT (Tue, 09 Jun 2009)
@@ -12,6 +12,7 @@
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/add_reference.hpp>
+#include <boost/bloom_filter/detail/default_hash.hpp>
namespace boost {
@@ -21,18 +22,24 @@
std::bitset<M> bit_set;
array<function<size_t(Input)>, K> hash_array;
- typedef typename add_const<typename add_reference<Input>::type>::type const_ref;
+ typedef typename add_reference<typename add_const<Input>::type>::type const_ref;
public:
typedef std::bitset<M> bitset_type;
static size_t const size = M;
static size_t const functions = K;
+ typedef Input element_type;
explicit bloom_filter(
array<function<size_t(Input)>, K> const & hash_functions
) :
hash_array(hash_functions) {}
+ bloom_filter() {
+ for(size_t k = 0; k < K; ++k)
+ hash_array[k] = detail::default_hash<Input,M>(k);
+ }
+
bloom_filter(bloom_filter const & other) :
bit_set(other.bit_set), hash_array(other.hash_array) {}
Added: sandbox/bloom_filter/trunk/boost/bloom_filter/detail/default_hash.hpp
==============================================================================
--- (empty file)
+++ sandbox/bloom_filter/trunk/boost/bloom_filter/detail/default_hash.hpp 2009-06-09 03:33:22 EDT (Tue, 09 Jun 2009)
@@ -0,0 +1,39 @@
+#ifndef BOOST_BLOOM_FILTER_DETAIL_DEFAULT_HASH_20090609_0
+#define BOOST_BLOOM_FILTER_DETAIL_DEFAULT_HASH_20090609_0
+
+#include <string>
+#include <boost/crc.hpp>
+#include <boost/type_traits/add_const.hpp>
+#include <boost/type_traits/add_reference.hpp>
+
+namespace boost {
+
+ namespace detail {
+
+ template <class Input, size_t M>
+ struct default_hash {
+ typedef typename add_reference<typename add_const<Input>::type>::type const_ref;
+
+ size_t offset_;
+ explicit default_hash(size_t offset)
+ : offset_(offset) {}
+
+ size_t operator()(std::string const & input) const {
+ crc_32_type crc32_computer;
+ crc32_computer.process_bytes(input.c_str(), input.size());
+ return (crc32_computer.checksum() + offset_) % M;
+ }
+
+ size_t operator()(const_ref input) const {
+ crc_32_type crc32_computer;
+ crc32_computer.process_bytes(&input, sizeof(input));
+ return (crc32_computer.checksum() + offset_) % M;
+ }
+ };
+
+ } // namespace detail
+
+} // namespace boost
+
+#endif
+
Modified: sandbox/bloom_filter/trunk/libs/bloom_filter/test/Jamfile.v2
==============================================================================
--- sandbox/bloom_filter/trunk/libs/bloom_filter/test/Jamfile.v2 (original)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/test/Jamfile.v2 2009-06-09 03:33:22 EDT (Tue, 09 Jun 2009)
@@ -3,7 +3,9 @@
{
test-suite "bloom_filter"
- : [ run bloom_filter_test.cpp ]
+ :
+ [ run bloom_filter_test.cpp ]
+ [ run default_constructed_filter_test.cpp ]
;
}
Modified: sandbox/bloom_filter/trunk/libs/bloom_filter/test/bloom_filter_test.cpp
==============================================================================
--- sandbox/bloom_filter/trunk/libs/bloom_filter/test/bloom_filter_test.cpp (original)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/test/bloom_filter_test.cpp 2009-06-09 03:33:22 EDT (Tue, 09 Jun 2009)
@@ -3,9 +3,6 @@
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#include <bitset>
-#include <cassert>
-#include <iostream>
#include <boost/bloom_filter.hpp>
#include <boost/detail/lightweight_test.hpp>
@@ -41,8 +38,6 @@
for(uint32_t i = 0; i < 10; ++i) filter.insert(i);
for(uint32_t i = 0; i < 10; ++i) assert(filter.contains(i));
filter_type::bitset_type bit_set = filter.state();
- for(uint32_t i = 0; i < filter_type::size ; ++i)
- cout << (bit_set[i] ? '1' : '0');
cout << endl;
// assignment test
filter_copy = filter;
Added: sandbox/bloom_filter/trunk/libs/bloom_filter/test/default_constructed_filter_test.cpp
==============================================================================
--- (empty file)
+++ sandbox/bloom_filter/trunk/libs/bloom_filter/test/default_constructed_filter_test.cpp 2009-06-09 03:33:22 EDT (Tue, 09 Jun 2009)
@@ -0,0 +1,20 @@
+// Copyright 2009 (c) Dean Michael Berris <mikhailberis_at_[hidden]>
+// 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)
+
+#include <boost/bloom_filter/bloom_filter.hpp>
+#include <boost/detail/lightweight_test.hpp>
+
+#define FILTER_SIZE 256
+
+using boost::bloom_filter;
+
+int main(int argc, char * argv[]) {
+ typedef bloom_filter<uint32_t, FILTER_SIZE, 3> filter_type;
+ filter_type filter; // default constructed
+ filter.insert(1u);
+ assert(filter.contains(1u));
+ return EXIT_SUCCESS;
+}
+
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