72 lines
1.6 KiB
C++
Executable File
72 lines
1.6 KiB
C++
Executable File
// License: Modified MIT (NON-AI)
|
|
// See the LICENSE file in the root directory for license information.
|
|
// Copyright 2025 Timothy Prepscius
|
|
|
|
#pragma once
|
|
|
|
#include "Exception.h"
|
|
#include "../string/String.hpp"
|
|
#include "../string/StringView.hpp"
|
|
#include <exception>
|
|
|
|
#define TJP_EXCEPTION_BASE ::tjp::core::Exception
|
|
|
|
#define DECLARE_EXCEPTION_BASE(e,k) \
|
|
struct e : k \
|
|
{ \
|
|
typedef k Super; \
|
|
e(const value_type &what) : Super(what) { } \
|
|
e() { } \
|
|
} ;\
|
|
|
|
#define DECLARE_EXCEPTION_BASE_MSG(e,k,msg) \
|
|
struct e : k \
|
|
{ \
|
|
typedef k Super; \
|
|
e(const value_type &what) : Super(what) { } \
|
|
e() : Super(msg) { } \
|
|
} ;\
|
|
|
|
#define DECLARE_EXCEPTION_BASE_MSG_PREFIX(e,k,msg) \
|
|
struct e : k \
|
|
{ \
|
|
static constexpr ::tjp::core::StringView Prefix = msg; \
|
|
typedef k Super; \
|
|
e(const value_type &what) : Super(msg ": " + what) { } \
|
|
e() : Super(msg) { } \
|
|
} ;\
|
|
|
|
#define DECLARE_EXCEPTION_BASE_MSG_PREFIX_ARGS(e,k,msg,...) \
|
|
struct e : k \
|
|
{ \
|
|
static constexpr ::tjp::core::StringView Prefix = msg; \
|
|
typedef k Super; \
|
|
e(const value_type &what) : Super(msg ": " + what, __VA_ARGS__) { } \
|
|
e() : Super(msg, __VA_ARGS__) { } \
|
|
} ;\
|
|
|
|
|
|
#define DECLARE_EXCEPTION(e) DECLARE_EXCEPTION_BASE(e, TJP_EXCEPTION_BASE)
|
|
#define DECLARE_EXCEPTION_MESSAGE(e, msg) DECLARE_EXCEPTION_BASE_MSG(e,TJP_EXCEPTION_BASE, msg)
|
|
|
|
namespace tjp::core {
|
|
|
|
class Exception
|
|
{
|
|
public:
|
|
using value_type = String;
|
|
|
|
private:
|
|
value_type _what;
|
|
|
|
public:
|
|
Exception (const value_type &what) : _what(what) { }
|
|
Exception () { }
|
|
virtual ~Exception () { }
|
|
|
|
const value_type &what() const throw() { return _what; }
|
|
value_type &what() throw() { return _what; }
|
|
} ;
|
|
|
|
} // namespace
|