check const containers

This commit is contained in:
Matei David
2014-08-14 16:27:21 -04:00
parent 11633b7d24
commit a684df24bd
9 changed files with 25 additions and 25 deletions

View File

@@ -58,7 +58,7 @@ struct avltree_node_checker
typedef bstree_node_checker<ValueTraits, NodePtrCompare, ExtraChecker> base_checker_t; typedef bstree_node_checker<ValueTraits, NodePtrCompare, ExtraChecker> base_checker_t;
typedef ValueTraits value_traits; typedef ValueTraits value_traits;
typedef typename value_traits::node_traits node_traits; typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node_ptr node_ptr; typedef typename node_traits::const_node_ptr const_node_ptr;
struct return_type struct return_type
: public base_checker_t::return_type : public base_checker_t::return_type
@@ -71,7 +71,7 @@ struct avltree_node_checker
: base_checker_t(comp, extra_checker) : base_checker_t(comp, extra_checker)
{} {}
void operator () (const node_ptr& p, void operator () (const const_node_ptr& p,
const return_type& check_return_left, const return_type& check_return_right, const return_type& check_return_left, const return_type& check_return_right,
return_type& check_return) return_type& check_return)
{ {

View File

@@ -1854,7 +1854,7 @@ class bstree_impl
} }
template <class ExtraChecker> template <class ExtraChecker>
void check(ExtraChecker extra_checker) void check(ExtraChecker extra_checker) const
{ {
typedef detail::key_nodeptr_comp<value_compare, value_traits> nodeptr_comp_t; typedef detail::key_nodeptr_comp<value_compare, value_traits> nodeptr_comp_t;
nodeptr_comp_t nodeptr_comp(this->comp(), &this->get_value_traits()); nodeptr_comp_t nodeptr_comp(this->comp(), &this->get_value_traits());
@@ -1865,7 +1865,7 @@ class bstree_impl
BOOST_INTRUSIVE_INVARIANT_ASSERT(this->sz_traits().get_size() == checker_return.node_count); BOOST_INTRUSIVE_INVARIANT_ASSERT(this->sz_traits().get_size() == checker_return.node_count);
} }
void check() void check() const
{ {
check(detail::empty_node_checker<ValueTraits>()); check(detail::empty_node_checker<ValueTraits>());
} }

View File

@@ -54,15 +54,15 @@ struct bstree_node_checker
typedef ExtraChecker base_checker_t; typedef ExtraChecker base_checker_t;
typedef ValueTraits value_traits; typedef ValueTraits value_traits;
typedef typename value_traits::node_traits node_traits; typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node_ptr node_ptr; typedef typename node_traits::const_node_ptr const_node_ptr;
struct return_type struct return_type
: public base_checker_t::return_type : public base_checker_t::return_type
{ {
return_type() : min_key_node_ptr(node_ptr()), max_key_node_ptr(node_ptr()), node_count(0) {} return_type() : min_key_node_ptr(const_node_ptr()), max_key_node_ptr(const_node_ptr()), node_count(0) {}
node_ptr min_key_node_ptr; const_node_ptr min_key_node_ptr;
node_ptr max_key_node_ptr; const_node_ptr max_key_node_ptr;
size_t node_count; size_t node_count;
}; };
@@ -70,7 +70,7 @@ struct bstree_node_checker
: base_checker_t(extra_checker), comp_(comp) : base_checker_t(extra_checker), comp_(comp)
{} {}
void operator () (const node_ptr& p, void operator () (const const_node_ptr& p,
const return_type& check_return_left, const return_type& check_return_right, const return_type& check_return_left, const return_type& check_return_right,
return_type& check_return) return_type& check_return)
{ {
@@ -1487,9 +1487,9 @@ class bstree_algorithms
} }
template<class Checker> template<class Checker>
static void check(const node_ptr & header, Checker checker, typename Checker::return_type& checker_return) static void check(const const_node_ptr& header, Checker checker, typename Checker::return_type& checker_return)
{ {
node_ptr root_node_ptr = NodeTraits::get_parent(header); const_node_ptr root_node_ptr = NodeTraits::get_parent(header);
if (!root_node_ptr) if (!root_node_ptr)
{ {
// check left&right header pointers // check left&right header pointers
@@ -1503,7 +1503,7 @@ class bstree_algorithms
// check subtree from root // check subtree from root
check_subtree(root_node_ptr, checker, checker_return); check_subtree(root_node_ptr, checker, checker_return);
// check left&right header pointers // check left&right header pointers
node_ptr p = root_node_ptr; const_node_ptr p = root_node_ptr;
while (NodeTraits::get_left(p)) { p = NodeTraits::get_left(p); } while (NodeTraits::get_left(p)) { p = NodeTraits::get_left(p); }
BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_left(header) == p); BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_left(header) == p);
p = root_node_ptr; p = root_node_ptr;
@@ -2069,10 +2069,10 @@ class bstree_algorithms
} }
template<class Checker> template<class Checker>
static void check_subtree(const node_ptr& node, Checker checker, typename Checker::return_type& check_return) static void check_subtree(const const_node_ptr& node, Checker checker, typename Checker::return_type& check_return)
{ {
node_ptr left = NodeTraits::get_left(node); const_node_ptr left = NodeTraits::get_left(node);
node_ptr right = NodeTraits::get_right(node); const_node_ptr right = NodeTraits::get_right(node);
typename Checker::return_type check_return_left; typename Checker::return_type check_return_left;
typename Checker::return_type check_return_right; typename Checker::return_type check_return_right;
if (left) if (left)

View File

@@ -311,11 +311,11 @@ struct empty_node_checker
{ {
typedef ValueTraits value_traits; typedef ValueTraits value_traits;
typedef typename value_traits::node_traits node_traits; typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node_ptr node_ptr; typedef typename node_traits::const_node_ptr const_node_ptr;
struct return_type {}; struct return_type {};
void operator () (const node_ptr&, const return_type&, const return_type&, return_type&) {} void operator () (const const_node_ptr&, const return_type&, const return_type&, return_type&) {}
}; };
template<class VoidPointer> template<class VoidPointer>

View File

@@ -2659,7 +2659,7 @@ class hashtable_impl
return size_type(*bound); return size_type(*bound);
} }
/// @cond /// @cond
void check() {} void check() const {}
private: private:
size_traits &priv_size_traits() size_traits &priv_size_traits()
{ return static_cast<size_traits&>(static_cast<data_type&>(*this)); } { return static_cast<size_traits&>(static_cast<data_type&>(*this)); }

View File

@@ -66,7 +66,7 @@ struct rbtree_node_checker
typedef bstree_node_checker<ValueTraits, NodePtrCompare, ExtraChecker> base_checker_t; typedef bstree_node_checker<ValueTraits, NodePtrCompare, ExtraChecker> base_checker_t;
typedef ValueTraits value_traits; typedef ValueTraits value_traits;
typedef typename value_traits::node_traits node_traits; typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node_ptr node_ptr; typedef typename node_traits::const_node_ptr const_node_ptr;
typedef typename base_checker_t::return_type return_type; typedef typename base_checker_t::return_type return_type;
@@ -74,7 +74,7 @@ struct rbtree_node_checker
: base_checker_t(comp, extra_checker) : base_checker_t(comp, extra_checker)
{} {}
void operator () (const node_ptr& p, void operator () (const const_node_ptr& p,
const return_type& check_return_left, const return_type& check_return_right, const return_type& check_return_left, const return_type& check_return_right,
return_type& check_return) return_type& check_return)
{ {

View File

@@ -905,14 +905,14 @@ class treap_impl
} }
template <class ExtraChecker> template <class ExtraChecker>
void check(ExtraChecker extra_checker) void check(ExtraChecker extra_checker) const
{ {
typedef detail::key_nodeptr_comp<priority_compare, value_traits> nodeptr_prio_comp_t; typedef detail::key_nodeptr_comp<priority_compare, value_traits> nodeptr_prio_comp_t;
nodeptr_prio_comp_t nodeptr_prio_comp(priv_pcomp(), &this->get_value_traits()); nodeptr_prio_comp_t nodeptr_prio_comp(priv_pcomp(), &this->get_value_traits());
tree_type::check(detail::treap_node_extra_checker<ValueTraits, nodeptr_prio_comp_t, ExtraChecker>(nodeptr_prio_comp, extra_checker)); tree_type::check(detail::treap_node_extra_checker<ValueTraits, nodeptr_prio_comp_t, ExtraChecker>(nodeptr_prio_comp, extra_checker));
} }
void check() void check() const
{ {
check(detail::empty_node_checker<ValueTraits>()); check(detail::empty_node_checker<ValueTraits>());
} }

View File

@@ -40,7 +40,7 @@ struct treap_node_extra_checker
typedef ExtraChecker base_checker_t; typedef ExtraChecker base_checker_t;
typedef ValueTraits value_traits; typedef ValueTraits value_traits;
typedef typename value_traits::node_traits node_traits; typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node_ptr node_ptr; typedef typename node_traits::const_node_ptr const_node_ptr;
typedef typename base_checker_t::return_type return_type; typedef typename base_checker_t::return_type return_type;
@@ -48,7 +48,7 @@ struct treap_node_extra_checker
: base_checker_t(extra_checker), prio_comp_(prio_comp) : base_checker_t(extra_checker), prio_comp_(prio_comp)
{} {}
void operator () (const node_ptr& p, void operator () (const const_node_ptr& p,
const return_type& check_return_left, const return_type& check_return_right, const return_type& check_return_left, const return_type& check_return_right,
return_type& check_return) return_type& check_return)
{ {

View File

@@ -73,7 +73,7 @@ void test_container( Container & c )
BOOST_TEST( it == itend ); BOOST_TEST( it == itend );
BOOST_TEST( c.size() == i ); BOOST_TEST( c.size() == i );
} }
c.check(); static_cast<const Container&>(c).check();
} }