libsigc++  2.10.8
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
sigc::signal_base Struct Reference

Base class for the sigc::signal# templates. More...

#include <sigc++/signal_base.h>

Inheritance diagram for sigc::signal_base:
Inheritance graph
[legend]

Public Types

typedef std::size_t size_type
 
- Public Types inherited from sigc::trackable
typedef internal::func_destroy_notify func_destroy_notify
 

Public Member Functions

 signal_base () noexcept
 
 signal_base (const signal_base & src) noexcept
 
 signal_base (signal_base && src)
 
 ~signal_base ()
 
void block (bool should_block=true) noexcept
 Sets the blocking state of all slots in the list. More...
 
bool blocked () const noexcept
 Returns whether all slots in the list are blocked. More...
 
void clear ()
 Empties the list of slots. More...
 
bool empty () const noexcept
 Returns whether the list of slots is empty. More...
 
signal_baseoperator= (const signal_base & src)
 
signal_baseoperator= (signal_base && src)
 
size_type size () const noexcept
 Returns the number of slots in the list. More...
 
void unblock () noexcept
 Unsets the blocking state of all slots in the list. More...
 
- Public Member Functions inherited from sigc::trackable
 trackable () noexcept
 
 trackable (const trackable & src) noexcept
 
 trackable (trackable && src)
 
 ~trackable ()
 
void add_destroy_notify_callback (void *data, func_destroy_notify func) const
 Add a callback that is executed (notified) when the trackable object is detroyed. More...
 
void notify_callbacks ()
 Execute and remove all previously installed callbacks. More...
 
trackableoperator= (const trackable & src)
 
trackableoperator= (trackable && src)
 
void remove_destroy_notify_callback (void *data) const
 Remove a callback previously installed with add_destroy_notify_callback(). More...
 

Protected Types

typedef internal::signal_impl::iterator_type iterator_type
 

Protected Member Functions

iterator_type connect (const slot_base & slot_)
 Adds a slot at the end of the list of slots. More...
 
iterator_type connect (slot_base && slot_)
 Adds a slot at the end of the list of slots. More...
 
iterator_type erase (iterator_type i)
 Removes the slot at the given position from the list of slots. More...
 
internal::signal_impl * impl () const
 Returns the signal_impl object encapsulating the list of slots. More...
 
iterator_type insert (iterator_type i, const slot_base & slot_)
 Adds a slot at the given position into the list of slots. More...
 
iterator_type insert (iterator_type i, slot_base && slot_)
 Adds a slot at the given position into the list of slots. More...
 

Protected Attributes

internal::signal_impl * impl_
 The signal_impl object encapsulating the slot list. More...
 

Detailed Description

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.

sigc::internal::signal_impl is reference-counted. When a sigc::signal# object is copied, the reference count of its sigc::internal::signal_impl object is incremented. Both sigc::signal# objects then refer to the same sigc::internal::signal_impl object.

Deleting the signal during emission, e.g. from one of its slots, may result in memory leaks. This drawback is fixed in version 3 of libsigc++. A workaround is to make a copy of the signal during the emission:

sigc::signal<...> sig2(*p_sig);
p_sig->emit();
Convenience wrapper for the numbered sigc::signal# templates.
Definition: signal.h:4015

This is not very costly. A sigc::signal<> is not much more than a pointer to a sigc::internal::signal_impl instance, which is not copied.

Member Typedef Documentation

◆ iterator_type

◆ size_type

typedef std::size_t sigc::signal_base::size_type

Constructor & Destructor Documentation

◆ signal_base() [1/3]

sigc::signal_base::signal_base ( )
noexcept

◆ signal_base() [2/3]

sigc::signal_base::signal_base ( const signal_base src)
noexcept

◆ signal_base() [3/3]

sigc::signal_base::signal_base ( signal_base &&  src)

◆ ~signal_base()

sigc::signal_base::~signal_base ( )

Member Function Documentation

◆ block()

void sigc::signal_base::block ( bool  should_block = true)
noexcept

Sets the blocking state of all slots in the list.

If should_block is true then the blocking state is set. Subsequent emissions of the signal don't invoke the functors contained in the slots until unblock() or block() with should_block = false is called. sigc::slot_base::block() and sigc::slot_base::unblock() can change the blocking state of individual slots.

Parameters
should_blockIndicates whether the blocking state should be set or unset.
Since libsigc++ 2.4:

◆ blocked()

bool sigc::signal_base::blocked ( ) const
noexcept

Returns whether all slots in the list are blocked.

Returns
true if all slots are blocked or the list is empty.
Since libsigc++ 2.4:

◆ clear()

void sigc::signal_base::clear ( )

Empties the list of slots.

◆ connect() [1/2]

iterator_type sigc::signal_base::connect ( const slot_base slot_)
protected

Adds a slot at the end of the list of slots.

With connect(), slots can also be added during signal emission. In this case, they won't be executed until the next emission occurs.

Parameters
slot_The slot to add to the list of slots.
Returns
An iterator pointing to the new slot in the list.

◆ connect() [2/2]

iterator_type sigc::signal_base::connect ( slot_base &&  slot_)
protected

Adds a slot at the end of the list of slots.

With connect(), slots can also be added during signal emission. In this case, they won't be executed until the next emission occurs.

Parameters
slot_The slot to add to the list of slots.
Returns
An iterator pointing to the new slot in the list.
Since libsigc++ 2.8:

◆ empty()

bool sigc::signal_base::empty ( ) const
inlinenoexcept

Returns whether the list of slots is empty.

Returns
true if the list of slots is empty.

◆ erase()

iterator_type sigc::signal_base::erase ( iterator_type  i)
protected

Removes the slot at the given position from the list of slots.

Note that this function does not work during signal emission!

Parameters
iAn iterator pointing to the slot to be removed.
Returns
An iterator pointing to the slot in the list after the one removed.

◆ impl()

internal::signal_impl* sigc::signal_base::impl ( ) const
protected

Returns the signal_impl object encapsulating the list of slots.

Returns
The signal_impl object encapsulating the list of slots.

◆ insert() [1/2]

iterator_type sigc::signal_base::insert ( iterator_type  i,
const slot_base slot_ 
)
protected

Adds a slot at the given position into the list of slots.

Note that this function does not work during signal emission!

Parameters
iAn iterator indicating the position where slot_ should be inserted.
slot_The slot to add to the list of slots.
Returns
An iterator pointing to the new slot in the list.

◆ insert() [2/2]

iterator_type sigc::signal_base::insert ( iterator_type  i,
slot_base &&  slot_ 
)
protected

Adds a slot at the given position into the list of slots.

Note that this function does not work during signal emission!

Parameters
iAn iterator indicating the position where slot_ should be inserted.
slot_The slot to add to the list of slots.
Returns
An iterator pointing to the new slot in the list.
Since libsigc++ 2.8:

◆ operator=() [1/2]

signal_base& sigc::signal_base::operator= ( const signal_base src)

◆ operator=() [2/2]

signal_base& sigc::signal_base::operator= ( signal_base &&  src)

◆ size()

size_type sigc::signal_base::size ( ) const
noexcept

Returns the number of slots in the list.

Returns
The number of slots in the list.

◆ unblock()

void sigc::signal_base::unblock ( )
noexcept

Unsets the blocking state of all slots in the list.

Since libsigc++ 2.4:

Member Data Documentation

◆ impl_

internal::signal_impl* sigc::signal_base::impl_
mutableprotected

The signal_impl object encapsulating the slot list.