1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 08:47:17 +01:00
SqMod/source/Debug.hpp
2015-11-10 14:42:52 +02:00

224 lines
7.8 KiB
C++

#ifndef _DEBUG_HPP_
#define _DEBUG_HPP_
// ------------------------------------------------------------------------------------------------
#include "Common.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
/* ------------------------------------------------------------------------------------------------
* Class meant to help with the debugging process by offering tools for extracting information.
*/
class Debug
{
/* --------------------------------------------------------------------------------------------
* Allow only the smart pointer to delete this class instance as soon as it's not needed.
*/
friend class std::unique_ptr< Debug, void(*)(Debug *) >;
protected:
/* --------------------------------------------------------------------------------------------
* Default constructor.
*/
Debug();
/* --------------------------------------------------------------------------------------------
* Copy constructor (disabled).
*/
Debug(const Debug & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move constructor (disabled).
*/
Debug(Debug && o) = delete;
/* --------------------------------------------------------------------------------------------
* Destructor.
*/
~Debug();
/* --------------------------------------------------------------------------------------------
* Copy assignment operator (disabled).
*/
Debug & operator = (const Debug & o) = delete;
/* --------------------------------------------------------------------------------------------
* Move assignment operator (disabled).
*/
Debug & operator = (Debug && o) = delete;
/* --------------------------------------------------------------------------------------------
* Called by the smart pointer to delete the instance of this class.
*/
static void _Finalizer(Debug * ptr);
public:
// --------------------------------------------------------------------------------------------
typedef std::unique_ptr< Debug, void(*)(Debug *) > Pointer;
/* --------------------------------------------------------------------------------------------
* Creates an instance of this type if one doesn't already exist and returns it.
*/
static Pointer Inst();
/* --------------------------------------------------------------------------------------------
* ...
*/
static constexpr Uint8 WRN_PRINT = (1 << 0);
static constexpr Uint8 ERR_PRINT = (1 << 1);
static constexpr Uint8 FTL_PRINT = (1 << 2);
static constexpr Uint8 PRINT_ALL = (WRN_PRINT | ERR_PRINT | FTL_PRINT);
/* --------------------------------------------------------------------------------------------
* ...
*/
static constexpr Uint8 WRN_TRACE = (1 << 3);
static constexpr Uint8 ERR_TRACE = (1 << 4);
static constexpr Uint8 FTL_TRACE = (1 << 5);
static constexpr Uint8 TRACE_ALL = (WRN_TRACE | ERR_TRACE | FTL_TRACE);
/* --------------------------------------------------------------------------------------------
* ...
*/
HSQUIRRELVM GetVM();
/* --------------------------------------------------------------------------------------------
* ...
*/
void SetVM(HSQUIRRELVM vm);
/* --------------------------------------------------------------------------------------------
* ...
*/
void PrintTrace(SQInt32 lvl, SQInt32 end);
/* --------------------------------------------------------------------------------------------
* ...
*/
void PrintCallstack(SQInt32 lvl, SQInt32 end);
/* --------------------------------------------------------------------------------------------
* ...
*/
void SetInf(const char * type, const char * func);
/* --------------------------------------------------------------------------------------------
* Throws a warning message.
*/
void Wrn(const char * type, const char * func, const char * fmt, va_list args);
/* --------------------------------------------------------------------------------------------
* Throws a error message.
*/
void Err(const char * type, const char * func, const char * fmt, va_list args);
/* --------------------------------------------------------------------------------------------
* Throws a fatal message.
*/
void Ftl(const char * type, const char * func, const char * fmt, va_list args);
/* --------------------------------------------------------------------------------------------
* Throws a warning message.
*/
void Wrn(const char * fmt, ...);
/* --------------------------------------------------------------------------------------------
* Throws a error message.
*/
void Err(const char * fmt, ...);
/* --------------------------------------------------------------------------------------------
* Throws a fatal message.
*/
void Ftl(const char * fmt, ...);
/* --------------------------------------------------------------------------------------------
* Throws a warning message.
*/
void Wrn(const char * func, const char * fmt, ...);
/* --------------------------------------------------------------------------------------------
* Throws a error message.
*/
void Err(const char * func, const char * fmt, ...);
/* --------------------------------------------------------------------------------------------
* Throws a fatal message.
*/
void Ftl(const char * func, const char * fmt, ...);
/* --------------------------------------------------------------------------------------------
* Throws a warning message.
*/
void Wrn(const char * type, const char * func, const char * fmt, ...);
/* --------------------------------------------------------------------------------------------
* Throws a error message.
*/
void Err(const char * type, const char * func, const char * fmt, ...);
/* --------------------------------------------------------------------------------------------
* Throws a fatal message.
*/
void Ftl(const char * type, const char * func, const char * fmt, ...);
protected:
/* --------------------------------------------------------------------------------------------
* Internal function used to output a traceback of function calls when issues occur.
*/
void InternalTrace();
/* --------------------------------------------------------------------------------------------
* ...
*/
String EnvName(SQInt32 level);
private:
/* --------------------------------------------------------------------------------------------
* ...
*/
HSQUIRRELVM m_VM;
/* --------------------------------------------------------------------------------------------
* ...
*/
Uint8 m_Opts;
/* --------------------------------------------------------------------------------------------
* ...
*/
String m_Type;
/* --------------------------------------------------------------------------------------------
* ...
*/
String m_Func;
/* --------------------------------------------------------------------------------------------
* ...
*/
String m_RootName;
/* --------------------------------------------------------------------------------------------
* ...
*/
String m_UnknownType;
/* --------------------------------------------------------------------------------------------
* ...
*/
String m_UnknownFunc;
};
// ------------------------------------------------------------------------------------------------
extern const Debug::Pointer _Dbg;
} // Namespace:: SqMod
#endif // _DEBUG_HPP_