size_map.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include "shm_config.h"
  3. #include "shm_helper.h"
  4. namespace bg
  5. {
  6. namespace detail
  7. {
  8. class SizeMap
  9. {
  10. public:
  11. bool Init();
  12. static size_t CalcAlignment(size_t bytes);
  13. size_t GetIndexByBytes(size_t bytes)
  14. {
  15. if(bytes <= BYTES_COMP_VALUE)
  16. {
  17. return m_index_to_class[SMALL_BYTES_TO_INDEX(bytes)];
  18. }
  19. return BIG_BYTES_TO_INDEX(bytes);
  20. }
  21. size_t ClassToSize(size_t index)
  22. {
  23. if(index >= CLASS_MAX_COUNT)
  24. {
  25. __SHM_DO_ASSERT(index < CLASS_MAX_COUNT);
  26. return 0;
  27. }
  28. return m_class_to_size[index];
  29. }
  30. size_t ClassToPages(size_t index)
  31. {
  32. if(index >= CLASS_MAX_COUNT)
  33. {
  34. __SHM_DO_ASSERT(index < CLASS_MAX_COUNT);
  35. return 0;
  36. }
  37. return m_class_to_pages[index];
  38. }
  39. char m_index_to_class[2176]{0};
  40. size_t m_class_to_size[CLASS_MAX_COUNT]{0};
  41. size_t m_class_to_pages[CLASS_MAX_COUNT]{0};
  42. };
  43. }
  44. }