#ifndef _CUTILITY_HPP_
#define _CUTILITY_HPP_

/*** ANSI C Header Files ***/
#include <stdio.h>	//for __FUNCTION__

#ifndef __FUNCTION__
#	define __FUNCTION__ __func__
#endif

#define __STRINGIFY__(x) #x
#define __TOSTRING__(x) __STRINGIFY__(x)
#define __AT__ __FILE__ ":" __TOSTRING__(__LINE__) ":(" __FUNCTION__ ")"

/*** DLL Header File ***/
#include "dllExport.h"

/*** Custom Header Files ***/
#include "cString.hpp" 

using UtilityEngine::cString;



namespace UtilityEngine {
	/* Singleton */
	class EXPORT_FROM_MYDLL cUtility
	{
	public:
		enum eTypeSDL : unsigned int
		{
			NONE = 0,
			ALL = 0,
			SDL,
			TTF,
			IMAGE,
			MIXER,
			GFX,
			NET,
		};

	private:
		cUtility();
		~cUtility();
		
	public:
		///Functions
		static cUtility& Inst();
		static void Delete();

		void Message( const cString& msg, const cString& funcName = "", const eTypeSDL typeSDL = eTypeSDL::NONE ) const;

		void PrintVersion( const eTypeSDL typeSDL = eTypeSDL::ALL ) const;

		
	private:	
		///Functions
		void VersionParser( const cString& runCompiled, const SDL_version& version, const cString& type ) const;

		
	private:
		///Variables
		static cUtility* sp_inst;// = nullptr

	};/// END CLASS DEFINITION cUtility
}/// END NAMESPACE DEFINITION UtilityEngine
#endif/// END IFNDEF _CUTILITY_HPP_