зеркало из https://github.com/mozilla/gecko-dev.git
bug #48464. explicitly picking my own or the auto-generated function, in particular |operator=|. r={vidur, waterson}, a=vidur
This commit is contained in:
Родитель
65e76de777
Коммит
5082251b3e
|
@ -115,8 +115,8 @@ class nsReadingIterator
|
|||
}
|
||||
|
||||
public:
|
||||
// nsReadingIterator( const nsReadingIterator<CharT>& ); ...use default copy-constructor
|
||||
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); ...use default copy-assignment operator
|
||||
// nsReadingIterator( const nsReadingIterator<CharT>& ); // auto-generated copy-constructor OK
|
||||
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); // auto-generated copy-assignment operator OK
|
||||
|
||||
inline void normalize_forward();
|
||||
inline void normalize_backward();
|
||||
|
@ -259,7 +259,13 @@ class basic_nsAReadableString
|
|||
typedef nsReadingIterator<CharT> const_iterator;
|
||||
|
||||
|
||||
// basic_nsAReadableString(); // auto-generated default constructor OK (we're abstract anyway)
|
||||
// basic_nsAReadableString( const basic_nsAReadableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsAReadableString<CharT>& ); // but assignment is _not_ OK (we're immutable) so make it impossible
|
||||
|
||||
public:
|
||||
virtual ~basic_nsAReadableString() { }
|
||||
// ...yes, I expect to be sub-classed.
|
||||
|
||||
|
@ -685,6 +691,15 @@ class basic_nsLiteralString
|
|||
}
|
||||
}
|
||||
|
||||
// basic_nsLiteralString( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
|
||||
// ~basic_nsLiteralString(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsLiteralString<CharT>& ); // we're immutable
|
||||
|
||||
public:
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
|
||||
operator const CharT*() const
|
||||
|
@ -785,6 +800,15 @@ class basic_nsLiteralChar
|
|||
// nothing else to do here
|
||||
}
|
||||
|
||||
// basic_nsLiteralChar( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
|
||||
// ~basic_nsLiteralChar(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsLiteralChar<CharT>& ); // we're immutable
|
||||
|
||||
public:
|
||||
|
||||
virtual
|
||||
PRUint32
|
||||
Length() const
|
||||
|
@ -889,6 +913,15 @@ class nsPromiseConcatenation
|
|||
mStrings[kRightString] = &aRightString;
|
||||
}
|
||||
|
||||
// nsPromiseConcatenation( const nsPromiseConcatenation<CharT>& ); // auto-generated copy-constructor should be OK
|
||||
// ~nsPromiseConcatenation(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const nsPromiseConcatenation<CharT>& ); // we're immutable, you can't assign into a concatenation
|
||||
|
||||
public:
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
|
||||
// virtual PRBool PromisesExactly( const basic_nsAReadableString<CharT>& ) const;
|
||||
|
@ -1035,6 +1068,14 @@ class nsPromiseSubstring
|
|||
// nothing else to do here
|
||||
}
|
||||
|
||||
// nsPromiseSubstring( const nsPromiseSubstring<CharT>& ); // auto-generated copy-constructor should be OK
|
||||
// ~nsPromiseSubstring(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const nsPromiseSubstring<CharT>& ); // we're immutable, you can't assign into a substring
|
||||
|
||||
public:
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }
|
||||
|
||||
|
|
|
@ -77,8 +77,8 @@ class nsWritingIterator
|
|||
}
|
||||
|
||||
public:
|
||||
// nsWritingIterator( const nsWritingIterator<CharT>& ); ...use default copy-constructor
|
||||
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); ...use default copy-assignment operator
|
||||
// nsWritingIterator( const nsWritingIterator<CharT>& ); // auto-generated copy-constructor OK
|
||||
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); // auto-generated copy-assignment operator OK
|
||||
|
||||
inline void normalize_forward();
|
||||
inline void normalize_backward();
|
||||
|
@ -224,11 +224,17 @@ class basic_nsAWritableString
|
|||
// friend class nsWritingIterator<CharT>;
|
||||
|
||||
public:
|
||||
typedef CharT char_type;
|
||||
typedef PRUint32 size_type;
|
||||
typedef PRUint32 index_type;
|
||||
|
||||
typedef nsWritingIterator<CharT> iterator;
|
||||
|
||||
// basic_nsAWritableString(); // auto-generated default constructor OK (we're abstract anyway)
|
||||
// basic_nsAWritableString( const basic_nsAWritableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
|
||||
// ~basic_nsAWritableString(); // auto-generated destructor OK
|
||||
// see below for copy-assignment operator
|
||||
|
||||
virtual CharT* GetWritableFragment( nsWritableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) = 0;
|
||||
|
||||
|
||||
|
@ -311,6 +317,9 @@ class basic_nsAWritableString
|
|||
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
|
||||
void Assign( CharT aChar ) { do_AssignFromElement(aChar); }
|
||||
|
||||
// copy-assignment operator. I must define my own if I don't want the compiler to make me one
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAWritableString<CharT>& aWritable ) { Assign(aWritable); return *this; }
|
||||
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { Assign(aPtr); return *this; }
|
||||
|
|
|
@ -37,11 +37,23 @@ class basic_nsSharedString
|
|||
...
|
||||
*/
|
||||
{
|
||||
private:
|
||||
~basic_nsSharedString() { }
|
||||
// You can't sub-class me, or make an instance of me on the stack
|
||||
public:
|
||||
basic_nsSharedString( const CharT* data, size_t length )
|
||||
: mRefCount(0), mData(data), mLength(length)
|
||||
{
|
||||
// nothing else to do here
|
||||
}
|
||||
|
||||
// operator delete
|
||||
private:
|
||||
~basic_nsSharedString() { } // You can't sub-class me, or make an instance of me on the stack
|
||||
|
||||
// NOT TO BE IMPLEMENTED
|
||||
// we're reference counted, remember. copying and passing by value are wrong
|
||||
// basic_nsSharedString(); // we define at least one constructor, so the default constructor will not be auto-generated. It's wrong to create me with no data anyway
|
||||
basic_nsSharedString( const basic_nsSharedString<CharT>& ); // copy-constructor, the auto generated one would reference somebody elses data
|
||||
void operator=( const basic_nsSharedString<CharT>& ); // copy-assignment operator
|
||||
|
||||
// operator delete?
|
||||
|
||||
public:
|
||||
|
||||
|
@ -54,12 +66,6 @@ class basic_nsSharedString
|
|||
return mLength;
|
||||
}
|
||||
|
||||
basic_nsSharedString( const CharT* data, size_t length )
|
||||
: mRefCount(0), mData(data), mLength(length)
|
||||
{
|
||||
// nothing else to do here
|
||||
}
|
||||
|
||||
nsrefcnt
|
||||
AddRef() const
|
||||
{
|
||||
|
@ -72,8 +78,8 @@ class basic_nsSharedString
|
|||
nsrefcnt result = --mRefCount;
|
||||
if ( !mRefCount )
|
||||
{
|
||||
delete this;
|
||||
// BULLSHIT ALERT: need to make |delete| match |new|
|
||||
// would have to call my destructor by hand here, if there was anything to destruct
|
||||
operator delete(this); // form of |delete| should always match the |new|
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -111,8 +117,10 @@ template <class CharT>
|
|||
class basic_nsSharedStringPtr
|
||||
{
|
||||
public:
|
||||
// default constructor
|
||||
basic_nsSharedStringPtr() : mRawPtr(0) { }
|
||||
|
||||
// copy-constructor
|
||||
basic_nsSharedStringPtr( const basic_nsSharedStringPtr<CharT>& rhs )
|
||||
: mRawPtr(rhs.mRawPtr)
|
||||
{
|
||||
|
@ -125,6 +133,7 @@ class basic_nsSharedStringPtr
|
|||
mRawPtr->Release();
|
||||
}
|
||||
|
||||
// copy-assignment operator
|
||||
basic_nsSharedStringPtr<CharT>&
|
||||
operator=( const basic_nsSharedStringPtr<CharT>& );
|
||||
|
||||
|
|
|
@ -115,8 +115,8 @@ class nsReadingIterator
|
|||
}
|
||||
|
||||
public:
|
||||
// nsReadingIterator( const nsReadingIterator<CharT>& ); ...use default copy-constructor
|
||||
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); ...use default copy-assignment operator
|
||||
// nsReadingIterator( const nsReadingIterator<CharT>& ); // auto-generated copy-constructor OK
|
||||
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); // auto-generated copy-assignment operator OK
|
||||
|
||||
inline void normalize_forward();
|
||||
inline void normalize_backward();
|
||||
|
@ -259,7 +259,13 @@ class basic_nsAReadableString
|
|||
typedef nsReadingIterator<CharT> const_iterator;
|
||||
|
||||
|
||||
// basic_nsAReadableString(); // auto-generated default constructor OK (we're abstract anyway)
|
||||
// basic_nsAReadableString( const basic_nsAReadableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsAReadableString<CharT>& ); // but assignment is _not_ OK (we're immutable) so make it impossible
|
||||
|
||||
public:
|
||||
virtual ~basic_nsAReadableString() { }
|
||||
// ...yes, I expect to be sub-classed.
|
||||
|
||||
|
@ -685,6 +691,15 @@ class basic_nsLiteralString
|
|||
}
|
||||
}
|
||||
|
||||
// basic_nsLiteralString( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
|
||||
// ~basic_nsLiteralString(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsLiteralString<CharT>& ); // we're immutable
|
||||
|
||||
public:
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
|
||||
operator const CharT*() const
|
||||
|
@ -785,6 +800,15 @@ class basic_nsLiteralChar
|
|||
// nothing else to do here
|
||||
}
|
||||
|
||||
// basic_nsLiteralChar( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
|
||||
// ~basic_nsLiteralChar(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsLiteralChar<CharT>& ); // we're immutable
|
||||
|
||||
public:
|
||||
|
||||
virtual
|
||||
PRUint32
|
||||
Length() const
|
||||
|
@ -889,6 +913,15 @@ class nsPromiseConcatenation
|
|||
mStrings[kRightString] = &aRightString;
|
||||
}
|
||||
|
||||
// nsPromiseConcatenation( const nsPromiseConcatenation<CharT>& ); // auto-generated copy-constructor should be OK
|
||||
// ~nsPromiseConcatenation(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const nsPromiseConcatenation<CharT>& ); // we're immutable, you can't assign into a concatenation
|
||||
|
||||
public:
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
|
||||
// virtual PRBool PromisesExactly( const basic_nsAReadableString<CharT>& ) const;
|
||||
|
@ -1035,6 +1068,14 @@ class nsPromiseSubstring
|
|||
// nothing else to do here
|
||||
}
|
||||
|
||||
// nsPromiseSubstring( const nsPromiseSubstring<CharT>& ); // auto-generated copy-constructor should be OK
|
||||
// ~nsPromiseSubstring(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const nsPromiseSubstring<CharT>& ); // we're immutable, you can't assign into a substring
|
||||
|
||||
public:
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }
|
||||
|
||||
|
|
|
@ -77,8 +77,8 @@ class nsWritingIterator
|
|||
}
|
||||
|
||||
public:
|
||||
// nsWritingIterator( const nsWritingIterator<CharT>& ); ...use default copy-constructor
|
||||
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); ...use default copy-assignment operator
|
||||
// nsWritingIterator( const nsWritingIterator<CharT>& ); // auto-generated copy-constructor OK
|
||||
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); // auto-generated copy-assignment operator OK
|
||||
|
||||
inline void normalize_forward();
|
||||
inline void normalize_backward();
|
||||
|
@ -224,11 +224,17 @@ class basic_nsAWritableString
|
|||
// friend class nsWritingIterator<CharT>;
|
||||
|
||||
public:
|
||||
typedef CharT char_type;
|
||||
typedef PRUint32 size_type;
|
||||
typedef PRUint32 index_type;
|
||||
|
||||
typedef nsWritingIterator<CharT> iterator;
|
||||
|
||||
// basic_nsAWritableString(); // auto-generated default constructor OK (we're abstract anyway)
|
||||
// basic_nsAWritableString( const basic_nsAWritableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
|
||||
// ~basic_nsAWritableString(); // auto-generated destructor OK
|
||||
// see below for copy-assignment operator
|
||||
|
||||
virtual CharT* GetWritableFragment( nsWritableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) = 0;
|
||||
|
||||
|
||||
|
@ -311,6 +317,9 @@ class basic_nsAWritableString
|
|||
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
|
||||
void Assign( CharT aChar ) { do_AssignFromElement(aChar); }
|
||||
|
||||
// copy-assignment operator. I must define my own if I don't want the compiler to make me one
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAWritableString<CharT>& aWritable ) { Assign(aWritable); return *this; }
|
||||
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { Assign(aPtr); return *this; }
|
||||
|
|
|
@ -37,11 +37,23 @@ class basic_nsSharedString
|
|||
...
|
||||
*/
|
||||
{
|
||||
private:
|
||||
~basic_nsSharedString() { }
|
||||
// You can't sub-class me, or make an instance of me on the stack
|
||||
public:
|
||||
basic_nsSharedString( const CharT* data, size_t length )
|
||||
: mRefCount(0), mData(data), mLength(length)
|
||||
{
|
||||
// nothing else to do here
|
||||
}
|
||||
|
||||
// operator delete
|
||||
private:
|
||||
~basic_nsSharedString() { } // You can't sub-class me, or make an instance of me on the stack
|
||||
|
||||
// NOT TO BE IMPLEMENTED
|
||||
// we're reference counted, remember. copying and passing by value are wrong
|
||||
// basic_nsSharedString(); // we define at least one constructor, so the default constructor will not be auto-generated. It's wrong to create me with no data anyway
|
||||
basic_nsSharedString( const basic_nsSharedString<CharT>& ); // copy-constructor, the auto generated one would reference somebody elses data
|
||||
void operator=( const basic_nsSharedString<CharT>& ); // copy-assignment operator
|
||||
|
||||
// operator delete?
|
||||
|
||||
public:
|
||||
|
||||
|
@ -54,12 +66,6 @@ class basic_nsSharedString
|
|||
return mLength;
|
||||
}
|
||||
|
||||
basic_nsSharedString( const CharT* data, size_t length )
|
||||
: mRefCount(0), mData(data), mLength(length)
|
||||
{
|
||||
// nothing else to do here
|
||||
}
|
||||
|
||||
nsrefcnt
|
||||
AddRef() const
|
||||
{
|
||||
|
@ -72,8 +78,8 @@ class basic_nsSharedString
|
|||
nsrefcnt result = --mRefCount;
|
||||
if ( !mRefCount )
|
||||
{
|
||||
delete this;
|
||||
// BULLSHIT ALERT: need to make |delete| match |new|
|
||||
// would have to call my destructor by hand here, if there was anything to destruct
|
||||
operator delete(this); // form of |delete| should always match the |new|
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -111,8 +117,10 @@ template <class CharT>
|
|||
class basic_nsSharedStringPtr
|
||||
{
|
||||
public:
|
||||
// default constructor
|
||||
basic_nsSharedStringPtr() : mRawPtr(0) { }
|
||||
|
||||
// copy-constructor
|
||||
basic_nsSharedStringPtr( const basic_nsSharedStringPtr<CharT>& rhs )
|
||||
: mRawPtr(rhs.mRawPtr)
|
||||
{
|
||||
|
@ -125,6 +133,7 @@ class basic_nsSharedStringPtr
|
|||
mRawPtr->Release();
|
||||
}
|
||||
|
||||
// copy-assignment operator
|
||||
basic_nsSharedStringPtr<CharT>&
|
||||
operator=( const basic_nsSharedStringPtr<CharT>& );
|
||||
|
||||
|
|
|
@ -115,8 +115,8 @@ class nsReadingIterator
|
|||
}
|
||||
|
||||
public:
|
||||
// nsReadingIterator( const nsReadingIterator<CharT>& ); ...use default copy-constructor
|
||||
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); ...use default copy-assignment operator
|
||||
// nsReadingIterator( const nsReadingIterator<CharT>& ); // auto-generated copy-constructor OK
|
||||
// nsReadingIterator<CharT>& operator=( const nsReadingIterator<CharT>& ); // auto-generated copy-assignment operator OK
|
||||
|
||||
inline void normalize_forward();
|
||||
inline void normalize_backward();
|
||||
|
@ -259,7 +259,13 @@ class basic_nsAReadableString
|
|||
typedef nsReadingIterator<CharT> const_iterator;
|
||||
|
||||
|
||||
// basic_nsAReadableString(); // auto-generated default constructor OK (we're abstract anyway)
|
||||
// basic_nsAReadableString( const basic_nsAReadableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsAReadableString<CharT>& ); // but assignment is _not_ OK (we're immutable) so make it impossible
|
||||
|
||||
public:
|
||||
virtual ~basic_nsAReadableString() { }
|
||||
// ...yes, I expect to be sub-classed.
|
||||
|
||||
|
@ -685,6 +691,15 @@ class basic_nsLiteralString
|
|||
}
|
||||
}
|
||||
|
||||
// basic_nsLiteralString( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
|
||||
// ~basic_nsLiteralString(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsLiteralString<CharT>& ); // we're immutable
|
||||
|
||||
public:
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
|
||||
operator const CharT*() const
|
||||
|
@ -785,6 +800,15 @@ class basic_nsLiteralChar
|
|||
// nothing else to do here
|
||||
}
|
||||
|
||||
// basic_nsLiteralChar( const basic_nsLiteralString<CharT>& ); // auto-generated copy-constructor OK
|
||||
// ~basic_nsLiteralChar(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const basic_nsLiteralChar<CharT>& ); // we're immutable
|
||||
|
||||
public:
|
||||
|
||||
virtual
|
||||
PRUint32
|
||||
Length() const
|
||||
|
@ -889,6 +913,15 @@ class nsPromiseConcatenation
|
|||
mStrings[kRightString] = &aRightString;
|
||||
}
|
||||
|
||||
// nsPromiseConcatenation( const nsPromiseConcatenation<CharT>& ); // auto-generated copy-constructor should be OK
|
||||
// ~nsPromiseConcatenation(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const nsPromiseConcatenation<CharT>& ); // we're immutable, you can't assign into a concatenation
|
||||
|
||||
public:
|
||||
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& ) const;
|
||||
// virtual PRBool PromisesExactly( const basic_nsAReadableString<CharT>& ) const;
|
||||
|
@ -1035,6 +1068,14 @@ class nsPromiseSubstring
|
|||
// nothing else to do here
|
||||
}
|
||||
|
||||
// nsPromiseSubstring( const nsPromiseSubstring<CharT>& ); // auto-generated copy-constructor should be OK
|
||||
// ~nsPromiseSubstring(); // auto-generated destructor OK
|
||||
|
||||
private:
|
||||
// NOT TO BE IMPLEMENTED
|
||||
void operator=( const nsPromiseSubstring<CharT>& ); // we're immutable, you can't assign into a substring
|
||||
|
||||
public:
|
||||
virtual PRUint32 Length() const;
|
||||
virtual PRBool Promises( const basic_nsAReadableString<CharT>& aString ) const { return mString.Promises(aString); }
|
||||
|
||||
|
|
|
@ -77,8 +77,8 @@ class nsWritingIterator
|
|||
}
|
||||
|
||||
public:
|
||||
// nsWritingIterator( const nsWritingIterator<CharT>& ); ...use default copy-constructor
|
||||
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); ...use default copy-assignment operator
|
||||
// nsWritingIterator( const nsWritingIterator<CharT>& ); // auto-generated copy-constructor OK
|
||||
// nsWritingIterator<CharT>& operator=( const nsWritingIterator<CharT>& ); // auto-generated copy-assignment operator OK
|
||||
|
||||
inline void normalize_forward();
|
||||
inline void normalize_backward();
|
||||
|
@ -224,11 +224,17 @@ class basic_nsAWritableString
|
|||
// friend class nsWritingIterator<CharT>;
|
||||
|
||||
public:
|
||||
typedef CharT char_type;
|
||||
typedef PRUint32 size_type;
|
||||
typedef PRUint32 index_type;
|
||||
|
||||
typedef nsWritingIterator<CharT> iterator;
|
||||
|
||||
// basic_nsAWritableString(); // auto-generated default constructor OK (we're abstract anyway)
|
||||
// basic_nsAWritableString( const basic_nsAWritableString<CharT>& ); // auto-generated copy-constructor OK (again, only because we're abstract)
|
||||
// ~basic_nsAWritableString(); // auto-generated destructor OK
|
||||
// see below for copy-assignment operator
|
||||
|
||||
virtual CharT* GetWritableFragment( nsWritableFragment<CharT>&, nsFragmentRequest, PRUint32 = 0 ) = 0;
|
||||
|
||||
|
||||
|
@ -311,6 +317,9 @@ class basic_nsAWritableString
|
|||
void Assign( const CharT* aPtr, PRUint32 aLength ) { do_AssignFromElementPtrLength(aPtr, aLength); }
|
||||
void Assign( CharT aChar ) { do_AssignFromElement(aChar); }
|
||||
|
||||
// copy-assignment operator. I must define my own if I don't want the compiler to make me one
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAWritableString<CharT>& aWritable ) { Assign(aWritable); return *this; }
|
||||
|
||||
basic_nsAWritableString<CharT>& operator=( const basic_nsAReadableString<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const nsPromiseReadable<CharT>& aReadable ) { Assign(aReadable); return *this; }
|
||||
basic_nsAWritableString<CharT>& operator=( const CharT* aPtr ) { Assign(aPtr); return *this; }
|
||||
|
|
|
@ -37,11 +37,23 @@ class basic_nsSharedString
|
|||
...
|
||||
*/
|
||||
{
|
||||
private:
|
||||
~basic_nsSharedString() { }
|
||||
// You can't sub-class me, or make an instance of me on the stack
|
||||
public:
|
||||
basic_nsSharedString( const CharT* data, size_t length )
|
||||
: mRefCount(0), mData(data), mLength(length)
|
||||
{
|
||||
// nothing else to do here
|
||||
}
|
||||
|
||||
// operator delete
|
||||
private:
|
||||
~basic_nsSharedString() { } // You can't sub-class me, or make an instance of me on the stack
|
||||
|
||||
// NOT TO BE IMPLEMENTED
|
||||
// we're reference counted, remember. copying and passing by value are wrong
|
||||
// basic_nsSharedString(); // we define at least one constructor, so the default constructor will not be auto-generated. It's wrong to create me with no data anyway
|
||||
basic_nsSharedString( const basic_nsSharedString<CharT>& ); // copy-constructor, the auto generated one would reference somebody elses data
|
||||
void operator=( const basic_nsSharedString<CharT>& ); // copy-assignment operator
|
||||
|
||||
// operator delete?
|
||||
|
||||
public:
|
||||
|
||||
|
@ -54,12 +66,6 @@ class basic_nsSharedString
|
|||
return mLength;
|
||||
}
|
||||
|
||||
basic_nsSharedString( const CharT* data, size_t length )
|
||||
: mRefCount(0), mData(data), mLength(length)
|
||||
{
|
||||
// nothing else to do here
|
||||
}
|
||||
|
||||
nsrefcnt
|
||||
AddRef() const
|
||||
{
|
||||
|
@ -72,8 +78,8 @@ class basic_nsSharedString
|
|||
nsrefcnt result = --mRefCount;
|
||||
if ( !mRefCount )
|
||||
{
|
||||
delete this;
|
||||
// BULLSHIT ALERT: need to make |delete| match |new|
|
||||
// would have to call my destructor by hand here, if there was anything to destruct
|
||||
operator delete(this); // form of |delete| should always match the |new|
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -111,8 +117,10 @@ template <class CharT>
|
|||
class basic_nsSharedStringPtr
|
||||
{
|
||||
public:
|
||||
// default constructor
|
||||
basic_nsSharedStringPtr() : mRawPtr(0) { }
|
||||
|
||||
// copy-constructor
|
||||
basic_nsSharedStringPtr( const basic_nsSharedStringPtr<CharT>& rhs )
|
||||
: mRawPtr(rhs.mRawPtr)
|
||||
{
|
||||
|
@ -125,6 +133,7 @@ class basic_nsSharedStringPtr
|
|||
mRawPtr->Release();
|
||||
}
|
||||
|
||||
// copy-assignment operator
|
||||
basic_nsSharedStringPtr<CharT>&
|
||||
operator=( const basic_nsSharedStringPtr<CharT>& );
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче