#ifndef GRPC_SRC_CORE_LIB_GPRPP_DEBUG_LOCATION_H
#define GRPC_SRC_CORE_LIB_GPRPP_DEBUG_LOCATION_H
#if defined(__has_builtin)
#if __has_builtin(__builtin_FILE)
#define GRPC_DEFAULT_FILE __builtin_FILE()
#endif
#endif
#ifndef GRPC_DEFAULT_FILE
#define GRPC_DEFAULT_FILE "<unknown>"
#endif
#if defined(__has_builtin)
#if __has_builtin(__builtin_LINE)
#define GRPC_DEFAULT_LINE __builtin_LINE()
#endif
#endif
#ifndef GRPC_DEFAULT_LINE
#define GRPC_DEFAULT_LINE -1
#endif
namespace grpc_core {
class SourceLocation {
public:
SourceLocation(const char* file = GRPC_DEFAULT_FILE,
int line = GRPC_DEFAULT_LINE)
: file_(file), line_(line) {}
const char* file() const { return file_; }
int line() const { return line_; }
private:
const char* file_;
int line_;
};
#ifndef NDEBUG
class DebugLocation {
public:
DebugLocation(const char* file = GRPC_DEFAULT_FILE,
int line = GRPC_DEFAULT_LINE)
: location_(file, line) {}
const char* file() const { return location_.file(); }
int line() const { return location_.line(); }
private:
SourceLocation location_;
};
#else
class DebugLocation {
public:
DebugLocation() {}
DebugLocation(const char* , int ) {}
const char* file() const { return nullptr; }
int line() const { return -1; }
};
#endif
#define DEBUG_LOCATION ::grpc_core::DebugLocation(__FILE__, __LINE__)
}
#endif