123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
- //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)
- #include <boost/exception/exception.hpp>
- #include <boost/detail/lightweight_test.hpp>
- struct
- test_type
- {
- test_type( int & count ):
- count_(count)
- {
- BOOST_TEST(count_==42);
- count_=0;
- }
- ~test_type()
- {
- BOOST_TEST(!count_);
- count_=42;
- }
- void
- add_ref()
- {
- ++count_;
- }
- bool
- release()
- {
- if( --count_ )
- return false;
- else
- {
- delete this;
- return true;
- }
- }
- private:
- test_type( test_type const & );
- test_type & operator=( test_type const & );
- int & count_;
- };
- int
- main()
- {
- using boost::exception_detail::refcount_ptr;
- {
- refcount_ptr<test_type> x;
- BOOST_TEST(!x.get());
- }
- {
- int count=42;
- test_type * a=new test_type(count);
- BOOST_TEST(!count);
- {
- refcount_ptr<test_type> p;
- BOOST_TEST(0==count);
- p.adopt(a);
- BOOST_TEST(p.get()==a);
- BOOST_TEST(1==count);
- {
- refcount_ptr<test_type> q;
- q.adopt(p.get());
- BOOST_TEST(q.get()==a);
- BOOST_TEST(2==count);
- {
- refcount_ptr<test_type> t(p);
- BOOST_TEST(t.get()==a);
- BOOST_TEST(3==count);
- {
- refcount_ptr<test_type> n;
- n=t;
- BOOST_TEST(n.get()==a);
- BOOST_TEST(4==count);
- int cb=42;
- test_type * b=new test_type(cb);
- BOOST_TEST(0==cb);
- n.adopt(b);
- BOOST_TEST(1==cb);
- BOOST_TEST(n.get()==b);
- BOOST_TEST(3==count);
- n.adopt(0);
- BOOST_TEST(42==cb);
- }
- BOOST_TEST(t.get()==a);
- BOOST_TEST(3==count);
- }
- BOOST_TEST(q.get()==a);
- BOOST_TEST(2==count);
- }
- BOOST_TEST(p.get()==a);
- BOOST_TEST(1==count);
- }
- BOOST_TEST(42==count);
- }
- return boost::report_errors();
- }
|