void nsTString_CharT::Trim( const char* aSet, bool aTrimLeading, bool aTrimTrailing, bool aIgnoreQuotes ) { // the old implementation worried about aSet being null :-/ if (!aSet) return; char_type* start = mData; char_type* end = mData + mLength; // skip over quotes if requested if (aIgnoreQuotes && mLength > 2 && mData[0] == mData[mLength - 1] && (mData[0] == '\'' || mData[0] == '"')) { ++start; --end; } PRUint32 setLen = nsCharTraits<char>::length(aSet); if (aTrimLeading) { PRUint32 cutStart = start - mData; PRUint32 cutLength = 0; // walk forward from start to end for (; start != end; ++start, ++cutLength) { PRInt32 pos = FindChar1(aSet, setLen, 0, *start, setLen); if (pos == kNotFound) break; } if (cutLength) { Cut(cutStart, cutLength); // reset iterators start = mData + cutStart; end = mData + mLength - cutStart; } } if (aTrimTrailing) { PRUint32 cutEnd = end - mData; PRUint32 cutLength = 0; // walk backward from end to start --end; for (; end >= start; --end, ++cutLength) { PRInt32 pos = FindChar1(aSet, setLen, 0, *end, setLen); if (pos == kNotFound) break; } if (cutLength) Cut(cutEnd - cutLength, cutLength); } }
static PRInt32 find_char( const char* s, PRUint32 max, PRInt32 offset, const PRUnichar c, PRInt32 count ) { return FindChar1(s, max, offset, c, count); }