diff --git a/mozilla/content/base/public/nsTextFragment.h b/mozilla/content/base/public/nsTextFragment.h index efcaba74815..c1b56a7fd35 100644 --- a/mozilla/content/base/public/nsTextFragment.h +++ b/mozilla/content/base/public/nsTextFragment.h @@ -58,9 +58,7 @@ public: */ nsTextFragment() { m1b = nsnull; - mInHeap = 0; - mIs2b = 0; - mLength = 0; + mAllBits = 0; } ~nsTextFragment(); @@ -117,7 +115,7 @@ public: * Return PR_TRUE if this fragment is represented by PRUnichar data */ PRBool Is2b() const { - return mIs2b; + return mState.mIs2b; } /** @@ -141,7 +139,7 @@ public: * characters, not the number of bytes to store the characters. */ PRInt32 GetLength() const { - return PRInt32(mLength); + return PRInt32(mState.mLength); } /** @@ -210,8 +208,8 @@ public: * index. This always returns a PRUnichar. */ PRUnichar CharAt(PRInt32 aIndex) const { - NS_ASSERTION(PRUint32(aIndex) < mLength, "bad index"); - return mIs2b ? m2b[aIndex] : PRUnichar(m1b[aIndex]); + NS_ASSERTION(PRUint32(aIndex) < mState.mLength, "bad index"); + return mState.mIs2b ? m2b[aIndex] : PRUnichar(m1b[aIndex]); } protected: @@ -219,9 +217,17 @@ protected: PRUnichar* m2b; unsigned char* m1b; }; - PRUint32 mInHeap : 1; - PRUint32 mIs2b : 1; - PRUint32 mLength : 30; + + struct FragmentBits { + PRUint32 mInHeap : 1; + PRUint32 mIs2b : 1; + PRUint32 mLength : 30; + }; + + union { + PRUint32 mAllBits; + FragmentBits mState; + }; void ReleaseText(); }; diff --git a/mozilla/content/base/src/nsTextFragment.cpp b/mozilla/content/base/src/nsTextFragment.cpp index e9adc87defd..7b2e52b7af1 100644 --- a/mozilla/content/base/src/nsTextFragment.cpp +++ b/mozilla/content/base/src/nsTextFragment.cpp @@ -28,8 +28,8 @@ nsTextFragment::~nsTextFragment() void nsTextFragment::ReleaseText() { - if (mLength && m1b && mInHeap) { - if (mIs2b) { + if (mState.mLength && m1b && mState.mInHeap) { + if (mState.mIs2b) { delete [] m2b; } else { @@ -37,9 +37,9 @@ nsTextFragment::ReleaseText() } } m1b = nsnull; - mIs2b = 0; - mInHeap = 0; - mLength = 0; + mState.mIs2b = 0; + mState.mInHeap = 0; + mState.mLength = 0; } nsTextFragment::nsTextFragment(const nsTextFragment& aOther) @@ -106,9 +106,9 @@ nsTextFragment::SetTo(PRUnichar* aBuffer, PRInt32 aLength, PRBool aRelease) ReleaseText(); m2b = aBuffer; - mIs2b = 1; - mInHeap = aRelease ? 1 : 0; - mLength = aLength; + mState.mIs2b = 1; + mState.mInHeap = aRelease ? 1 : 0; + mState.mLength = aLength; } void @@ -137,9 +137,9 @@ nsTextFragment::SetTo(const PRUnichar* aBuffer, PRInt32 aLength) // Setup our fields m2b = nt; - mIs2b = 1; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 1; + mState.mInHeap = 1; + mState.mLength = aLength; } } else { @@ -155,9 +155,9 @@ nsTextFragment::SetTo(const PRUnichar* aBuffer, PRInt32 aLength) // Setup our fields m1b = nt; - mIs2b = 0; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 0; + mState.mInHeap = 1; + mState.mLength = aLength; } } } @@ -173,9 +173,9 @@ nsTextFragment::SetTo(const char* aBuffer, PRInt32 aLength) nsCRT::memcpy(nt, aBuffer, sizeof(unsigned char) * aLength); m1b = nt; - mIs2b = 0; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 0; + mState.mInHeap = 1; + mState.mLength = aLength; } } } @@ -183,11 +183,11 @@ nsTextFragment::SetTo(const char* aBuffer, PRInt32 aLength) void nsTextFragment::AppendTo(nsString& aString) const { - if (mIs2b) { - aString.Append(m2b, mLength); + if (mState.mIs2b) { + aString.Append(m2b, mState.mLength); } else { - aString.Append((char*)m1b, mLength); + aString.Append((char*)m1b, mState.mLength); } } @@ -196,10 +196,10 @@ nsTextFragment::CopyTo(PRUnichar* aDest, PRInt32 aOffset, PRInt32 aCount) { if (aOffset < 0) aOffset = 0; if (aOffset + aCount > GetLength()) { - aCount = mLength - aOffset; + aCount = mState.mLength - aOffset; } if (0 != aCount) { - if (mIs2b) { + if (mState.mIs2b) { nsCRT::memcpy(aDest, m2b + aOffset, sizeof(PRUnichar) * aCount); } else { @@ -217,10 +217,10 @@ nsTextFragment::CopyTo(char* aDest, PRInt32 aOffset, PRInt32 aCount) { if (aOffset < 0) aOffset = 0; if (aOffset + aCount > GetLength()) { - aCount = mLength - aOffset; + aCount = mState.mLength - aOffset; } if (0 != aCount) { - if (mIs2b) { + if (mState.mIs2b) { PRUnichar* cp = m2b + aOffset; PRUnichar* end = cp + aCount; while (cp < end) { diff --git a/mozilla/content/base/src/nsTextFragment.h b/mozilla/content/base/src/nsTextFragment.h index efcaba74815..c1b56a7fd35 100644 --- a/mozilla/content/base/src/nsTextFragment.h +++ b/mozilla/content/base/src/nsTextFragment.h @@ -58,9 +58,7 @@ public: */ nsTextFragment() { m1b = nsnull; - mInHeap = 0; - mIs2b = 0; - mLength = 0; + mAllBits = 0; } ~nsTextFragment(); @@ -117,7 +115,7 @@ public: * Return PR_TRUE if this fragment is represented by PRUnichar data */ PRBool Is2b() const { - return mIs2b; + return mState.mIs2b; } /** @@ -141,7 +139,7 @@ public: * characters, not the number of bytes to store the characters. */ PRInt32 GetLength() const { - return PRInt32(mLength); + return PRInt32(mState.mLength); } /** @@ -210,8 +208,8 @@ public: * index. This always returns a PRUnichar. */ PRUnichar CharAt(PRInt32 aIndex) const { - NS_ASSERTION(PRUint32(aIndex) < mLength, "bad index"); - return mIs2b ? m2b[aIndex] : PRUnichar(m1b[aIndex]); + NS_ASSERTION(PRUint32(aIndex) < mState.mLength, "bad index"); + return mState.mIs2b ? m2b[aIndex] : PRUnichar(m1b[aIndex]); } protected: @@ -219,9 +217,17 @@ protected: PRUnichar* m2b; unsigned char* m1b; }; - PRUint32 mInHeap : 1; - PRUint32 mIs2b : 1; - PRUint32 mLength : 30; + + struct FragmentBits { + PRUint32 mInHeap : 1; + PRUint32 mIs2b : 1; + PRUint32 mLength : 30; + }; + + union { + PRUint32 mAllBits; + FragmentBits mState; + }; void ReleaseText(); }; diff --git a/mozilla/content/shared/public/nsTextFragment.h b/mozilla/content/shared/public/nsTextFragment.h index efcaba74815..c1b56a7fd35 100644 --- a/mozilla/content/shared/public/nsTextFragment.h +++ b/mozilla/content/shared/public/nsTextFragment.h @@ -58,9 +58,7 @@ public: */ nsTextFragment() { m1b = nsnull; - mInHeap = 0; - mIs2b = 0; - mLength = 0; + mAllBits = 0; } ~nsTextFragment(); @@ -117,7 +115,7 @@ public: * Return PR_TRUE if this fragment is represented by PRUnichar data */ PRBool Is2b() const { - return mIs2b; + return mState.mIs2b; } /** @@ -141,7 +139,7 @@ public: * characters, not the number of bytes to store the characters. */ PRInt32 GetLength() const { - return PRInt32(mLength); + return PRInt32(mState.mLength); } /** @@ -210,8 +208,8 @@ public: * index. This always returns a PRUnichar. */ PRUnichar CharAt(PRInt32 aIndex) const { - NS_ASSERTION(PRUint32(aIndex) < mLength, "bad index"); - return mIs2b ? m2b[aIndex] : PRUnichar(m1b[aIndex]); + NS_ASSERTION(PRUint32(aIndex) < mState.mLength, "bad index"); + return mState.mIs2b ? m2b[aIndex] : PRUnichar(m1b[aIndex]); } protected: @@ -219,9 +217,17 @@ protected: PRUnichar* m2b; unsigned char* m1b; }; - PRUint32 mInHeap : 1; - PRUint32 mIs2b : 1; - PRUint32 mLength : 30; + + struct FragmentBits { + PRUint32 mInHeap : 1; + PRUint32 mIs2b : 1; + PRUint32 mLength : 30; + }; + + union { + PRUint32 mAllBits; + FragmentBits mState; + }; void ReleaseText(); }; diff --git a/mozilla/content/shared/src/nsTextFragment.cpp b/mozilla/content/shared/src/nsTextFragment.cpp index e9adc87defd..7b2e52b7af1 100644 --- a/mozilla/content/shared/src/nsTextFragment.cpp +++ b/mozilla/content/shared/src/nsTextFragment.cpp @@ -28,8 +28,8 @@ nsTextFragment::~nsTextFragment() void nsTextFragment::ReleaseText() { - if (mLength && m1b && mInHeap) { - if (mIs2b) { + if (mState.mLength && m1b && mState.mInHeap) { + if (mState.mIs2b) { delete [] m2b; } else { @@ -37,9 +37,9 @@ nsTextFragment::ReleaseText() } } m1b = nsnull; - mIs2b = 0; - mInHeap = 0; - mLength = 0; + mState.mIs2b = 0; + mState.mInHeap = 0; + mState.mLength = 0; } nsTextFragment::nsTextFragment(const nsTextFragment& aOther) @@ -106,9 +106,9 @@ nsTextFragment::SetTo(PRUnichar* aBuffer, PRInt32 aLength, PRBool aRelease) ReleaseText(); m2b = aBuffer; - mIs2b = 1; - mInHeap = aRelease ? 1 : 0; - mLength = aLength; + mState.mIs2b = 1; + mState.mInHeap = aRelease ? 1 : 0; + mState.mLength = aLength; } void @@ -137,9 +137,9 @@ nsTextFragment::SetTo(const PRUnichar* aBuffer, PRInt32 aLength) // Setup our fields m2b = nt; - mIs2b = 1; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 1; + mState.mInHeap = 1; + mState.mLength = aLength; } } else { @@ -155,9 +155,9 @@ nsTextFragment::SetTo(const PRUnichar* aBuffer, PRInt32 aLength) // Setup our fields m1b = nt; - mIs2b = 0; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 0; + mState.mInHeap = 1; + mState.mLength = aLength; } } } @@ -173,9 +173,9 @@ nsTextFragment::SetTo(const char* aBuffer, PRInt32 aLength) nsCRT::memcpy(nt, aBuffer, sizeof(unsigned char) * aLength); m1b = nt; - mIs2b = 0; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 0; + mState.mInHeap = 1; + mState.mLength = aLength; } } } @@ -183,11 +183,11 @@ nsTextFragment::SetTo(const char* aBuffer, PRInt32 aLength) void nsTextFragment::AppendTo(nsString& aString) const { - if (mIs2b) { - aString.Append(m2b, mLength); + if (mState.mIs2b) { + aString.Append(m2b, mState.mLength); } else { - aString.Append((char*)m1b, mLength); + aString.Append((char*)m1b, mState.mLength); } } @@ -196,10 +196,10 @@ nsTextFragment::CopyTo(PRUnichar* aDest, PRInt32 aOffset, PRInt32 aCount) { if (aOffset < 0) aOffset = 0; if (aOffset + aCount > GetLength()) { - aCount = mLength - aOffset; + aCount = mState.mLength - aOffset; } if (0 != aCount) { - if (mIs2b) { + if (mState.mIs2b) { nsCRT::memcpy(aDest, m2b + aOffset, sizeof(PRUnichar) * aCount); } else { @@ -217,10 +217,10 @@ nsTextFragment::CopyTo(char* aDest, PRInt32 aOffset, PRInt32 aCount) { if (aOffset < 0) aOffset = 0; if (aOffset + aCount > GetLength()) { - aCount = mLength - aOffset; + aCount = mState.mLength - aOffset; } if (0 != aCount) { - if (mIs2b) { + if (mState.mIs2b) { PRUnichar* cp = m2b + aOffset; PRUnichar* end = cp + aCount; while (cp < end) { diff --git a/mozilla/layout/base/public/nsTextFragment.h b/mozilla/layout/base/public/nsTextFragment.h index efcaba74815..c1b56a7fd35 100644 --- a/mozilla/layout/base/public/nsTextFragment.h +++ b/mozilla/layout/base/public/nsTextFragment.h @@ -58,9 +58,7 @@ public: */ nsTextFragment() { m1b = nsnull; - mInHeap = 0; - mIs2b = 0; - mLength = 0; + mAllBits = 0; } ~nsTextFragment(); @@ -117,7 +115,7 @@ public: * Return PR_TRUE if this fragment is represented by PRUnichar data */ PRBool Is2b() const { - return mIs2b; + return mState.mIs2b; } /** @@ -141,7 +139,7 @@ public: * characters, not the number of bytes to store the characters. */ PRInt32 GetLength() const { - return PRInt32(mLength); + return PRInt32(mState.mLength); } /** @@ -210,8 +208,8 @@ public: * index. This always returns a PRUnichar. */ PRUnichar CharAt(PRInt32 aIndex) const { - NS_ASSERTION(PRUint32(aIndex) < mLength, "bad index"); - return mIs2b ? m2b[aIndex] : PRUnichar(m1b[aIndex]); + NS_ASSERTION(PRUint32(aIndex) < mState.mLength, "bad index"); + return mState.mIs2b ? m2b[aIndex] : PRUnichar(m1b[aIndex]); } protected: @@ -219,9 +217,17 @@ protected: PRUnichar* m2b; unsigned char* m1b; }; - PRUint32 mInHeap : 1; - PRUint32 mIs2b : 1; - PRUint32 mLength : 30; + + struct FragmentBits { + PRUint32 mInHeap : 1; + PRUint32 mIs2b : 1; + PRUint32 mLength : 30; + }; + + union { + PRUint32 mAllBits; + FragmentBits mState; + }; void ReleaseText(); }; diff --git a/mozilla/layout/base/src/nsTextFragment.cpp b/mozilla/layout/base/src/nsTextFragment.cpp index e9adc87defd..7b2e52b7af1 100644 --- a/mozilla/layout/base/src/nsTextFragment.cpp +++ b/mozilla/layout/base/src/nsTextFragment.cpp @@ -28,8 +28,8 @@ nsTextFragment::~nsTextFragment() void nsTextFragment::ReleaseText() { - if (mLength && m1b && mInHeap) { - if (mIs2b) { + if (mState.mLength && m1b && mState.mInHeap) { + if (mState.mIs2b) { delete [] m2b; } else { @@ -37,9 +37,9 @@ nsTextFragment::ReleaseText() } } m1b = nsnull; - mIs2b = 0; - mInHeap = 0; - mLength = 0; + mState.mIs2b = 0; + mState.mInHeap = 0; + mState.mLength = 0; } nsTextFragment::nsTextFragment(const nsTextFragment& aOther) @@ -106,9 +106,9 @@ nsTextFragment::SetTo(PRUnichar* aBuffer, PRInt32 aLength, PRBool aRelease) ReleaseText(); m2b = aBuffer; - mIs2b = 1; - mInHeap = aRelease ? 1 : 0; - mLength = aLength; + mState.mIs2b = 1; + mState.mInHeap = aRelease ? 1 : 0; + mState.mLength = aLength; } void @@ -137,9 +137,9 @@ nsTextFragment::SetTo(const PRUnichar* aBuffer, PRInt32 aLength) // Setup our fields m2b = nt; - mIs2b = 1; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 1; + mState.mInHeap = 1; + mState.mLength = aLength; } } else { @@ -155,9 +155,9 @@ nsTextFragment::SetTo(const PRUnichar* aBuffer, PRInt32 aLength) // Setup our fields m1b = nt; - mIs2b = 0; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 0; + mState.mInHeap = 1; + mState.mLength = aLength; } } } @@ -173,9 +173,9 @@ nsTextFragment::SetTo(const char* aBuffer, PRInt32 aLength) nsCRT::memcpy(nt, aBuffer, sizeof(unsigned char) * aLength); m1b = nt; - mIs2b = 0; - mInHeap = 1; - mLength = aLength; + mState.mIs2b = 0; + mState.mInHeap = 1; + mState.mLength = aLength; } } } @@ -183,11 +183,11 @@ nsTextFragment::SetTo(const char* aBuffer, PRInt32 aLength) void nsTextFragment::AppendTo(nsString& aString) const { - if (mIs2b) { - aString.Append(m2b, mLength); + if (mState.mIs2b) { + aString.Append(m2b, mState.mLength); } else { - aString.Append((char*)m1b, mLength); + aString.Append((char*)m1b, mState.mLength); } } @@ -196,10 +196,10 @@ nsTextFragment::CopyTo(PRUnichar* aDest, PRInt32 aOffset, PRInt32 aCount) { if (aOffset < 0) aOffset = 0; if (aOffset + aCount > GetLength()) { - aCount = mLength - aOffset; + aCount = mState.mLength - aOffset; } if (0 != aCount) { - if (mIs2b) { + if (mState.mIs2b) { nsCRT::memcpy(aDest, m2b + aOffset, sizeof(PRUnichar) * aCount); } else { @@ -217,10 +217,10 @@ nsTextFragment::CopyTo(char* aDest, PRInt32 aOffset, PRInt32 aCount) { if (aOffset < 0) aOffset = 0; if (aOffset + aCount > GetLength()) { - aCount = mLength - aOffset; + aCount = mState.mLength - aOffset; } if (0 != aCount) { - if (mIs2b) { + if (mState.mIs2b) { PRUnichar* cp = m2b + aOffset; PRUnichar* end = cp + aCount; while (cp < end) {