// --------------------------------------------------------
// Code generated by Papyrus C++
// --------------------------------------------------------

#ifndef COMPONENTLIB_STDPORTS_CRUN_H
#define COMPONENTLIB_STDPORTS_CRUN_H

/************************************************************
 Crun class header
 ************************************************************/

#include "componentlib/StdPorts/Pkg_StdPorts.h"

namespace sysinterfaces {
class IRunnable;
}

namespace componentlib {
namespace StdPorts {

/************************************************************/
/**
 * 
 */
class Crun {
public:

	/**
	 * 
	 * @return ret 
	 */
	virtual ::sysinterfaces::IRunnable* get_run() = 0;

};
/************************************************************/
/* External declarations (package visibility)               */
/************************************************************/

/* Inline functions                                         */

} // of namespace StdPorts
} // of namespace componentlib

/************************************************************
 End of Crun class header
 ************************************************************/

#endif
