//**************************************************************************************************
//
// CALLER INFO (STACK LABELS):
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// RuntimeForStatic base library | C+- (SysRoutine) | Author: Sergei Y.Kitáev
#pragma once
#include "include_restrictions.h"
namespace RuntimeForStatic {

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//
// "$CallerInfo" CLASS:
//
//==================================================================================================
class $CallerInfo
{
public:
   inline $CallerInfo( PCWSTR funcSignature, PCWSTR sourceFile, int lineNo, PCSTR sourceFileA )
   #include "..\inline\CallerInfo\CallerInfo.impl.h"
   $CallerInfo( PCWSTR funcSignature, PCWSTR sourceFile, int lineNo, PCSTR sourceFileA,
                PCWSTR tag $required );
public:
   __declspec(property(get = GetFuncSignature)) PCWSTR FuncSignature;
   __declspec(property(get = GetSourceFile   )) PCWSTR SourceFile;
   __declspec(property(get = GetLineNo       )) int    LineNo;
   __declspec(property(get = GetSourceFileA  )) PCSTR  SourceFileA;
   __declspec(property(get = GetIsEmpty      )) bool   IsEmpty;
   __declspec(property(get = GetIsComplete   )) bool   IsComplete;
   __declspec(property(get = GetTag          )) PCWSTR Tag;
public:
   PCWSTR GetFuncSignature() const;
   PCWSTR GetSourceFile() const;
   int GetLineNo() const;
   PCSTR GetSourceFileA() const;
public:
   PCWSTR GetTag() const;
public:
   virtual bool GetIsEmpty() const;
   virtual bool GetIsComplete() const;
public:
   static $CallerInfo EmptyInstance();
private:
#include "..\private\CallerInfo.private.h"
}; // $CallerInfo
typedef $CallerInfo*       $PCallerInfo;
typedef const $CallerInfo* $PCCallerInfo;
//==================================================================================================

} // RuntimeForStatic
