#ifndef SUIFKERNEL__MESSAGES_H
#define SUIFKERNEL__MESSAGES_H
#include "suifkernel_forwarders.h"
#ifndef SUIF_MODULE
#define SUIF_MODULE "Unknown"
#endif
class SuifKernelMessage {
public:
static SuifKernelMessage& create( const char* file_name,
int line_number,
const char* module_name );
void assert_message( const char* format, ... );
SuifKernelMessage* error( const char* format, ... );
SuifKernelMessage* warning( const char* format, ... );
SuifKernelMessage* information( int verbosity_level, const char* format, ... );
void assert_message_on_object( SuifObject *so, const char* format, ... );
SuifKernelMessage* error/*_on_object*/( SuifObject *so, const char* format, ... );
SuifKernelMessage* warning/*_on_object*/( SuifObject *so, const char* format, ... );
SuifKernelMessage* information/*_on_object*/( SuifObject *so, int verbosity_level, const char* format, ... );
SuifKernelMessage* error( SuifEnv *env, const char* format, ... );
SuifKernelMessage* warning( SuifEnv *env, const char* format, ... );
SuifKernelMessage* information( SuifEnv* env, int verbosity_level, const char* format, ... );
protected:
SuifKernelMessage( const char* file_name,
int line_number,
const char* module_name );
const char* _file_name;
int _line_number;
const char* _module_name;
private:
SuifKernelMessage& operator=(const SuifKernelMessage&);
SuifKernelMessage(const SuifKernelMessage&);
};
#define suif_assert( expr ) if (expr) ; else SuifKernelMessage::create( __FILE__, __LINE__, SUIF_MODULE ).assert_message("")
#define suif_assert_message( expr, params ) if (expr) ; else SuifKernelMessage::create( __FILE__, __LINE__, SUIF_MODULE ).assert_message params
#define suif_assert_on_object( expr, obj ) if (expr) ; else SuifKernelMessage::create( __FILE__, __LINE__, SUIF_MODULE ).assert_message_on_object("", obj) ;
#define suif_assert_message_on_object( expr, params ) if (expr) ; else SuifKernelMessage::create( __FILE__, __LINE__, SUIF_MODULE ).assert_message_on_object params ;
#define suif_error delete SuifKernelMessage::create( __FILE__, __LINE__, SUIF_MODULE ).error
#define suif_warning delete SuifKernelMessage::create( __FILE__, __LINE__, SUIF_MODULE ).warning
#define suif_information delete SuifKernelMessage::create( __FILE__, __LINE__, SUIF_MODULE ).information
#endif