#ifndef TEST_SIGNAL_HELPERS_H
#define TEST_SIGNAL_HELPERS_H

#include <sigc++/object.h>

class SignalCounter0 : public SigC::Object
{
public:
    SignalCounter0() :
        m_count(0)
    {;}
    
    void fired()
    {
        ++m_count;
    }
    
    int fireCount() const
    { return m_count; }
    
    void reset()
    {
        m_count = 0;
    }
private:
    int m_count;
};

template <class P0>
class SignalCounter1 : public SigC::Object
{
public:
    SignalCounter1() :
        m_count(0)
    {;}
    
    void fired(P0)
    {
        ++m_count;
    }
    
    int fireCount() const
    { return m_count; }
    
private:
    int m_count;
};

template <class P0>
class SignalRecorder1 : public SigC::Object
{
public:
    SignalRecorder1() :
        m_count(0)
    {;}
    
    void fired(P0 m)
    {
        ++m_count;
        m_lastArg0 = m;
    }
    
    int fireCount() const
    { return m_count; }
    
    P0 lastArg0() const
    {
        return m_lastArg0;
    }
    
    void reset()
    {
        m_count = 0;
    }
private:
    int m_count;
    P0 m_lastArg0;
};

template <class P0>
class SignalRecorderRef1 : public SigC::Object
{
public:
    SignalRecorderRef1() :
        m_count(0)
    {;}
    
    void fired(const P0& m)
    {
        ++m_count;
        m_lastArg0 = m;
    }
    
    int fireCount() const
    { return m_count; }
    
    P0 lastArg0() const
    {
        return m_lastArg0;
    }
    
    void reset()
    {
        m_count = 0;
    }
private:
    int m_count;
    P0 m_lastArg0;
};


#endif // of TEST_SIGNAL_HELPERS_H


syntax highlighted by Code2HTML, v. 0.9.1