Something that follows this interface:
class StreamTokenizer
{
public:
StreamTokenizer(const std::string delimiter);
std::list<std::string> add_data(const std::string);
std::string get_left_over();
};
StreamTokenizer d(" ");
std::list<std::string> tokens;
tokens.append(d.add_data("tok"));
tokens.append(d.add_data("1 t"));
tokens.append(d.add_data("ok2 tok3"));
tokens.push_back(d.get_left_over());
// tokens = {tok1, tok2, tok3}
// d = {}
It receives data in chunks, it should return all the tokens it has found so far, it should be able to concatenate leftovers to next chunk, and it should not hold data that was already tokenized.
please do not suggest using stringstream unless you can show how to erase already tokenized data from it (my stream is virtually infinite)