herr.cpp 840 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "herr.h"
  2. #include "hthread.h" // for gettid
  3. #include <map>
  4. // id => errcode
  5. static std::map<int, int> s_mapErr;
  6. void set_id_errcode(int id, int errcode){
  7. s_mapErr[id] = errcode;
  8. }
  9. int get_id_errcode(int id){
  10. auto iter = s_mapErr.find(id);
  11. if (iter != s_mapErr.end()) {
  12. // note: erase after get
  13. s_mapErr.erase(iter);
  14. return iter->second;
  15. }
  16. return ERR_OK;
  17. }
  18. void set_last_errcode(int errcode){
  19. set_id_errcode(gettid(), errcode);
  20. }
  21. int get_last_errcode(){
  22. return get_id_errcode(gettid());
  23. }
  24. const char* get_errmsg(int err){
  25. switch(err){
  26. #define CASE_ERR(macro, errcode, errmsg) \
  27. case errcode: \
  28. return errmsg;
  29. FOREACH_ERR(CASE_ERR)
  30. #undef CASE_ERR
  31. default:
  32. return "undefined errcode";
  33. }
  34. }