// ========================================================================= // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co) // ========================================================================= #ifndef __cpPlugins__DataObject__h__ #define __cpPlugins__DataObject__h__ #include namespace cpPlugins { class ProcessObject; /*! \brief Base class for all data objects. * * This class is intended to be the base for all data objects. It * inherits from cpPlugins::Object and it serves as inputs or * outputs in cpPlugins::ProcessObject objects. Think of it as edges * in a graph. */ class CPPLUGINS_EXPORT DataObject : public Object { cpPluginsTypeMacro( DataObject, Object ); cpPluginsNewMacro( ); public: virtual bool IsUpdated( const TTimeStamp& d = TTimeRep::now( ) ) const override; /*! @defgroup m_Source * This object's source. This soft association (i.e. it could be * NULL) allows navigation over pipeline's (graph) edges. * @{ */ void DisconnectPipeline( ); void SetSource( ProcessObject* source ); void Update( ); //! @} protected: /*! In order to correctly handle memory with std::shared_pointer<>, * constructors and destructor should be "invisible" to the user. * @{ */ DataObject( ); virtual ~DataObject( ); //! @} protected: //! @ingroup m_Source std::weak_ptr< ProcessObject > m_Source; }; // end class } // end namespace #endif // __cpPlugins__DataObject__h__ // eof - $RCSfile$