summaryrefslogtreecommitdiffabout
path: root/include/sitecing/acomponent.h
Side-by-side diff
Diffstat (limited to 'include/sitecing/acomponent.h') (more/less context) (ignore whitespace changes)
-rw-r--r--include/sitecing/acomponent.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/include/sitecing/acomponent.h b/include/sitecing/acomponent.h
new file mode 100644
index 0000000..160e854
--- a/dev/null
+++ b/include/sitecing/acomponent.h
@@ -0,0 +1,78 @@
+#ifndef __SITECING_ACOMPONENT_H
+#define __SITECING_ACOMPONENT_H
+
+#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 */