| // 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 |