#ifndef __SITECING_ACOMPONENT_H #define __SITECING_ACOMPONENT_H #include #include "sitecing/sitecing_interface.h" /** * @file * @brief The acomponent class declaration. */ namespace sitecing { /** * An abstract base class for sitecing components. */ class acomponent { public: /** * Pointer to the interface object, used to communicate with the * site-C-ing core. */ sitecing_interface *__SCIF; acomponent(); virtual ~acomponent(); /** * Set the interface to core pointer. * @param scif the pointer to the interface object. */ virtual void __set_interface(sitecing_interface *scif=0); /** * Invoked if the interface to the core has changed. * @param oscif pointer to the old interface object. */ virtual void __on_change_interface(sitecing_interface *oscif); /** * do import components. */ virtual void __do_imports(); /** * invoked on components imports. */ virtual void __on_imports(); /** * fetch the pointer to the most derived component. * @returns pointer to the most derived object. */ virtual void *__the_most_derived_this() = 0; /** * Do the job. * @param __magic the magic number used as a key to decipher the * rest of parameters. * @param __args the parameters. */ virtual void main(int __magic,va_list __args) = 0; /** * Run the component. Convenience helper for calling main(). * @param __magic the magic number. * @param ... the rest of parameters. * @see main(); */ void run(int __magic,...); /** * Helper function (which doesn't necessarily belongs here!) for * reading the file and passing it to the output stream. * @param fn the file name. */ void pass_file_through(const char *fn); }; } #endif /* __SITECING_ACOMPONENT_H */