/** ==========================================================================
 * 2014 by KjellKod.cc AND Robert Engeln.
 * The stacktrace code was given as a public domain dedication by Robert Engeln
 * It was originally published at: http://code-freeze.blogspot.com/2012/01/generating-stack-traces-from-c.html
 * It was (here) modified for g3log purposes.
 *
 * This is PUBLIC DOMAIN to use at your own risk and comes
 * with no warranties. This code is yours to share, use and modify with no
 * strings attached and no restrictions or obligations.
 *
 * For more information see g3log/LICENSE or refer refer to http://unlicense.org
 * ============================================================================*/


#pragma once
#if !(defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__))
#error "stacktrace_win.cpp used but not on a windows system"
#endif

#include "g3log/crashhandler.hpp"

#include <string>
#include <windows.h>

namespace stacktrace {
   /// return the text description of a Windows exception code
   std::string exceptionIdToText(g3::SignalType id);

   /// return whether or not the exception is a known exception, i.e.
   /// an exception that we should treat as a fatal event
   bool isKnownException(g3::SignalType id);

   /// helper function: retrieve stackdump from no excisting exception pointer
   std::string stackdump();

   /// helper function: retrieve stackdump, starting from an exception pointer
   std::string stackdump(EXCEPTION_POINTERS *info);

   /// main stackdump function. retrieve stackdump, from the given context
   std::string stackdump(CONTEXT *context);

} // stacktrace
