Home | History | Annotate | Download | only in utils
      1 //  (C) Copyright Gennadiy Rozental 2005-2008.
      2 //  Distributed under the Boost Software License, Version 1.0.
      3 //  (See accompanying file LICENSE_1_0.txt or copy at
      4 //  http://www.boost.org/LICENSE_1_0.txt)
      5 
      6 //  See http://www.boost.org/libs/test for the library home page.
      7 //
      8 //  File        : $RCSfile$
      9 //
     10 //  Version     : $Revision: 49312 $
     11 //
     12 //  Description : simple helpers for creating cusom output manipulators
     13 // ***************************************************************************
     14 
     15 #ifndef BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER
     16 #define BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER
     17 
     18 #include <boost/config.hpp>
     19 #include <boost/detail/workaround.hpp>
     20 
     21 #include <boost/noncopyable.hpp>
     22 
     23 #include <boost/test/detail/suppress_warnings.hpp>
     24 
     25 //____________________________________________________________________________//
     26 
     27 namespace boost {
     28 
     29 namespace unit_test {
     30 
     31 // ************************************************************************** //
     32 // **************                   singleton                  ************** //
     33 // ************************************************************************** //
     34 
     35 template<typename Derived>
     36 class singleton : private boost::noncopyable {
     37 public:
     38     static Derived& instance() { static Derived the_inst; return the_inst; }
     39 protected:
     40     singleton()  {}
     41     ~singleton() {}
     42 };
     43 
     44 } // namespace unit_test
     45 
     46 #define BOOST_TEST_SINGLETON_CONS( type )       \
     47 friend class boost::unit_test::singleton<type>; \
     48 type() {}                                       \
     49 /**/
     50 
     51 #if BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
     52 
     53 #define BOOST_TEST_SINGLETON_INST( inst ) \
     54 template class unit_test::singleton< BOOST_JOIN( inst, _t ) > ; \
     55 namespace { BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }
     56 
     57 #elif defined(__APPLE_CC__) && defined(__GNUC__) && __GNUC__ < 4
     58 #define BOOST_TEST_SINGLETON_INST( inst ) \
     59 static BOOST_JOIN( inst, _t)& inst = BOOST_JOIN (inst, _t)::instance();
     60 
     61 #else
     62 
     63 #define BOOST_TEST_SINGLETON_INST( inst ) \
     64 namespace { BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }
     65 
     66 #endif
     67 
     68 } // namespace boost
     69 
     70 //____________________________________________________________________________//
     71 
     72 #include <boost/test/detail/enable_warnings.hpp>
     73 
     74 #endif // BOOST_TEST_TRIVIAL_SIGNLETON_HPP_020505GER
     75