mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 803669 - convert nsScannerBufferList to use mozilla::LinkedList; r=mrbkap
This commit is contained in:
parent
a0ff9d546b
commit
3146349ea1
@ -9,7 +9,7 @@
|
||||
|
||||
#include "nsString.h"
|
||||
#include "nsUnicharUtils.h" // for nsCaseInsensitiveStringComparator
|
||||
#include "prclist.h"
|
||||
#include "mozilla/LinkedList.h"
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
@ -61,7 +61,7 @@ class nsScannerBufferList
|
||||
* of the data segment is determined by increment the |this| pointer
|
||||
* by 1 unit.
|
||||
*/
|
||||
class Buffer : public PRCList
|
||||
class Buffer : public mozilla::LinkedListElement<Buffer>
|
||||
{
|
||||
public:
|
||||
|
||||
@ -76,11 +76,11 @@ class nsScannerBufferList
|
||||
const PRUnichar* DataEnd() const { return mDataEnd; }
|
||||
PRUnichar* DataEnd() { return mDataEnd; }
|
||||
|
||||
const Buffer* Next() const { return static_cast<const Buffer*>(next); }
|
||||
Buffer* Next() { return static_cast<Buffer*>(next); }
|
||||
const Buffer* Next() const { return getNext(); }
|
||||
Buffer* Next() { return getNext(); }
|
||||
|
||||
const Buffer* Prev() const { return static_cast<const Buffer*>(prev); }
|
||||
Buffer* Prev() { return static_cast<Buffer*>(prev); }
|
||||
const Buffer* Prev() const { return getPrevious(); }
|
||||
Buffer* Prev() { return getPrevious(); }
|
||||
|
||||
uint32_t DataLength() const { return mDataEnd - DataStart(); }
|
||||
void SetDataLength(uint32_t len) { mDataEnd = DataStart() + len; }
|
||||
@ -127,23 +127,22 @@ class nsScannerBufferList
|
||||
nsScannerBufferList( Buffer* buf )
|
||||
: mRefCnt(0)
|
||||
{
|
||||
PR_INIT_CLIST(&mBuffers);
|
||||
PR_APPEND_LINK(buf, &mBuffers);
|
||||
mBuffers.insertBack(buf);
|
||||
}
|
||||
|
||||
void AddRef() { ++mRefCnt; }
|
||||
void Release() { if (--mRefCnt == 0) delete this; }
|
||||
|
||||
void Append( Buffer* buf ) { PR_APPEND_LINK(buf, &mBuffers); }
|
||||
void InsertAfter( Buffer* buf, Buffer* prev ) { PR_INSERT_AFTER(buf, prev); }
|
||||
void Append( Buffer* buf ) { mBuffers.insertBack(buf); }
|
||||
void InsertAfter( Buffer* buf, Buffer* prev ) { prev->setNext(buf); }
|
||||
void SplitBuffer( const Position& );
|
||||
void DiscardUnreferencedPrefix( Buffer* );
|
||||
|
||||
Buffer* Head() { return static_cast<Buffer*>(PR_LIST_HEAD(&mBuffers)); }
|
||||
const Buffer* Head() const { return static_cast<const Buffer*>(PR_LIST_HEAD(&mBuffers)); }
|
||||
Buffer* Head() { return mBuffers.getFirst(); }
|
||||
const Buffer* Head() const { return mBuffers.getFirst(); }
|
||||
|
||||
Buffer* Tail() { return static_cast<Buffer*>(PR_LIST_TAIL(&mBuffers)); }
|
||||
const Buffer* Tail() const { return static_cast<const Buffer*>(PR_LIST_TAIL(&mBuffers)); }
|
||||
Buffer* Tail() { return mBuffers.getLast(); }
|
||||
const Buffer* Tail() const { return mBuffers.getLast(); }
|
||||
|
||||
private:
|
||||
|
||||
@ -153,7 +152,7 @@ class nsScannerBufferList
|
||||
void ReleaseAll();
|
||||
|
||||
int32_t mRefCnt;
|
||||
PRCList mBuffers;
|
||||
mozilla::LinkedList<Buffer> mBuffers;
|
||||
};
|
||||
|
||||
|
||||
|
@ -19,25 +19,13 @@ nsScannerBufferList::Buffer*
|
||||
nsScannerBufferList::AllocBufferFromString( const nsAString& aString )
|
||||
{
|
||||
uint32_t len = aString.Length();
|
||||
Buffer* buf = AllocBuffer(len);
|
||||
|
||||
if (len > MAX_CAPACITY)
|
||||
return nullptr;
|
||||
|
||||
Buffer* buf = (Buffer*) malloc(sizeof(Buffer) + (len + 1) * sizeof(PRUnichar));
|
||||
if (buf)
|
||||
{
|
||||
// leave PRCList members of Buffer uninitialized
|
||||
|
||||
buf->mUsageCount = 0;
|
||||
buf->mDataEnd = buf->DataStart() + len;
|
||||
|
||||
nsAString::const_iterator source;
|
||||
aString.BeginReading(source);
|
||||
nsCharTraits<PRUnichar>::copy(buf->DataStart(), source.get(), len);
|
||||
|
||||
// XXX null terminate. this shouldn't be required, but we do it because
|
||||
// nsScanner erroneously thinks it can dereference DataEnd :-(
|
||||
*buf->mDataEnd = PRUnichar(0);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
@ -48,30 +36,29 @@ nsScannerBufferList::AllocBuffer( uint32_t capacity )
|
||||
if (capacity > MAX_CAPACITY)
|
||||
return nullptr;
|
||||
|
||||
Buffer* buf = (Buffer*) malloc(sizeof(Buffer) + (capacity + 1) * sizeof(PRUnichar));
|
||||
if (buf)
|
||||
{
|
||||
// leave PRCList members of Buffer uninitialized
|
||||
void* ptr = malloc(sizeof(Buffer) + (capacity + 1) * sizeof(PRUnichar));
|
||||
if (!ptr)
|
||||
return nullptr;
|
||||
|
||||
buf->mUsageCount = 0;
|
||||
buf->mDataEnd = buf->DataStart() + capacity;
|
||||
Buffer* buf = new (ptr) Buffer();
|
||||
|
||||
// XXX null terminate. this shouldn't be required, but we do it because
|
||||
// nsScanner erroneously thinks it can dereference DataEnd :-(
|
||||
*buf->mDataEnd = PRUnichar(0);
|
||||
}
|
||||
buf->mUsageCount = 0;
|
||||
buf->mDataEnd = buf->DataStart() + capacity;
|
||||
|
||||
// XXX null terminate. this shouldn't be required, but we do it because
|
||||
// nsScanner erroneously thinks it can dereference DataEnd :-(
|
||||
*buf->mDataEnd = PRUnichar(0);
|
||||
return buf;
|
||||
}
|
||||
|
||||
void
|
||||
nsScannerBufferList::ReleaseAll()
|
||||
{
|
||||
while (!PR_CLIST_IS_EMPTY(&mBuffers))
|
||||
while (!mBuffers.isEmpty())
|
||||
{
|
||||
PRCList* node = PR_LIST_HEAD(&mBuffers);
|
||||
PR_REMOVE_LINK(node);
|
||||
Buffer* node = mBuffers.popFirst();
|
||||
//printf(">>> freeing buffer @%p\n", node);
|
||||
free(static_cast<Buffer*>(node));
|
||||
free(node);
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,10 +93,10 @@ nsScannerBufferList::DiscardUnreferencedPrefix( Buffer* aBuf )
|
||||
{
|
||||
if (aBuf == Head())
|
||||
{
|
||||
while (!PR_CLIST_IS_EMPTY(&mBuffers) && !Head()->IsInUse())
|
||||
while (!mBuffers.isEmpty() && !Head()->IsInUse())
|
||||
{
|
||||
Buffer* buffer = Head();
|
||||
PR_REMOVE_LINK(buffer);
|
||||
buffer->remove();
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
@ -276,7 +263,7 @@ nsScannerSubstring::GetNextFragment( nsScannerFragment& frag ) const
|
||||
if (frag.mBuffer == mEnd.mBuffer)
|
||||
return false;
|
||||
|
||||
frag.mBuffer = static_cast<const Buffer*>(PR_NEXT_LINK(frag.mBuffer));
|
||||
frag.mBuffer = frag.mBuffer->getNext();
|
||||
|
||||
if (frag.mBuffer == mStart.mBuffer)
|
||||
frag.mFragmentStart = mStart.mPosition;
|
||||
@ -298,7 +285,7 @@ nsScannerSubstring::GetPrevFragment( nsScannerFragment& frag ) const
|
||||
if (frag.mBuffer == mStart.mBuffer)
|
||||
return false;
|
||||
|
||||
frag.mBuffer = static_cast<const Buffer*>(PR_PREV_LINK(frag.mBuffer));
|
||||
frag.mBuffer = frag.mBuffer->getPrevious();
|
||||
|
||||
if (frag.mBuffer == mStart.mBuffer)
|
||||
frag.mFragmentStart = mStart.mPosition;
|
||||
|
Loading…
Reference in New Issue
Block a user