/**
 * @file	ExecutableObjectIF.h
 *
 * @brief	This file contains the definition for the ExecutableObjectIF interface.
 *
 * @author	Bastian Baetz
 *
 * @date	12.03.2012
 */

#ifndef EXECUTABLEOBJECTIF_H_
#define EXECUTABLEOBJECTIF_H_

class PeriodicTaskIF;

#include <framework/returnvalues/HasReturnvaluesIF.h>

#include <cstring>
/**
 * @brief	The interface provides a method to execute objects within a task.
 * @details	The performOperation method, that is required by the interface is
 * 			executed cyclically within a task context.
 */
class ExecutableObjectIF {
public:
	/**
	 * @brief	This is the empty virtual destructor as required for C++ interfaces.
	 */
	virtual ~ExecutableObjectIF() { }
	/**
	 * @brief	The performOperation method is executed in a task.
	 * @details	There are no restrictions for calls within this method, so any
	 * 			other member of the class can be used.
	 * @return	Currently, the return value is ignored.
	 */
	virtual ReturnValue_t performOperation(uint8_t operationCode = 0) = 0;

	/**
	 * @brief Function called during setup assignment of object to task
	 * @details Has to be called from the function that assigns the object to a task and
	 * 			enables the object implementation to overwrite this function and get a reference to the executing task
	 * @param task_ Pointer to the taskIF of this task
	 */
	virtual void setTaskIF(PeriodicTaskIF* task_) {

	}
};

#endif /* EXECUTABLEOBJECTIF_H_ */