jubilant-funicular
Errors.cpp
1 #include <iostream>
2 
3 #include "nta/Errors.h"
4 
5 namespace nta {
6  const Error* ErrorManager::m_errors = nullptr;
7  ErrorCallback ErrorManager::m_periodic_callback = [](const Error* _) {};
8  ErrorCallback ErrorManager::m_push_callback = [](const Error* err) {
9  if (err) {
10  cleanup();
11  std::cout<<"An error occured. Check Log.log for details"<<std::endl;
12  exit(0xbad);
13  }
14  };
15 
17  if (m_periodic_callback) {
19  clear_errors();
20  }
21  }
22  void ErrorManager::set_periodic_callback(const ErrorCallback& callback) {
23  m_periodic_callback = callback;
24  }
25  void ErrorManager::set_push_callback(const ErrorCallback& callback) {
26  m_push_callback = callback;
27  }
28  void ErrorManager::push_error(const Error& err) {
29  // Want to own the pointer in m_errors
30  Error* ptr = new Error(err);
32  ptr->prev = m_errors;
33  m_errors = ptr;
34  }
36  const Error* peek = m_errors;
37  m_errors = m_errors ? m_errors->prev : nullptr;
38  return peek;
39  }
41  return m_errors;
42  }
44  delete m_errors;
45  m_errors = nullptr;
46  }
47 
49  switch(t) {
50  case MISSING_RESOURCE:
51  return "Missing Resource";
52  case INVALID_VALUE:
53  return "Invalid value";
54  case GL_FAILURE:
55  return "GL Failure";
56  case SDL_FAILURE:
57  return "SDL Failure";
58  case DEVIL_FAILURE:
59  return "DevIL Failure";
60  case IMPOSSIBLE_BEHAVIOR:
61  return "Impossible Behavior";
62  case UNWRAP_WRONG_RESULT_VARIANT:
63  return "Unwrapped wrong result variant";
64  case OTHER:
65  return "Other";
66  }
67  return "";
68  }
69 }
nta::ErrorManager::set_push_callback
static void set_push_callback(const ErrorCallback &callback)
Sets the push callback function.
Definition: Errors.cpp:25
nta::ErrorManager::m_periodic_callback
static ErrorCallback m_periodic_callback
The function used to handle errors at the end of each frame.
Definition: Errors.h:50
nta::ErrorManager::m_errors
static const Error * m_errors
A linked list of unhandled errors.
Definition: Errors.h:48
nta::ErrorManager::push_error
static void push_error(const Error &err)
Adds and error to the front of the list.
Definition: Errors.cpp:28
nta::Error::prev
const Error * prev
The most recent unhandled error before this one.
Definition: Errors.h:40
nta::get_errortype_string
std::string get_errortype_string(ErrorType t)
converts ErrorType enum to string
Definition: Errors.cpp:48
nta::ErrorManager::peek_error
static const Error * peek_error()
Returns the error at the front of the list.
Definition: Errors.cpp:40
nta::ErrorManager::pop_error
static const Error * pop_error()
Removes (and returns) the error from the front of the list.
Definition: Errors.cpp:35
nta::Error
Something went wrong.
Definition: Errors.h:24
nta::ErrorManager::clear_errors
static void clear_errors()
Deletes all errors (without handling any of them)
Definition: Errors.cpp:43
nta::ErrorManager::set_periodic_callback
static void set_periodic_callback(const ErrorCallback &callback)
Sets the periodic callback function.
Definition: Errors.cpp:22
nta
Definition: Animation2D.h:6
nta::ErrorType
ErrorType
Types of Error.
Definition: Errors.h:13
nta::ErrorManager::m_push_callback
static ErrorCallback m_push_callback
The function used to handle errors as they occur.
Definition: Errors.h:52
nta::ErrorManager::handle_errors
static void handle_errors()
Handles all outstanding errors.
Definition: Errors.cpp:16
nta::cleanup
void cleanup()
deinitializes some stuff and destroys all managers
Definition: MyEngine.cpp:69