diff options
author | Doug McLain <doug@nostar.net> | 2008-06-01 22:50:02 +0000 |
---|---|---|
committer | Doug McLain <doug@nostar.net> | 2008-06-01 22:50:02 +0000 |
commit | b8cb2f204ef293e67ce4274d16bfafb4181fbab9 (patch) | |
tree | 8b8c9d19e005658bc377e9fd4979003d842a3f31 /libs/sigc++2/sigc++/signal_base.h | |
parent | 4898bfb981e5987f01dad884ae115b4b209268d5 (diff) |
Remove sigc 2.0.18
git-svn-id: svn://localhost/ardour2/branches/3.0@3430 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/sigc++2/sigc++/signal_base.h')
-rw-r--r-- | libs/sigc++2/sigc++/signal_base.h | 261 |
1 files changed, 0 insertions, 261 deletions
diff --git a/libs/sigc++2/sigc++/signal_base.h b/libs/sigc++2/sigc++/signal_base.h deleted file mode 100644 index 3af33d3e99..0000000000 --- a/libs/sigc++2/sigc++/signal_base.h +++ /dev/null @@ -1,261 +0,0 @@ -// -*- c++ -*- -/* - * Copyright 2002, The libsigc++ Development Team - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef _SIGC_SIGNAL_BASE_H_ -#define _SIGC_SIGNAL_BASE_H_ - -#include <list> -#include <sigc++config.h> -#include <sigc++/type_traits.h> -#include <sigc++/trackable.h> -#include <sigc++/functors/slot.h> -#include <sigc++/functors/mem_fun.h> - -namespace sigc -{ - -namespace internal -{ - -/** Implementation of the signal interface. - * signal_impl manages a list of slots. When a slot becomes - * invalid (because some referred object dies), notify() is executed. - * notify() either calls sweep() directly or defers the execution of - * sweep() when the signal is being emitted. sweep() removes all - * invalid slot from the list. - */ -struct SIGC_API signal_impl -{ - typedef size_t size_type; - typedef std::list<slot_base>::iterator iterator_type; - typedef std::list<slot_base>::const_iterator const_iterator_type; - - signal_impl(); - - // only MSVC needs this to guarantee that all new/delete are executed from the DLL module -#ifdef SIGC_NEW_DELETE_IN_LIBRARY_ONLY - void* operator new(size_t size_); - void operator delete(void* p); -#endif - - /// Increments the reference counter. - inline void reference() - { ++ref_count_; } - - /// Increments the reference and execution counter. - inline void reference_exec() - { ++ref_count_; ++exec_count_; } - - /** Decrements the reference counter. - * The object is deleted when the reference counter reaches zero. - */ - inline void unreference() - { if (!(--ref_count_)) delete this; } - - /** Decrements the reference and execution counter. - * Invokes sweep() if the execution counter reaches zero and the - * removal of one or more slots has been deferred. - */ - inline void unreference_exec() - { - if (!(--ref_count_)) delete this; - else if (!(--exec_count_) && deferred_) sweep(); - } - - /** Returns whether the list of slots is empty. - * @return @p true if the list of slots is empty. - */ - inline bool empty() const - { return slots_.empty(); } - - /// Empties the list of slots. - void clear(); - - /** Returns the number of slots in the list. - * @return The number of slots in the list. - */ - size_type size() const; - - /** Adds a slot at the bottom of the list of slots. - * @param slot_ The slot to add to the list of slots. - * @return An iterator pointing to the new slot in the list. - */ - iterator_type connect(const slot_base& slot_); - - /** Adds a slot at the given position into the list of slots. - * @param i An iterator indicating the position where @p slot_ should be inserted. - * @param slot_ The slot to add to the list of slots. - * @return An iterator pointing to the new slot in the list. - */ - iterator_type insert(iterator_type i, const slot_base& slot_); - - /** Removes the slot at the given position from the list of slots. - * @param i An iterator pointing to the slot to be removed. - * @return An iterator pointing to the slot in the list after the one removed. - */ - iterator_type erase(iterator_type i); - - /// Removes invalid slots from the list of slots. - void sweep(); - - /** Callback that is executed when some slot becomes invalid. - * This callback is registered in every slot when inserted into - * the list of slots. It is executed when a slot becomes invalid - * because of some referred object being destroyed. - * It either calls sweep() directly or defers the execution of - * sweep() when the signal is being emitted. - * @param d The signal object (@p this). - */ - static void* notify(void* d); - - /** Reference counter. - * The object is destroyed when @em ref_count_ reaches zero. - */ - short ref_count_; - - /** Execution counter. - * Indicates whether the signal is being emitted. - */ - short exec_count_; - - /// Indicates whether the execution of sweep() is being deferred. - bool deferred_; - - /// The list of slots. - std::list<slot_base> slots_; -}; - -/// Exception safe sweeper for cleaning up invalid slots on the slot list. -struct SIGC_API signal_exec -{ - /// The parent sigc::signal_impl object. - signal_impl* sig_; - - /** Increments the reference and execution counter of the parent sigc::signal_impl object. - * @param sig The parent sigc::signal_impl object. - */ - inline signal_exec(const signal_impl* sig) - : sig_(const_cast<signal_impl*>(sig) ) - { sig_->reference_exec(); } - - /// Decrements the reference and execution counter of the parent sigc::signal_impl object. - inline ~signal_exec() - { sig_->unreference_exec(); } -}; - -} /* namespace internal */ - - -/** @defgroup signal Signals - * Use sigc::signal::connect() with sigc::mem_fun() and sigc::ptr_fun() to connect a method or function with a signal. - * - * @code - * signal_clicked.connect( sigc::mem_fun(*this, &MyWindow::on_clicked) ); - * @endcode - * - * When the signal is emitted your method will be called. - * - * signal::connect() returns a connection, which you can later use to disconnect your method. - * If the type of your object inherits from sigc::trackable the method is disconnected - * automatically when your object is destroyed. - * - * When signals are copied they share the underlying information, - * so you can have a protected/private sigc::signal member and a public accessor method. - * - * signal and slot objects provide the core functionality of this - * library. A slot is a container for an arbitrary functor. - * A signal is a list of slots that are executed on emission. - * For compile time type safety a list of template arguments - * must be provided for the signal template that determines the - * parameter list for emission. Functors and closures are converted - * into slots implicitely on connection, triggering compiler errors - * if the given functor or closure cannot be invoked with the - * parameter list of the signal to connect to. - */ - -/** Base class for the sigc::signal# templates. - * signal_base integrates most of the interface of the derived sigc::signal# - * templates. The implementation, however, resides in sigc::internal::signal_impl. - * A sigc::internal::signal_impl object is dynamically allocated from signal_base - * when first connecting a slot to the signal. This ensures that empty signals - * don't waste memory. - * - * @ingroup signal - */ -struct SIGC_API signal_base : public trackable -{ - typedef size_t size_type; - - signal_base(); - - signal_base(const signal_base& src); - - ~signal_base(); - - signal_base& operator = (const signal_base& src); - - /** Returns whether the list of slots is empty. - * @return @p true if the list of slots is empty. - */ - inline bool empty() const - { return (!impl_ || impl_->empty()); } - - /// Empties the list of slots. - void clear(); - - /** Returns the number of slots in the list. - * @return The number of slots in the list. - */ - size_type size() const; - -protected: - typedef internal::signal_impl::iterator_type iterator_type; - - /** Adds a slot at the bottom of the list of slots. - * @param slot_ The slot to add to the list of slots. - * @return An iterator pointing to the new slot in the list. - */ - iterator_type connect(const slot_base& slot_); - - /** Adds a slot at the given position into the list of slots. - * @param i An iterator indicating the position where @e slot_ should be inserted. - * @param slot_ The slot to add to the list of slots. - * @return An iterator pointing to the new slot in the list. - */ - iterator_type insert(iterator_type i, const slot_base& slot_); - - /** Removes the slot at the given position from the list of slots. - * @param i An iterator pointing to the slot to be removed. - * @return An iterator pointing to the slot in the list after the one removed. - */ - iterator_type erase(iterator_type i); - - /** Returns the signal_impl object encapsulating the list of slots. - * @return The signal_impl object encapsulating the list of slots. - */ - internal::signal_impl* impl() const; - - /// The signal_impl object encapsulating the slot list. - mutable internal::signal_impl* impl_; -}; - -} //namespace sigc - -#endif /* _SIGC_SIGNAL_BASE_H_ */ |