00001 00008 #ifndef SUIFKERNEL__SUIF_ENV_H 00009 #define SUIFKERNEL__SUIF_ENV_H 00010 00011 #include "suifkernel_forwarders.h" 00012 00013 #include <stdarg.h> 00014 00015 00020 SuifEnv* create_suif_env(); 00021 00039 class SuifEnv { 00040 public: 00041 SuifEnv(); 00042 00043 virtual void init(); 00044 00045 virtual ~SuifEnv(); 00046 00047 virtual void set_object_factory( ObjectFactory* ); 00048 virtual ObjectFactory* get_object_factory() const; 00049 00050 virtual ModuleSubSystem* get_module_subsystem() const; 00051 virtual void set_module_subsystem( ModuleSubSystem* subSystem ); 00052 00053 virtual void set_dll_subsystem( DLLSubSystem* _dll_subsystem ); 00054 virtual DLLSubSystem* get_dll_subsystem() const; 00055 00056 virtual void set_error_subsystem( ErrorSubSystem* _error_subsystem ); 00057 virtual ErrorSubSystem* get_error_subsystem() const; 00058 00059 virtual PrintSubSystem* get_print_subsystem() const; 00060 virtual void set_print_subsystem( PrintSubSystem* subsystem ); 00061 00062 virtual void add_object_factory( RealObjectFactory* of ); 00063 virtual RealObjectFactory* get_object_factory( const LString& name ) const; 00064 00067 virtual void read( const String& inputFileName ); 00068 00070 virtual void write( const String& outputFileName ) const; 00071 virtual FileSetBlock *read_more( const String& inputFileName ) const; 00072 00073 virtual CloneSubSystem* get_clone_subsystem() const; 00074 00075 virtual void set_file_set_block( FileSetBlock* o ); 00076 virtual FileSetBlock* get_file_set_block() const; 00077 00078 00079 virtual TypeBuilder* get_type_builder() const; 00080 virtual void set_type_builder( TypeBuilder* ); 00081 00083 // use the macro suif_error 00084 virtual void error( SuifObject* obj, const char* file_name, 00085 int line_number, 00086 const char* module_name, 00087 const char* description, va_list ap ); 00088 00090 // use the macro suif_warning 00091 virtual void warning( SuifObject* obj, const char* file_name, 00092 int line_number, 00093 const char* module_name, 00094 const char* description, va_list ap ); 00095 00097 // use the macro suif_information 00098 virtual void information( SuifObject* obj, const char* file_name, 00099 int line_number, 00100 const char* module_name, 00101 int verbosity_level, 00102 const char* description, va_list ap ); 00103 00104 // use the macro suif_error 00105 virtual void error( const char* file_name, 00106 int line_number, 00107 const char* module_name, 00108 const char* description, va_list ap ); 00109 00110 // use the macro suif_warning 00111 virtual void warning( const char* file_name, 00112 int line_number, 00113 const char* module_name, 00114 const char* description, va_list ap ); 00115 00116 // use the macro suif_information 00117 virtual void information( const char* file_name, 00118 int line_number, 00119 const char* module_name, 00120 int verbosity_level, 00121 const char* description, va_list ap ); 00122 00123 // Purpose: to load and initialize a DLL 00124 // Use "require_DLL" instead 00125 // 00126 void import_module(const LString &module_name); 00127 00128 // Purpose: to load and initialize a DLL 00129 // if it has not already been loaded 00130 // Use "require_DLL" instead 00131 // 00132 void require_module(const LString &module_name); 00133 00134 // Purpose: to load and initialize a DLL 00135 // if it has not already been loaded 00136 // 00137 void require_DLL(const LString &module_name); 00138 00139 void register_module(Module *module); 00140 00141 String get_location(const SuifObject *obj) const; 00142 String to_string(const LString &style, 00143 const SuifObject *obj) const; 00144 /* Use the default printer */ 00145 String to_string(SuifObject *obj) const; 00146 00147 protected: 00148 typedef list<RealObjectFactory*> FactoryList; 00149 InputSubSystem* input_sub_system; 00150 OutputSubSystem* output_subsystem; 00151 CloneSubSystem* cloneSubSystem; 00152 DLLSubSystem* _dll_subsystem; 00153 ModuleSubSystem* _module_subsystem; 00154 ErrorSubSystem* _error_subsystem; 00155 PrintSubSystem* _print_subsystem; 00156 TypeBuilder* _type_builder; 00157 00158 ObjectFactory* _object_factory; 00159 00160 FactoryList* factories; 00161 00162 FileSetBlock* _file_set_block; 00163 AddressMap* rudimentaryAddressMap; 00164 private: 00165 SuifEnv(const SuifEnv &); 00166 SuifEnv& operator=(const SuifEnv &); 00167 }; 00168 00169 00170 #endif 00171