| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- //
- // tokenizer.hpp
- // string-utils
- //
- // Created by Sam Jaffe on 10/8/20.
- // Copyright © 2020 Sam Jaffe. All rights reserved.
- //
- #pragma once
- #include <string>
- #include <vector>
- 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<std::string> 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);
- }
- }
|