#ifndef SUIFKERNEL__MODULE_H
#define SUIFKERNEL__MODULE_H
#include "suifkernel_forwarders.h"
class Module {
public:
Module (SuifEnv* suif_env, const LString& moduleName = emptyLString );
virtual ~Module();
virtual LString get_module_name() const;
virtual Module* clone() const = 0;
virtual bool delete_me() const;
virtual bool is_initialized() const;
virtual void initialize();
virtual bool parse_command_line( TokenStream* command_line_stream );
virtual void execute();
virtual SuifEnv *get_suif_env() const;
virtual bool supports_interface( const LString &interface_name ) const;
virtual Address get_interface( const LString &interface_name ) const;
virtual void interface_registered(const LString &producer_module_name,
const LString &interface_name);
virtual void interface_object_created(Module *producer_module,
const LString &interface_name);
virtual void interface_object_destructed(Module *producer_module,
const LString &interface_name);
void import_module(const char* module_name);
protected:
SuifEnv* _suif_env;
LString _module_name;
OptionLiteral* _command_name; // argv[0]
OptionList* _command_line;
OptionSelection* _flags;
suif_hash_map<LString, Address> *_interfaces;
virtual void set_interface( const LString &interface_name,
Address interface);
private:
Module(const Module &);
Module& operator=(const Module &);
};
#endif