shm_helper.cc 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "vptr_manager.h"
  2. #include "shm_manager.h"
  3. #include <stdarg.h>
  4. extern bg::detail::ShmContext g_shm_ctx;
  5. bg::detail::TypeName::TypeName(const char* type, size_t size /*= 0*/)
  6. {
  7. if(size)
  8. {
  9. snprintf(m_type, MAX_TYPE_NAME_LENGTH, "%s[%#zux]", type, size);
  10. }
  11. else
  12. {
  13. snprintf(m_type, MAX_TYPE_NAME_LENGTH, "%s", type);
  14. }
  15. }
  16. void bg::detail::ShmLog(ShmLogLevel level, const char* file, size_t line, const char* func, const char* fmt, ...)
  17. {
  18. va_list args; // [rsp+8h] [rbp-E8h] BYREF
  19. static char buf[0x2000uLL];
  20. va_start(args, fmt);
  21. vsnprintf(buf, 0x2000uLL, fmt, args);
  22. va_end(args);
  23. g_shm_ctx.logger(level, file, line, func, buf);
  24. }
  25. void bg::detail::ShmStdoutLog(ShmLogLevel level, const char* file, size_t line, const char* func, const char* msg)
  26. {
  27. static const char* levels[] = {"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"};
  28. printf(
  29. "[%s:%zu(%s)][%s] %s\n",
  30. file,
  31. line,
  32. func,
  33. levels[level],
  34. msg);
  35. }
  36. void* bg::detail::ShmAllocate(size_t bytes, const void* ptr)
  37. {
  38. return (void*)bg::ShmMalloc(bytes);
  39. }
  40. void bg::detail::ShmDeallocate(void* ptr, size_t size)
  41. {
  42. bg::ShmFree(ptr);
  43. }
  44. uint64_t bg::detail::ShmCurrentVersion()
  45. {
  46. return 0ll;
  47. }
  48. void* bg::detail::ShmAllocateRawMemory(size_t* bytes, size_t alignment)
  49. {
  50. if(g_shm_ctx.mgr)
  51. {
  52. return g_shm_ctx.mgr->AllocateRawMemory(bytes, alignment);
  53. }
  54. return nullptr;
  55. }
  56. bool bg::detail::ShmHasSingleton(const TypeName& type)
  57. {
  58. if(g_shm_ctx.mgr)
  59. {
  60. return g_shm_ctx.mgr->HasSingleton(type);
  61. }
  62. return false;
  63. }
  64. void* bg::detail::ShmGetSingleton(const TypeName& type, size_t bytes, bool* first_call)
  65. {
  66. if(g_shm_ctx.mgr)
  67. {
  68. return g_shm_ctx.mgr->GetSingleton(type, bytes, first_call);
  69. }
  70. return nullptr;
  71. }
  72. void bg::detail::ShmFreeSingleton(const TypeName& type)
  73. {
  74. if(g_shm_ctx.mgr)
  75. {
  76. return g_shm_ctx.mgr->FreeSingleton(type);
  77. }
  78. return;
  79. }