yaml_utility.hpp 987 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef DEPTHGUIDE_YAML_UTILITY_HPP
  2. #define DEPTHGUIDE_YAML_UTILITY_HPP
  3. #include <yaml-cpp/yaml.h>
  4. template<typename T>
  5. inline auto yaml_load_number(const YAML::Node &conf, const char *name) {
  6. static_assert(std::is_arithmetic_v<T>);
  7. assert(conf[name].IsScalar());
  8. return conf[name].as<T>();
  9. }
  10. inline auto yaml_load_str(const YAML::Node &conf, const char *name) {
  11. assert(conf[name].IsScalar());
  12. return conf[name].as<std::string>();
  13. }
  14. inline auto yaml_load_sub(const YAML::Node &conf, const char *name) {
  15. assert(conf[name].IsMap());
  16. return conf[name];
  17. }
  18. #define LOAD_NUMBER(type, name) \
  19. yaml_load_number<type>(conf, name)
  20. #define LOAD_STR(name) \
  21. yaml_load_str(conf, name)
  22. #define LOAD_SUB(name) \
  23. yaml_load_sub(conf, name)
  24. #define FROM_YAML_IMPL(type) \
  25. static auto from_yaml(const YAML::Node &conf) { \
  26. auto ret = type(); \
  27. ret.fill_from_yaml(conf); \
  28. return ret; \
  29. }
  30. #endif //DEPTHGUIDE_YAML_UTILITY_HPP