+ /** Destructor
+ */
+ ~ModuleManager();
+
+ /** Change the priority of one event in a module.
+ * Each module event has a list of modules which are attached to that event type.
+ * If you wish to be called before or after other specific modules, you may use this
+ * method (usually within void Module::Prioritize()) to set your events priority.
+ * You may use this call in other methods too, however, this is not supported behaviour
+ * for a module.
+ * @param mod The module to change the priority of
+ * @param i The event to change the priority of
+ * @param s The state you wish to use for this event. Use one of
+ * PRIO_FIRST to set the event to be first called, PRIO_LAST to
+ * set it to be the last called, or PRIO_BEFORE and PRIO_AFTER
+ * to set it to be before or after one or more other modules.
+ * @param modules If PRIO_BEFORE or PRIO_AFTER is set in parameter 's',
+ * then this contains a list of one or more modules your module must be
+ * placed before or after. Your module will be placed before the highest
+ * priority module in this list for PRIO_BEFORE, or after the lowest
+ * priority module in this list for PRIO_AFTER.
+ * @param sz The number of modules being passed for PRIO_BEFORE and PRIO_AFTER.
+ * Defaults to 1, as most of the time you will only want to prioritize your module
+ * to be before or after one other module.
+ */
+ bool SetPriority(Module* mod, Implementation i, Priority s, Module** modules = NULL, size_t sz = 1);
+
+ /** Change the priority of all events in a module.
+ * @param mod The module to set the priority of
+ * @param s The priority of all events in the module.
+ * Note that with this method, it is not possible to effectively use
+ * PRIO_BEFORE or PRIO_AFTER, you should use the more fine tuned
+ * SetPriority method for this, where you may specify other modules to
+ * be prioritized against.
+ */
+ bool SetPriority(Module* mod, Priority s);
+
+ /** Attach an event to a module.
+ * You may later detatch the event with ModuleManager::Detach().
+ * If your module is unloaded, all events are automatically detatched.
+ * @param i Event type to attach
+ * @param mod Module to attach event to
+ * @return True if the event was attached
+ */
+ bool Attach(Implementation i, Module* mod);
+
+ /** Detatch an event from a module.
+ * This is not required when your module unloads, as the core will
+ * automatically detatch your module from all events it is attached to.
+ * @param i Event type to detach
+ * @param mod Module to detach event from
+ * @param Detach true if the event was detached
+ */
+ bool Detach(Implementation i, Module* mod);
+
+ /** Attach an array of events to a module
+ * @param i Event types (array) to attach
+ * @param mod Module to attach events to
+ */
+ void Attach(Implementation* i, Module* mod, size_t sz);
+
+ /** Detach all events from a module (used on unload)
+ * @param mod Module to detach from
+ */
+ void DetachAll(Module* mod);
+