config_utility.hpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #ifndef SOPHIAR2_CONFIG_UTILITY_HPP
  2. #define SOPHIAR2_CONFIG_UTILITY_HPP
  3. #define ENSURE_ARRAY(item_name) \
  4. assert(config.contains(item_name)); \
  5. assert(config[item_name].is_array());
  6. #define LOAD_UINT_ITEM(item_name) ({ \
  7. assert(config.contains(item_name)); \
  8. assert(config[item_name].is_number_unsigned()); \
  9. config[item_name].get<std::uint64_t>(); })
  10. #define LOAD_STRING_ITEM(item_name) ({ \
  11. assert(config.contains(item_name)); \
  12. assert(config[item_name].is_string()); \
  13. config[item_name].get<std::string>(); })
  14. #define LOAD_STRING_ITEM2(config, item_name) ({ \
  15. assert(config.contains(item_name)); \
  16. assert(config[item_name].is_string()); \
  17. config[item_name].get<std::string>(); })
  18. #define LOAD_VARIABLE_INDEX(var_type, var_name) ({ \
  19. auto _name = LOAD_STRING_ITEM(var_name); \
  20. REQUIRE_VARIABLE(var_type, _name); })
  21. #define LOAD_VARIABLE_INDEX2(config, var_type, var_name) ({ \
  22. auto _name = LOAD_STRING_ITEM2(config, var_name); \
  23. REQUIRE_VARIABLE(var_type, _name); })
  24. #define LOAD_VARIABLE_INDEX_WITH_NAME(var_type, var_name, var_name_out) ({ \
  25. var_name_out = LOAD_STRING_ITEM(var_name); \
  26. REQUIRE_VARIABLE(var_type, var_name_out); })
  27. #define SAFE_CLOSE_CORO_WORKER(worker) \
  28. worker->cancel(); \
  29. co_await worker->coro_wait_stop(); \
  30. worker = nullptr;
  31. #endif //SOPHIAR2_CONFIG_UTILITY_HPP