mirror of
				https://github.com/pocoproject/poco.git
				synced 2025-11-04 04:09:57 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			113 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//
 | 
						|
// AbstractDelegate.h
 | 
						|
//
 | 
						|
// $Id: //poco/1.4/Foundation/include/Poco/AbstractDelegate.h#4 $
 | 
						|
//
 | 
						|
// Library: Foundation
 | 
						|
// Package: Events
 | 
						|
// Module:  AbstractDelegate
 | 
						|
//
 | 
						|
// Implementation of the AbstractDelegate template.
 | 
						|
//
 | 
						|
// Copyright (c) 2006-2011, Applied Informatics Software Engineering GmbH.
 | 
						|
// and Contributors.
 | 
						|
//
 | 
						|
// SPDX-License-Identifier:	BSL-1.0
 | 
						|
//
 | 
						|
 | 
						|
 | 
						|
#ifndef Foundation_AbstractDelegate_INCLUDED
 | 
						|
#define Foundation_AbstractDelegate_INCLUDED
 | 
						|
 | 
						|
 | 
						|
#include "Poco/Foundation.h"
 | 
						|
 | 
						|
 | 
						|
namespace Poco {
 | 
						|
 | 
						|
 | 
						|
template <class TArgs> 
 | 
						|
class AbstractDelegate
 | 
						|
	/// Base class for Delegate and Expire.
 | 
						|
{
 | 
						|
public:
 | 
						|
	AbstractDelegate()
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	AbstractDelegate(const AbstractDelegate& /*del*/)
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	virtual ~AbstractDelegate() 
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	virtual bool notify(const void* sender, TArgs& arguments) = 0;
 | 
						|
		/// Invokes the delegate's callback function.
 | 
						|
		/// Returns true if successful, or false if the delegate
 | 
						|
		/// has been disabled or has expired.
 | 
						|
 | 
						|
	virtual bool equals(const AbstractDelegate& other) const = 0;
 | 
						|
		/// Compares the AbstractDelegate with the other one for equality.
 | 
						|
 | 
						|
	virtual AbstractDelegate* clone() const = 0;
 | 
						|
		/// Returns a deep copy of the AbstractDelegate.
 | 
						|
 | 
						|
	virtual void disable() = 0;
 | 
						|
		/// Disables the delegate, which is done prior to removal.
 | 
						|
		
 | 
						|
	virtual const AbstractDelegate* unwrap() const
 | 
						|
		/// Returns the unwrapped delegate. Must be overridden by decorators
 | 
						|
		/// like Expire.
 | 
						|
	{
 | 
						|
		return this;
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
template <> 
 | 
						|
class AbstractDelegate<void>
 | 
						|
	/// Base class for Delegate and Expire.
 | 
						|
{
 | 
						|
public:
 | 
						|
	AbstractDelegate()
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	AbstractDelegate(const AbstractDelegate&)
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	virtual ~AbstractDelegate() 
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	virtual bool notify(const void* sender) = 0;
 | 
						|
		/// Invokes the delegate's callback function.
 | 
						|
		/// Returns true if successful, or false if the delegate
 | 
						|
		/// has been disabled or has expired.
 | 
						|
 | 
						|
	virtual bool equals(const AbstractDelegate& other) const = 0;
 | 
						|
		/// Compares the AbstractDelegate with the other one for equality.
 | 
						|
 | 
						|
	virtual AbstractDelegate* clone() const = 0;
 | 
						|
		/// Returns a deep copy of the AbstractDelegate.
 | 
						|
 | 
						|
	virtual void disable() = 0;
 | 
						|
		/// Disables the delegate, which is done prior to removal.
 | 
						|
		
 | 
						|
	virtual const AbstractDelegate* unwrap() const
 | 
						|
		/// Returns the unwrapped delegate. Must be overridden by decorators
 | 
						|
		/// like Expire.
 | 
						|
	{
 | 
						|
		return this;
 | 
						|
	}
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
} // namespace Poco
 | 
						|
 | 
						|
 | 
						|
#endif // Foundation_AbstractDelegate_INCLUDED
 |