/* Clementine Window Manager
Copyright 2002 Dave Berton <db@mosey.org>
based on aewm Copyright 1998-2001 Decklin Foster <decklin@red-bean.com>
This program is free software; see LICENSE for details.
Adapted from http://www.kuix.de/snippets/tokenizer.h */
#ifndef TOKENIZER_HPP
#define TOKENIZER_HPP
#include <string>
#include <vector>
template < class Char, class Cont >
void tokenize( const Char& str,
const Char& delims,
Cont& found_tokens )
{
typename Char::size_type walk_pos = 0;
while( walk_pos != Char::npos &&
walk_pos < str.length() ) {
typename Char::size_type token_pos = 0, token_len = 0;
typename Char::size_type delim_pos = str.find_first_of( delims, walk_pos );
if( delim_pos == Char::npos ) {
// no more delims, a token starts at walk_pos
token_pos = walk_pos;
token_len = str.length() - token_pos;
walk_pos += token_len;
} else if( delim_pos > walk_pos ) {
// more tokens / delims left, but a token starts at walk_pos
token_pos = walk_pos;
token_len = delim_pos - token_pos;
walk_pos = delim_pos;
} else if( delim_pos == walk_pos ) {
// delimiters start at walk_pos
walk_pos = str.find_first_not_of( delims, walk_pos );
if( walk_pos == Char::npos ) {
// only delims left in str, no more tokens
break;
} else {
// more tokens left
continue;
}
}
found_tokens.push_back( str.substr( token_pos, token_len ) );
}
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1