// // tokenizer.hpp // string-utils // // Created by Sam Jaffe on 10/8/20. // Copyright © 2020 Sam Jaffe. All rights reserved. // #pragma once #include #include namespace string_utils { class tokenizer { public: static constexpr size_t const infinite_outputs{~size_t(0)}; struct quote { char on; std::string escaped; }; private: std::string divider_; quote quote_; size_t max_outputs_{infinite_outputs}; bool truncate_{false}; bool ignore_empty_tokens_{true}; bool escapable_{false}; public: tokenizer(std::string divider, struct quote quote = {'\0', ""}); tokenizer &max_outputs(size_t new_max_outputs); tokenizer &truncate(bool new_truncate_overage); tokenizer &ignore_empty_tokens(bool new_ignore_empty_tokens); tokenizer &escapable(bool new_escapable); std::vector operator()(std::string const &input) const; private: size_t max_outputs() const; }; inline auto split(std::string const & data, std::string const & on, size_t max = tokenizer::infinite_outputs) { return tokenizer{on}.max_outputs(max)(data); } }