mirror of
https://github.com/boostorg/unordered.git
synced 2025-05-11 13:34:06 +00:00
Merged revisions 45277-45280 via svnmerge from https://svn.boost.org/svn/boost/branches/unordered/trunk ........ r45277 | danieljames | 2008-05-11 14:09:05 +0100 (Sun, 11 May 2008) | 2 lines Put the prime number list into a template so that they (hopefully) only get included once. ........ r45278 | danieljames | 2008-05-11 14:12:27 +0100 (Sun, 11 May 2008) | 2 lines Add a quick explanation for an odd looking constructor. ........ r45279 | danieljames | 2008-05-11 14:12:37 +0100 (Sun, 11 May 2008) | 2 lines No need to include the exception objects in helpers/strong.hpp. Now helpers on depend on the forwarding header from the objects. ........ r45280 | danieljames | 2008-05-11 14:14:31 +0100 (Sun, 11 May 2008) | 1 line Instead of comparing potentially dangling pointers in move_tests check if any objects have been constructed. ........ [SVN r45574]
62 lines
1.6 KiB
C++
62 lines
1.6 KiB
C++
|
|
// Copyright 2008 Daniel James.
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or move at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
#if !defined(BOOST_UNORDERED_TEST_HELPERS_COUNT_HEAD)
|
|
#define BOOST_UNORDERED_TEST_HELPERS_COUNT_HEAD
|
|
|
|
namespace test {
|
|
struct object_count {
|
|
int instances;
|
|
int constructions;
|
|
|
|
object_count() : instances(0), constructions(0) {}
|
|
void reset() { *this = object_count(); }
|
|
|
|
void construct() {
|
|
++instances;
|
|
++constructions;
|
|
}
|
|
|
|
void destruct() {
|
|
if(instances == 0) {
|
|
BOOST_ERROR("Unbalanced constructions.");
|
|
}
|
|
else {
|
|
--instances;
|
|
}
|
|
}
|
|
|
|
bool operator==(object_count const& x) const {
|
|
return instances == x.instances &&
|
|
constructions == x.constructions;
|
|
}
|
|
|
|
bool operator!=(object_count const& x) const {
|
|
return !(*this == x);
|
|
}
|
|
};
|
|
|
|
template <class T>
|
|
struct counted_object
|
|
{
|
|
static object_count count_;
|
|
|
|
counted_object() { count_.construct(); }
|
|
counted_object(counted_object const&) { count_.construct(); }
|
|
~counted_object() { count_.destruct(); }
|
|
};
|
|
|
|
template <class T> object_count counted_object<T>::count_;
|
|
|
|
struct globally_counted_object
|
|
: counted_object<globally_counted_object> {};
|
|
|
|
namespace {
|
|
object_count& global_object_count = globally_counted_object::count_;
|
|
}
|
|
}
|
|
|
|
#endif
|