Bug 1305422 - part 6 - pass explicit end iterators for CopyTo{Upper,Lower}Case; r=erahm

This change avoids calling size_forward on the iterator, which we are
trying to eliminate.
This commit is contained in:
Nathan Froyd
2016-09-29 22:33:57 -04:00
parent 755d30ff92
commit 5d94c1a8b2

View File

@@ -758,15 +758,17 @@ class CopyToUpperCase
public:
typedef char value_type;
explicit CopyToUpperCase(nsACString::iterator& aDestIter)
explicit CopyToUpperCase(nsACString::iterator& aDestIter,
const nsACString::iterator& aEndIter)
: mIter(aDestIter)
, mEnd(aEndIter)
{
}
uint32_t
write(const char* aSource, uint32_t aSourceLength)
{
uint32_t len = XPCOM_MIN(uint32_t(mIter.size_forward()), aSourceLength);
uint32_t len = XPCOM_MIN(uint32_t(mEnd - mIter), aSourceLength);
char* cp = mIter.get();
const char* end = aSource + len;
while (aSource != end) {
@@ -785,16 +787,17 @@ public:
protected:
nsACString::iterator& mIter;
const nsACString::iterator& mEnd;
};
void
ToUpperCase(const nsACString& aSource, nsACString& aDest)
{
nsACString::const_iterator fromBegin, fromEnd;
nsACString::iterator toBegin;
nsACString::iterator toBegin, toEnd;
aDest.SetLength(aSource.Length());
CopyToUpperCase converter(aDest.BeginWriting(toBegin));
CopyToUpperCase converter(aDest.BeginWriting(toBegin), aDest.EndWriting(toEnd));
copy_string(aSource.BeginReading(fromBegin), aSource.EndReading(fromEnd),
converter);
}
@@ -839,15 +842,17 @@ class CopyToLowerCase
public:
typedef char value_type;
explicit CopyToLowerCase(nsACString::iterator& aDestIter)
explicit CopyToLowerCase(nsACString::iterator& aDestIter,
const nsACString::iterator& aEndIter)
: mIter(aDestIter)
, mEnd(aEndIter)
{
}
uint32_t
write(const char* aSource, uint32_t aSourceLength)
{
uint32_t len = XPCOM_MIN(uint32_t(mIter.size_forward()), aSourceLength);
uint32_t len = XPCOM_MIN(uint32_t(mEnd - mIter), aSourceLength);
char* cp = mIter.get();
const char* end = aSource + len;
while (aSource != end) {
@@ -866,16 +871,17 @@ public:
protected:
nsACString::iterator& mIter;
const nsACString::iterator& mEnd;
};
void
ToLowerCase(const nsACString& aSource, nsACString& aDest)
{
nsACString::const_iterator fromBegin, fromEnd;
nsACString::iterator toBegin;
nsACString::iterator toBegin, toEnd;
aDest.SetLength(aSource.Length());
CopyToLowerCase converter(aDest.BeginWriting(toBegin));
CopyToLowerCase converter(aDest.BeginWriting(toBegin), aDest.EndWriting(toEnd));
copy_string(aSource.BeginReading(fromBegin), aSource.EndReading(fromEnd),
converter);
}