diff options
Diffstat (limited to 'src/core/SkOrderedReadBuffer.cpp')
-rw-r--r-- | src/core/SkOrderedReadBuffer.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/src/core/SkOrderedReadBuffer.cpp b/src/core/SkOrderedReadBuffer.cpp index a502c5d99a..5835c34aef 100644 --- a/src/core/SkOrderedReadBuffer.cpp +++ b/src/core/SkOrderedReadBuffer.cpp @@ -10,14 +10,23 @@ #include "SkStream.h" #include "SkTypeface.h" +SkOrderedReadBuffer::SkOrderedReadBuffer() : INHERITED() { + fMemoryPtr = NULL; + + fBitmapStorage = NULL; + fTFArray = NULL; + fTFCount = 0; -SkOrderedReadBuffer::SkOrderedReadBuffer(const void* data, size_t size) { + fFactoryTDArray = NULL; + fFactoryArray = NULL; + fFactoryCount = 0; +} + +SkOrderedReadBuffer::SkOrderedReadBuffer(const void* data, size_t size) : INHERITED() { fReader.setMemory(data, size); fMemoryPtr = NULL; - fRCArray = NULL; - fRCCount = 0; - + fBitmapStorage = NULL; fTFArray = NULL; fTFCount = 0; @@ -31,10 +40,19 @@ SkOrderedReadBuffer::SkOrderedReadBuffer(SkStream* stream) { fMemoryPtr = sk_malloc_throw(length); stream->read(fMemoryPtr, length); fReader.setMemory(fMemoryPtr, length); + + fBitmapStorage = NULL; + fTFArray = NULL; + fTFCount = 0; + + fFactoryTDArray = NULL; + fFactoryArray = NULL; + fFactoryCount = 0; } SkOrderedReadBuffer::~SkOrderedReadBuffer() { sk_free(fMemoryPtr); + SkSafeUnref(fBitmapStorage); } bool SkOrderedReadBuffer::readBool() { @@ -145,20 +163,16 @@ uint32_t SkOrderedReadBuffer::getArrayCount() { return *(uint32_t*)fReader.peek(); } -SkRefCnt* SkOrderedReadBuffer::readRefCntPtr() { - if (fRCArray) { +void SkOrderedReadBuffer::readBitmap(SkBitmap* bitmap) { + if (fBitmapStorage) { const uint32_t index = fReader.readU32(); - SkASSERT(index <= (unsigned)fRCCount); - return fRCArray[index - 1]; + *bitmap = *fBitmapStorage->getBitmap(index); + fBitmapStorage->releaseRef(index); } else { - return INHERITED::readRefCntPtr(); + bitmap->unflatten(*this); } } -void SkOrderedReadBuffer::readBitmap(SkBitmap* bitmap) { - bitmap->unflatten(*this); -} - SkTypeface* SkOrderedReadBuffer::readTypeface() { uint32_t index = fReader.readU32(); |