// // 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)}; private: std::string divider_; size_t max_outputs_{infinite_outputs}; bool truncate_{true}; bool ignore_empty_tokens_{true}; public: tokenizer(std::string const & divider); tokenizer &max_outputs(size_t new_max_outputs); tokenizer &truncate(bool new_truncate_overage); tokenizer &ignore_empty_tokens(bool new_ignore_empty_tokens); 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); } }