mirror of
https://github.com/boostorg/unordered.git
synced 2025-11-05 10:11:43 +01:00
Note that the previously rolled back commit was [53257], not [52357]. Merged revisions 52393-52394,52397,52884-52885,53255 via svnmerge from https://svn.boost.org/svn/boost/trunk ........ r52393 | danieljames | 2009-04-14 18:23:37 +0100 (Tue, 14 Apr 2009) | 2 lines Implement full extract_key for compilers without SFINAE and variadic templates. ........ r52394 | danieljames | 2009-04-14 18:23:51 +0100 (Tue, 14 Apr 2009) | 1 line Use emplace instead of insert in the backend as it's more appropriate. ........ r52397 | danieljames | 2009-04-14 18:51:34 +0100 (Tue, 14 Apr 2009) | 1 line Add stream output to the count test helper for unordered. ........ r52884 | danieljames | 2009-05-10 22:24:41 +0100 (Sun, 10 May 2009) | 19 lines Cherrypick some unordered container changes from sandbox. Not including anything which depends on the new move library. ------------------------------------------------------------------------ r52746 | danieljames | 2009-05-03 11:12:30 +0100 (Sun, 03 May 2009) | 1 line Merge latest unordered container changes. ------------------------------------------------------------------------ r52747 | danieljames | 2009-05-03 11:15:35 +0100 (Sun, 03 May 2009) | 4 lines Put the C++0x emplace implementations before the non-C++0x versions. I'm going to change the non-C++0x to be macro heavy emulations of the C++0x versions, so this will put the readable version first. ------------------------------------------------------------------------ r52748 | danieljames | 2009-05-03 11:15:44 +0100 (Sun, 03 May 2009) | 1 line Refactor the unordered implementation a tad, to make implementing emplace less painful. ------------------------------------------------------------------------ ........ r52885 | danieljames | 2009-05-10 22:25:09 +0100 (Sun, 10 May 2009) | 1 line Merge emplace support for sandbox - but without move support. ........ r53255 | danieljames | 2009-05-25 20:45:06 +0100 (Mon, 25 May 2009) | 1 line Unordered change log. ........ [SVN r53328]
74 lines
2.0 KiB
C++
74 lines
2.0 KiB
C++
|
|
// Copyright 2008-2009 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
|
|
|
|
#include <iostream>
|
|
|
|
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);
|
|
}
|
|
|
|
friend std::ostream& operator<<(std::ostream& out, object_count const& c) {
|
|
out<<"[instances: "<<c.instances<<", constructions: "<<c.constructions<<"]";
|
|
return out;
|
|
}
|
|
};
|
|
|
|
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> {};
|
|
|
|
// This won't be a problem as I'm only using a single compile unit
|
|
// in each test (this is actually require by the minimal test
|
|
// framework).
|
|
//
|
|
// boostinspect:nounnamed
|
|
namespace {
|
|
object_count& global_object_count = globally_counted_object::count_;
|
|
}
|
|
}
|
|
|
|
#endif
|