// Copyright (c) 2007-2008 Joseph Gauterin // // 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) // Tests class used by the Boost.Swap tests #ifndef BOOST_UTILITY_SWAP_TEST_CLASS_HPP #define BOOST_UTILITY_SWAP_TEST_CLASS_HPP class swap_test_class { int m_data; public: explicit swap_test_class(int arg = 0) : m_data(arg) { ++constructCount(); } ~swap_test_class() { ++destructCount(); } swap_test_class(const swap_test_class& arg) : m_data(arg.m_data) { ++copyCount(); ++destructCount(); } swap_test_class& operator=(const swap_test_class& arg) { m_data = arg.m_data; ++copyCount(); return *this; } void swap(swap_test_class& other) { const int temp = m_data; m_data = other.m_data; other.m_data = temp; ++swapCount(); } int get_data() const { return m_data; } void set_data(int arg) { m_data = arg; } static unsigned int swap_count(){ return swapCount(); } static unsigned int copy_count(){ return copyCount(); } static unsigned int construct_count(){ return constructCount(); } static unsigned int destruct_count(){ return destructCount(); } static void reset() { swapCount() = 0; copyCount() = 0; constructCount() = 0; destructCount() = 0; } private: static unsigned int& swapCount() { static unsigned int value = 0; return value; } static unsigned int& copyCount() { static unsigned int value = 0; return value; } static unsigned int& constructCount() { static unsigned int value = 0; return value; } static unsigned int& destructCount() { static unsigned int value = 0; return value; } }; inline bool operator==(const swap_test_class & lhs, const swap_test_class & rhs) { return lhs.get_data() == rhs.get_data(); } inline bool operator!=(const swap_test_class & lhs, const swap_test_class & rhs) { return !(lhs == rhs); } #endif