diff --git a/mozilla/string/public/nsSharedString.h b/mozilla/string/public/nsSharedString.h index 8195c86d414..24a3d90cc46 100644 --- a/mozilla/string/public/nsSharedString.h +++ b/mozilla/string/public/nsSharedString.h @@ -17,15 +17,15 @@ * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * + * Original Author: + * Scott Collins + * * Contributor(s): - * Scott Collins */ #ifndef _nsSharedString_h__ #define _nsSharedString_h__ - // WORK IN PROGRESS - #include "nsAReadableString.h" template @@ -106,15 +106,57 @@ basic_nsSharedString::GetReadableFragment( nsReadableFragment& aFr template -class nsSharedStringPtr +class basic_nsSharedStringPtr { public: - // ... + basic_nsSharedStringPtr() : mRawPtr(0) { } + + basic_nsSharedStringPtr( const basic_nsSharedStringPtr& rhs ) + : mRawPtr(rhs.mRawPtr) + { + mRawPtr->AddRef(); + } + + ~basic_nsSharedStringPtr() + { + if ( mRawPtr ) + mRawPtr->Release(); + } + + basic_nsSharedStringPtr& + operator=( const basic_nsSharedStringPtr& ); + + basic_nsSharedString* + operator->() const + { + NS_PRECONDITION(mRawPtr != 0, "You can't dereference a NULL string pointer with operator->()."); + return mRawPtr; + } + + basic_nsSharedString& + operator*() const + { + NS_PRECONDITION(mRawPtr != 0, "You can't dereference a NULL string pointer with operator->()."); + return *mRawPtr; + } private: - basic_nsSharedString* mRawPtr; + const basic_nsSharedString* mRawPtr; }; +template +basic_nsSharedStringPtr& +basic_nsSharedStringPtr::operator=( const basic_nsSharedStringPtr& rhs ) + // Not |inline| + { + if ( rhs.mRawPtr ) + rhs.mRawPtr->AddRef(); + basic_nsSharedString* oldPtr = mRawPtr; + mRawPtr = rhs.mRawPtr; + if ( oldPtr ) + oldPtr->Release(); + } + template basic_nsSharedString* @@ -140,5 +182,8 @@ new_nsSharedString( const basic_nsAReadableString& aReadable ) typedef basic_nsSharedString nsSharedString; typedef basic_nsSharedString nsSharedCString; +typedef basic_nsSharedStringPtr nsSharedStringPtr; +typedef basic_nsSharedStringPtr nsSharedCStringPtr; + #endif // !defined(_nsSharedString_h__) diff --git a/mozilla/xpcom/ds/nsSharedString.h b/mozilla/xpcom/ds/nsSharedString.h index 8195c86d414..24a3d90cc46 100644 --- a/mozilla/xpcom/ds/nsSharedString.h +++ b/mozilla/xpcom/ds/nsSharedString.h @@ -17,15 +17,15 @@ * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * + * Original Author: + * Scott Collins + * * Contributor(s): - * Scott Collins */ #ifndef _nsSharedString_h__ #define _nsSharedString_h__ - // WORK IN PROGRESS - #include "nsAReadableString.h" template @@ -106,15 +106,57 @@ basic_nsSharedString::GetReadableFragment( nsReadableFragment& aFr template -class nsSharedStringPtr +class basic_nsSharedStringPtr { public: - // ... + basic_nsSharedStringPtr() : mRawPtr(0) { } + + basic_nsSharedStringPtr( const basic_nsSharedStringPtr& rhs ) + : mRawPtr(rhs.mRawPtr) + { + mRawPtr->AddRef(); + } + + ~basic_nsSharedStringPtr() + { + if ( mRawPtr ) + mRawPtr->Release(); + } + + basic_nsSharedStringPtr& + operator=( const basic_nsSharedStringPtr& ); + + basic_nsSharedString* + operator->() const + { + NS_PRECONDITION(mRawPtr != 0, "You can't dereference a NULL string pointer with operator->()."); + return mRawPtr; + } + + basic_nsSharedString& + operator*() const + { + NS_PRECONDITION(mRawPtr != 0, "You can't dereference a NULL string pointer with operator->()."); + return *mRawPtr; + } private: - basic_nsSharedString* mRawPtr; + const basic_nsSharedString* mRawPtr; }; +template +basic_nsSharedStringPtr& +basic_nsSharedStringPtr::operator=( const basic_nsSharedStringPtr& rhs ) + // Not |inline| + { + if ( rhs.mRawPtr ) + rhs.mRawPtr->AddRef(); + basic_nsSharedString* oldPtr = mRawPtr; + mRawPtr = rhs.mRawPtr; + if ( oldPtr ) + oldPtr->Release(); + } + template basic_nsSharedString* @@ -140,5 +182,8 @@ new_nsSharedString( const basic_nsAReadableString& aReadable ) typedef basic_nsSharedString nsSharedString; typedef basic_nsSharedString nsSharedCString; +typedef basic_nsSharedStringPtr nsSharedStringPtr; +typedef basic_nsSharedStringPtr nsSharedCStringPtr; + #endif // !defined(_nsSharedString_h__) diff --git a/mozilla/xpcom/string/public/nsSharedString.h b/mozilla/xpcom/string/public/nsSharedString.h index 8195c86d414..24a3d90cc46 100644 --- a/mozilla/xpcom/string/public/nsSharedString.h +++ b/mozilla/xpcom/string/public/nsSharedString.h @@ -17,15 +17,15 @@ * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * + * Original Author: + * Scott Collins + * * Contributor(s): - * Scott Collins */ #ifndef _nsSharedString_h__ #define _nsSharedString_h__ - // WORK IN PROGRESS - #include "nsAReadableString.h" template @@ -106,15 +106,57 @@ basic_nsSharedString::GetReadableFragment( nsReadableFragment& aFr template -class nsSharedStringPtr +class basic_nsSharedStringPtr { public: - // ... + basic_nsSharedStringPtr() : mRawPtr(0) { } + + basic_nsSharedStringPtr( const basic_nsSharedStringPtr& rhs ) + : mRawPtr(rhs.mRawPtr) + { + mRawPtr->AddRef(); + } + + ~basic_nsSharedStringPtr() + { + if ( mRawPtr ) + mRawPtr->Release(); + } + + basic_nsSharedStringPtr& + operator=( const basic_nsSharedStringPtr& ); + + basic_nsSharedString* + operator->() const + { + NS_PRECONDITION(mRawPtr != 0, "You can't dereference a NULL string pointer with operator->()."); + return mRawPtr; + } + + basic_nsSharedString& + operator*() const + { + NS_PRECONDITION(mRawPtr != 0, "You can't dereference a NULL string pointer with operator->()."); + return *mRawPtr; + } private: - basic_nsSharedString* mRawPtr; + const basic_nsSharedString* mRawPtr; }; +template +basic_nsSharedStringPtr& +basic_nsSharedStringPtr::operator=( const basic_nsSharedStringPtr& rhs ) + // Not |inline| + { + if ( rhs.mRawPtr ) + rhs.mRawPtr->AddRef(); + basic_nsSharedString* oldPtr = mRawPtr; + mRawPtr = rhs.mRawPtr; + if ( oldPtr ) + oldPtr->Release(); + } + template basic_nsSharedString* @@ -140,5 +182,8 @@ new_nsSharedString( const basic_nsAReadableString& aReadable ) typedef basic_nsSharedString nsSharedString; typedef basic_nsSharedString nsSharedCString; +typedef basic_nsSharedStringPtr nsSharedStringPtr; +typedef basic_nsSharedStringPtr nsSharedCStringPtr; + #endif // !defined(_nsSharedString_h__)