From fbd0ea089374cd85cbab8d7876c7030061e3944c Mon Sep 17 00:00:00 2001 From: "scc%mozilla.org" Date: Thu, 5 Oct 2000 01:07:02 +0000 Subject: [PATCH] bug #54712, r=rjc, a=waterson. Added a |Distance| function to calculate the span between two iterators, then added a constructor and appropriate global function to allow |Substring|s to be made from iterators in addition to the old scheme of {index,length} git-svn-id: svn://10.0.0.236/trunk@80396 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/string/public/nsAReadableString.h | 16 ++++++++ mozilla/string/public/nsReadableUtils.h | 5 +++ mozilla/string/src/nsReadableUtils.cpp | 39 +++++++++++++++++++ mozilla/xpcom/ds/nsAReadableString.h | 16 ++++++++ mozilla/xpcom/ds/nsReadableUtils.cpp | 39 +++++++++++++++++++ mozilla/xpcom/ds/nsReadableUtils.h | 5 +++ .../xpcom/string/public/nsAReadableString.h | 16 ++++++++ mozilla/xpcom/string/public/nsReadableUtils.h | 5 +++ mozilla/xpcom/string/src/nsReadableUtils.cpp | 39 +++++++++++++++++++ 9 files changed, 180 insertions(+) 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); + }