/*********************************************************************************
* TotalCross Software Development Kit *
* Copyright (C) 2003 Gilbert Fridgen *
* Copyright (C) 2003-2012 SuperWaba Ltda. *
* All Rights Reserved *
* *
* This library and virtual machine 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. *
* *
* This file is covered by the GNU LESSER GENERAL PUBLIC LICENSE VERSION 3.0 *
* A copy of this license is located in file license.txt at the root of this *
* SDK or can be downloaded here: *
* http://www.gnu.org/licenses/lgpl-3.0.txt *
* *
*********************************************************************************/
package totalcross.pim.ce.builtin;
/** StringBuffer-like class for internal use. */
public class StringExt
{
private StringBuffer data;
/* wrapped Contructors */
public StringExt()
{
data = new StringBuffer(16);
}
public StringExt(int length)
{
data = new StringBuffer(length);
}
public StringExt(String str)
{
data = new StringBuffer(str);
}
public StringExt(StringBuffer str)
{
data = new StringBuffer(str.toString());
}
public StringExt(StringExt str)
{
data = new StringBuffer(str.toString());
}
/* wrapped methods in alphabetical order */
public StringExt append(boolean b)
{
data.append(b);
return this;
}
public StringExt append(char c)
{
data.append(c);
return this;
}
public StringExt append(char[] c)
{
data.append(c);
return this;
}
public StringExt append(char[] c, int offset, int length)
{
data.append(c, offset, length);
return this;
}
public StringExt append(double d)
{
data.append(d);
return this;
}
public StringExt append(int i)
{
data.append(i);
return this;
}
public StringExt append(long l)
{
data.append(l);
return this;
}
public StringExt append(Object obj)
{
data.append(obj);
return this;
}
public StringExt append(String str)
{
data.append(str);
return this;
}
public int capacity()
{
return data.capacity();
}
public char charAt(int i)
{
return data.charAt(i);
}
public StringExt delete(int start, int end)
{
data.delete(start, end);
return this;
}
public StringExt deleteCharAt(int i)
{
data.delete(i, i);
return this;
}
public void ensureCapacity(int min)
{
data.ensureCapacity(min);
}
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
{
data.getChars(srcBegin, srcEnd, dst, dstBegin);
}
public int length()
{
return data.length();
}
public void setLength(int newLength)
{
data.setLength(newLength);
}
public String toString()
{
return data.toString();
}
public StringExt clear()
{
data.setLength(0);
return this;
}
public boolean isEmpty()
{
return (data.length() == 0);
}
public StringExt cut(int numberOfChars)
{
if (length() - numberOfChars > 0)
setLength(length() - numberOfChars);
else
setLength(0);
return this;
}
public boolean contains(char c)
{
int n = length();
for (int i = 0; i < n; i++)
if (data.charAt(i) == c)
return true;
return false;
}
public boolean startsWith(char c)
{
if (length() == 0)
return false;
else
return charAt(0) == c;
}
public boolean startsWith(String str)
{
int n = str.length();
if (n > length())
return false;
for (int i = 0; i < n; i++)
if (str.charAt(i) != data.charAt(i))
return false;
return true;
}
public StringExt startWith(char c)
{
if (!startsWith(c))
append(c);
return this;
}
public StringExt startWith(String str)
{
if (!startsWith(str))
append(str);
return this;
}
public boolean endsWith(char c)
{
int len = length();
return (len == 0)?false: (charAt(len - 1) == c);
}
public StringExt endWith(char c)
{
if (!endsWith(c))
append(c);
return this;
}
public int count(char c)
{
int counter = 0;
int n = length();
for (int i = 0; i < n; i++)
if (data.charAt(i) == c)
counter++;
return counter;
}
public int count(String str)
{
int counter = 0;
int strLength = str.length();
char[] comp = str.toCharArray();
int n;
//int n = 0; // performance mesurement
StringExt buffer;
dataLoop:
{
n = length();
for (int i = 0; i < n; i++)
{
if (i + strLength > n)
break dataLoop; // this is the end; this isn't long enough any more
buffer = new StringExt();
bufferLoop:
{
for (int j = 0; j < strLength; j++)
{
//n++;
char tmp = charAt(i + j);
if (!(tmp == comp[j]))
break bufferLoop; // buffer doen't match char for char terminate
buffer.append(tmp);
}
// we will only get here if bufferLoop hasn't been broken - that means buffer == str !
counter++;
i += strLength - 1; // we found something, so jump ahead length of found Exp
}
}
}
//System.out.println("needed " + n + " iterations");
return counter;
}
}