Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/signals/src/trackable.cpp @ 35

Last change on this file since 35 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 1.7 KB
Line 
1// Boost.Signals library
2
3// Copyright Douglas Gregor 2001-2004. Use, modification and
4// distribution is subject to the Boost Software License, Version
5// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7
8// For more information, see http://www.boost.org
9
10#define BOOST_SIGNALS_SOURCE
11
12#include <boost/signals/trackable.hpp>
13#include <algorithm>
14
15namespace boost {
16  namespace BOOST_SIGNALS_NAMESPACE {
17    void trackable::signal_disconnected(void* obj, void* data)
18    {
19      trackable* self = reinterpret_cast<trackable*>(obj);
20      connection_iterator* signal =
21        reinterpret_cast<connection_iterator*>(data);
22
23      // If we're dying, don't bother erasing the connection from the list;
24      // it'll be gone anyway
25      if (!self->dying) {
26        self->connected_signals.erase(*signal);
27      }
28
29      // This iterator pointer won't ever be used again
30      delete signal;
31    }
32
33    void
34    trackable::signal_connected(connection c,
35                                BOOST_SIGNALS_NAMESPACE::detail::bound_object& binding) const
36    {
37      // Insert the connection
38      connection_iterator pos =
39        connected_signals.insert(connected_signals.end(), c);
40
41      // Make this copy of the object disconnect when destroyed
42      pos->set_controlling();
43
44      binding.obj = const_cast<void*>(reinterpret_cast<const void*>(this));
45      binding.data = reinterpret_cast<void*>(new connection_iterator(pos));
46      binding.disconnect = &signal_disconnected;
47    }
48
49    trackable::~trackable()
50    {
51      dying = true;
52    }
53  } // end namespace BOOST_SIGNALS_NAMESPACE
54}
55
56#ifndef BOOST_MSVC
57// Explicit instantiations to keep in the library
58template class std::list<boost::BOOST_SIGNALS_NAMESPACE::connection>;
59#endif
Note: See TracBrowser for help on using the repository browser.