// StringTokenizer.C -*- C++ -*-
// Copyright (c) 1997, 1998 Etienne BERNARD
+// Copyright (c) 2005 Clinton Ebadi
// 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
// 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "StringTokenizer.H"
-StringTokenizer::StringTokenizer(String string)
- : st(string), pos(0)
+#include <string>
+
+#include <cstring>
+
+StringTokenizer::StringTokenizer(std::string s)
+ : st(s), pos(0)
{ }
bool
-StringTokenizer::hasMoreTokens()
+StringTokenizer::more_tokens_p ()
{
if (pos == st.length())
return false;
- for (int i = pos; i < st.length(); i++)
+ for (std::string::size_type i = pos; i < st.length(); i++)
if (st[i] != ' ' && st[i] != '\t')
return true;
}
bool
-StringTokenizer::hasMoreTokens(char c)
+StringTokenizer::more_tokens_p (char c)
{
if (pos == st.length())
return false;
- for (int i = pos; i < st.length(); i++)
+ for (std::string::size_type i = pos; i < st.length(); i++)
if (st[i] != c)
return true;
return false;
}
-int
-StringTokenizer::countTokens()
+unsigned int
+StringTokenizer::count_tokens ()
{
- int i = 0;
- StringTokenizer s(st);
+ unsigned int i = 0;
+ StringTokenizer s (st);
+
+ while (s.more_tokens_p ())
+ {
+ s.next_token ();
+ i++;
+ }
- while (s.hasMoreTokens()) {
- s.nextToken();
- i++;
- }
-
return i;
}
-int
-StringTokenizer::countTokens(char c)
+unsigned int
+StringTokenizer::count_tokens (char c)
{
- int i = 0;
+ unsigned int i = 0;
StringTokenizer s(st);
- while (s.hasMoreTokens(c)) {
- s.nextToken(c);
- i++;
- }
-
+ while (s.more_tokens_p (c))
+ {
+ s.next_token (c);
+ i++;
+ }
+
return i;
}
-String
-StringTokenizer::nextToken()
+std::string
+StringTokenizer::next_token()
{
- int i = pos;
+ std::string::size_type i = pos;
while (i < st.length() && (st[i] == ' ' || st[i] == '\t'))
i++;
- for (int j = i; j < st.length(); j++)
- if (st[j] == ' ' || st[j] == '\t') {
- pos = j + 1;
- return st.subString(i, j - 1);
- }
+ for (std::string::size_type j = i; j < st.length(); j++)
+ if (st[j] == ' ' || st[j] == '\t')
+ {
+ pos = j + 1;
+ return st.substr (i, j - i);
+ }
pos = st.length();
- return st.subString(i, st.length() - 1);
+ return st.substr (i, st.length() - i);
}
-String
-StringTokenizer::nextToken(char c, bool empty)
+std::string
+StringTokenizer::next_token (char c, bool empty)
{
- int i = pos;
+ std::string::size_type i = pos;
+ std::string::size_type j = 0;
while (i < st.length() && (st[i] == c))
- i++;
- for (int j = i; j < st.length(); j++)
- if (st[j] == c) {
- pos = j + 1;
- return st.subString(i, j - 1);
+ {
+ i++;
+ }
+
+ for (j = i; j < st.length(); j++)
+ {
+ if (st[j] == c)
+ {
+ pos = j + 1;
+ return st.substr (i, j - i);
+ }
}
if (empty)
return "";
-
+
pos = st.length();
- return st.subString(i, st.length() - 1);
+ return st.substr (i, st.length() - i);
}
-String
+std::string
StringTokenizer::rest()
{
if (pos == st.length())
return "";
- while (pos < st.length() && (st[pos] == ' ' || st[pos] == '\t'))
+ // Skip whitespace
+ while (pos < st.length() && (std::isspace (st[pos])))
pos++;
- return st.subString(pos, st.length() - 1);
+ return st.substr (pos, st.length() - pos);
}