From 38b2b3c04fcba9b767ea0121a558abcb7314675f Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Sat, 20 Mar 2010 12:56:56 +0000 Subject: Move StringTokenizer to its own files (tokenizer.h/tokenizer.cpp). svn-id: r48310 --- common/tokenizer.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 common/tokenizer.cpp (limited to 'common/tokenizer.cpp') diff --git a/common/tokenizer.cpp b/common/tokenizer.cpp new file mode 100644 index 0000000000..8bca133b5b --- /dev/null +++ b/common/tokenizer.cpp @@ -0,0 +1,59 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#include "common/tokenizer.h" + +namespace Common { + +StringTokenizer::StringTokenizer(const String &str, const String &delimiters) : _str(str), _delimiters(delimiters) { + reset(); +} + +void StringTokenizer::reset() { + _tokenBegin = _tokenEnd = 0; +} + +bool StringTokenizer::empty() const { + // Search for the next token's start (i.e. the next non-delimiter character) + for (uint i = _tokenEnd; i < _str.size(); i++) { + if (!_delimiters.contains(_str[i])) + return false; // Found a token so the tokenizer is not empty + } + // Didn't find any more tokens so the tokenizer is empty + return true; +} + +String StringTokenizer::nextToken() { + // Seek to next token's start (i.e. jump over the delimiters before next token) + for (_tokenBegin = _tokenEnd; _tokenBegin < _str.size() && _delimiters.contains(_str[_tokenBegin]); _tokenBegin++) + ; + // Seek to the token's end (i.e. jump over the non-delimiters) + for (_tokenEnd = _tokenBegin; _tokenEnd < _str.size() && !_delimiters.contains(_str[_tokenEnd]); _tokenEnd++) + ; + // Return the found token + return String(_str.c_str() + _tokenBegin, _tokenEnd - _tokenBegin); +} + +} // End of namespace Common + -- cgit v1.2.3