text: #ifndef AM_IPC_LOG_TRACER_H
  #define AM_IPC_LOG_TRACER_H
  
  #include <fstream>
  #include <Windows.h>
  #include <tchar.h>
  
  // Types definition
  typedef TCHAR tchar, _tchar;
  typedef unsigned int uint, _uint;
  
  // Import/export members of class in/from DLL library
  #ifdef AM_IPC_PIPE_EXPORTS
  	#define IPC_LIB_API __declspec(dllexport)
  #else
  	#define IPC_LIB_API __declspec(dllimport)
  #endif
  
  namespace trace {
  	// Enumeration for message type which Tracer have got
  	enum TraceLevel {
  		Info,
  		Warning,
  		Error
  	};
  
  	// Using UNICODE define to select output format file
  	#ifdef UNICODE
  	typedef std::wofstream FileStream;
  	#else
  	typedef std::ofstream FileStream;
  	#endif
  
  	#pragma warning(push)
  	#pragma warning(disable: 4251)
  	// Tracer for writing messages in Log file
  	class IPC_LIB_API LogTracer {
  	private:
  		FileStream logFile;
  
  	public:
  		// Default constructor
  		explicit LogTracer() noexcept;
  
  		// Constructor that gets path file
  		explicit LogTracer(const char* const pathFile) noexcept;
  
  		// Constructor that gets opened file
  		explicit LogTracer(const FileStream& file) noexcept;
  
  		// Copying constructor
  		explicit LogTracer(const LogTracer& rhs) noexcept;
  
  		// Copying operator "="
  		void operator=(const LogTracer& rhs) noexcept;
  		
  		// Destructor
  		~LogTracer() noexcept;
  
  		// Tracer returns a stream for the specified trace level
  		FileStream& Trace(TraceLevel&& traceLvl) noexcept;
  		
  	};
  	#pragma warning(pop)
  
  }
  
  #endif // AM_IPC_LOG_TRACER_H
  