split.h 737 B

1234567891011121314151617181920212223242526272829
  1. #pragma once
  2. #include <tuple>
  3. #include <utility>
  4. #include "string_utils/cast.h"
  5. #include "string_utils/tokenizer.h"
  6. namespace string_utils {
  7. template <typename... Ts>
  8. auto to_tuple(std::string const &input, char const f = ',') {
  9. std::tuple<Ts...> rval;
  10. auto result = tokenizer({f}, {'"', ""})(input);
  11. return std::make_pair(rval, cast(result, rval));
  12. }
  13. template <typename K, typename V = std::string>
  14. auto to_keyval(std::string const &input, char const f = '=') {
  15. std::pair<K, V> rval;
  16. auto result = tokenizer({f}).max_outputs(2)(input);
  17. return std::make_pair(rval, cast(result, rval));
  18. }
  19. inline auto to_keyval(std::string const &input, char const f = '=') {
  20. return to_keyval<std::string, std::string>(input, f);
  21. }
  22. }