1 #include "ge211_error.h" 11 namespace exceptions {
15 return message_->c_str();
18 Exception_base::Exception_base(
const std::string& message)
19 : message_{std::make_shared<std::string>(message)}
22 Environment_error::Environment_error(
const std::string& message)
23 : Exception_base(message)
30 static std::string build_sdl_error_message(
const std::string& message) {
31 const char* reason = SDL_GetError();
33 std::ostringstream oss;
35 oss <<
"SDL Error: " << reason;
37 oss << message <<
"\n (reason from SDL: " << reason <<
")";
42 Host_error::Host_error(
const std::string& message)
46 File_error::File_error(
const std::string& message)
50 File_error File_error::could_not_open(
const std::string& filename)
52 return File_error(
"Could not open: " + filename);
55 Font_error::Font_error(
const std::string& message)
59 Font_error Font_error::could_not_load(
const std::string& filename)
61 return Font_error(
"Could not load font: " + filename);
64 Ge211_logic_error::Ge211_logic_error(
const std::string& message)
65 : Environment_error(
"Apparent ge211 bug! " + message)
68 Image_error::Image_error(
const std::string& message)
72 Image_error Image_error::could_not_load(
const std::string& filename)
74 return Image_error(
"Could not load image: " + filename);
77 Mixer_error::Mixer_error(
const std::string& message)
81 Mixer_error Mixer_error::could_not_load(
const std::string& filename)
83 return Mixer_error(
"Could not load music: " + filename);
86 Mixer_error Mixer_error::out_of_channels()
88 return Mixer_error(
"Could not play effect: out of channels");
95 static const char* log_level_string(Log_level level)
98 case Log_level::debug:
100 case Log_level::info:
102 case Log_level::warn:
104 case Log_level::fatal:
113 Log_message debug(std::string reason)
115 return Log_message{std::move(reason), Log_level::debug};
118 Log_message info(std::string reason)
120 return Log_message{std::move(reason), Log_level::info};
123 Log_message warn(std::string reason)
125 return Log_message{std::move(reason), Log_level::warn};
128 Log_message fatal(std::string reason)
130 return Log_message{std::move(reason), Log_level::fatal};
133 Log_message info_sdl()
135 return info(SDL_GetError());
138 Log_message warn_sdl()
140 return warn(SDL_GetError());
143 Log_message fatal_sdl()
145 return fatal(SDL_GetError());
148 Logger& Logger::instance() noexcept
150 static Logger instance;
154 Log_message::Log_message(std::string reason, Log_message::Level level) noexcept
155 : reason_{std::move(reason)}
157 , active_{level >= Logger::instance().level()}
160 message_ <<
"ge211[" << log_level_string(level) <<
"]: ";
163 Log_message::Log_message(Log_message::Level level)
164 : Log_message{
"", level}
167 Log_message::~Log_message()
170 std::cerr << message_.str();
171 if (!reason_.empty()) std::cerr <<
"\n (Reason: " << reason_ <<
")";
172 std::cerr << std::endl;
The game engine namespace.
Client_logic_error(const std::string &message)
Constructs the error, given the provided error message.
The root of the ge211 exception hierarchy.
const char * what() const noexcept override
The error message associated with the exception.
Indicates that an error was encountered by the game engine or in the client's environment.