diff --git a/mozilla/string/public/nsAReadableString.h b/mozilla/string/public/nsAReadableString.h index 23223135ab6..e2dbad1e89c 100644 --- a/mozilla/string/public/nsAReadableString.h +++ b/mozilla/string/public/nsAReadableString.h @@ -1184,6 +1184,15 @@ class nsPromiseSubstring // nothing else to do here } + nsPromiseSubstring( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + : mString(*aStart.mOwningString) + { + nsReadingIterator zeroPoint; + mOwningString.BeginReading(zeroPoint); + mStartPos = Distance(zeroPoint, aStart); + mLength = Distance(aStart, aEnd); + } + // nsPromiseSubstring( const nsPromiseSubstring& ); // auto-generated copy-constructor should be OK // ~nsPromiseSubstring(); // auto-generated destructor OK @@ -1278,6 +1287,13 @@ Substring( const basic_nsAReadableString& aString, PRUint32 aStartPos, PR return nsPromiseSubstring(aString, aStartPos, aSubstringLength); } +template +nsPromiseSubstring +Substring( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return nsPromiseSubstring(aStart, aEnd); + } + template int Compare( const basic_nsAReadableString& lhs, const basic_nsAReadableString& rhs ) diff --git a/mozilla/string/public/nsReadableUtils.h b/mozilla/string/public/nsReadableUtils.h index a9f39d0b0e9..7b82e3fa4eb 100755 --- a/mozilla/string/public/nsReadableUtils.h +++ b/mozilla/string/public/nsReadableUtils.h @@ -35,6 +35,11 @@ #include "nsAWritableString.h" #endif +NS_COM size_t Distance( const nsReadingIterator&, const nsReadingIterator& ); +NS_COM size_t Distance( const nsReadingIterator&, const nsReadingIterator& ); + + + NS_COM void CopyUCS2toASCII( const nsAReadableString& aSource, nsAWritableCString& aDest ); NS_COM void CopyASCIItoUCS2( const nsAReadableCString& aSource, nsAWritableString& aDest ); diff --git a/mozilla/string/src/nsReadableUtils.cpp b/mozilla/string/src/nsReadableUtils.cpp index 5527e1e48c8..c67b2858b24 100755 --- a/mozilla/string/src/nsReadableUtils.cpp +++ b/mozilla/string/src/nsReadableUtils.cpp @@ -27,6 +27,45 @@ #include "nsCRT.h" +template class CalculateLength + { + public: + typedef CharT value_type; + + CalculateLength() : mDistance(0) { } + size_t GetDistance() const { return mDistance; } + + PRUint32 write( const CharT*, PRUint32 N ) + { mDistance += N; return N; } + private: + size_t mDistance; + }; + +template +inline +size_t +Distance_Impl( const nsReadingIterator& aStart, + const nsReadingIterator& aEnd ) + { + CalculateLength sink; + nsReadingIterator fromBegin(aStart); + copy_string(fromBegin, aEnd, sink); + return sink.GetDistance(); + } + +NS_COM +size_t +Distance( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return Distance_Impl(aStart, aEnd); + } + +NS_COM +size_t +Distance( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return Distance_Impl(aStart, aEnd); + } diff --git a/mozilla/xpcom/ds/nsAReadableString.h b/mozilla/xpcom/ds/nsAReadableString.h index 23223135ab6..e2dbad1e89c 100644 --- a/mozilla/xpcom/ds/nsAReadableString.h +++ b/mozilla/xpcom/ds/nsAReadableString.h @@ -1184,6 +1184,15 @@ class nsPromiseSubstring // nothing else to do here } + nsPromiseSubstring( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + : mString(*aStart.mOwningString) + { + nsReadingIterator zeroPoint; + mOwningString.BeginReading(zeroPoint); + mStartPos = Distance(zeroPoint, aStart); + mLength = Distance(aStart, aEnd); + } + // nsPromiseSubstring( const nsPromiseSubstring& ); // auto-generated copy-constructor should be OK // ~nsPromiseSubstring(); // auto-generated destructor OK @@ -1278,6 +1287,13 @@ Substring( const basic_nsAReadableString& aString, PRUint32 aStartPos, PR return nsPromiseSubstring(aString, aStartPos, aSubstringLength); } +template +nsPromiseSubstring +Substring( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return nsPromiseSubstring(aStart, aEnd); + } + template int Compare( const basic_nsAReadableString& lhs, const basic_nsAReadableString& rhs ) diff --git a/mozilla/xpcom/ds/nsReadableUtils.cpp b/mozilla/xpcom/ds/nsReadableUtils.cpp index 5527e1e48c8..c67b2858b24 100755 --- a/mozilla/xpcom/ds/nsReadableUtils.cpp +++ b/mozilla/xpcom/ds/nsReadableUtils.cpp @@ -27,6 +27,45 @@ #include "nsCRT.h" +template class CalculateLength + { + public: + typedef CharT value_type; + + CalculateLength() : mDistance(0) { } + size_t GetDistance() const { return mDistance; } + + PRUint32 write( const CharT*, PRUint32 N ) + { mDistance += N; return N; } + private: + size_t mDistance; + }; + +template +inline +size_t +Distance_Impl( const nsReadingIterator& aStart, + const nsReadingIterator& aEnd ) + { + CalculateLength sink; + nsReadingIterator fromBegin(aStart); + copy_string(fromBegin, aEnd, sink); + return sink.GetDistance(); + } + +NS_COM +size_t +Distance( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return Distance_Impl(aStart, aEnd); + } + +NS_COM +size_t +Distance( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return Distance_Impl(aStart, aEnd); + } diff --git a/mozilla/xpcom/ds/nsReadableUtils.h b/mozilla/xpcom/ds/nsReadableUtils.h index a9f39d0b0e9..7b82e3fa4eb 100755 --- a/mozilla/xpcom/ds/nsReadableUtils.h +++ b/mozilla/xpcom/ds/nsReadableUtils.h @@ -35,6 +35,11 @@ #include "nsAWritableString.h" #endif +NS_COM size_t Distance( const nsReadingIterator&, const nsReadingIterator& ); +NS_COM size_t Distance( const nsReadingIterator&, const nsReadingIterator& ); + + + NS_COM void CopyUCS2toASCII( const nsAReadableString& aSource, nsAWritableCString& aDest ); NS_COM void CopyASCIItoUCS2( const nsAReadableCString& aSource, nsAWritableString& aDest ); diff --git a/mozilla/xpcom/string/public/nsAReadableString.h b/mozilla/xpcom/string/public/nsAReadableString.h index 23223135ab6..e2dbad1e89c 100644 --- a/mozilla/xpcom/string/public/nsAReadableString.h +++ b/mozilla/xpcom/string/public/nsAReadableString.h @@ -1184,6 +1184,15 @@ class nsPromiseSubstring // nothing else to do here } + nsPromiseSubstring( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + : mString(*aStart.mOwningString) + { + nsReadingIterator zeroPoint; + mOwningString.BeginReading(zeroPoint); + mStartPos = Distance(zeroPoint, aStart); + mLength = Distance(aStart, aEnd); + } + // nsPromiseSubstring( const nsPromiseSubstring& ); // auto-generated copy-constructor should be OK // ~nsPromiseSubstring(); // auto-generated destructor OK @@ -1278,6 +1287,13 @@ Substring( const basic_nsAReadableString& aString, PRUint32 aStartPos, PR return nsPromiseSubstring(aString, aStartPos, aSubstringLength); } +template +nsPromiseSubstring +Substring( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return nsPromiseSubstring(aStart, aEnd); + } + template int Compare( const basic_nsAReadableString& lhs, const basic_nsAReadableString& rhs ) diff --git a/mozilla/xpcom/string/public/nsReadableUtils.h b/mozilla/xpcom/string/public/nsReadableUtils.h index a9f39d0b0e9..7b82e3fa4eb 100755 --- a/mozilla/xpcom/string/public/nsReadableUtils.h +++ b/mozilla/xpcom/string/public/nsReadableUtils.h @@ -35,6 +35,11 @@ #include "nsAWritableString.h" #endif +NS_COM size_t Distance( const nsReadingIterator&, const nsReadingIterator& ); +NS_COM size_t Distance( const nsReadingIterator&, const nsReadingIterator& ); + + + NS_COM void CopyUCS2toASCII( const nsAReadableString& aSource, nsAWritableCString& aDest ); NS_COM void CopyASCIItoUCS2( const nsAReadableCString& aSource, nsAWritableString& aDest ); diff --git a/mozilla/xpcom/string/src/nsReadableUtils.cpp b/mozilla/xpcom/string/src/nsReadableUtils.cpp index 5527e1e48c8..c67b2858b24 100755 --- a/mozilla/xpcom/string/src/nsReadableUtils.cpp +++ b/mozilla/xpcom/string/src/nsReadableUtils.cpp @@ -27,6 +27,45 @@ #include "nsCRT.h" +template class CalculateLength + { + public: + typedef CharT value_type; + + CalculateLength() : mDistance(0) { } + size_t GetDistance() const { return mDistance; } + + PRUint32 write( const CharT*, PRUint32 N ) + { mDistance += N; return N; } + private: + size_t mDistance; + }; + +template +inline +size_t +Distance_Impl( const nsReadingIterator& aStart, + const nsReadingIterator& aEnd ) + { + CalculateLength sink; + nsReadingIterator fromBegin(aStart); + copy_string(fromBegin, aEnd, sink); + return sink.GetDistance(); + } + +NS_COM +size_t +Distance( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return Distance_Impl(aStart, aEnd); + } + +NS_COM +size_t +Distance( const nsReadingIterator& aStart, const nsReadingIterator& aEnd ) + { + return Distance_Impl(aStart, aEnd); + }