| Index: skia/sgl/SkWriter32.cpp
|
| ===================================================================
|
| --- skia/sgl/SkWriter32.cpp (revision 16859)
|
| +++ skia/sgl/SkWriter32.cpp (working copy)
|
| @@ -1,170 +0,0 @@
|
| -#include "SkWriter32.h"
|
| -
|
| -struct SkWriter32::Block {
|
| - Block* fNext;
|
| - size_t fSize;
|
| - size_t fAllocated;
|
| -
|
| - size_t available() const { return fSize - fAllocated; }
|
| - char* base() { return (char*)(this + 1); }
|
| - const char* base() const { return (const char*)(this + 1); }
|
| -
|
| - uint32_t* alloc(size_t size)
|
| - {
|
| - SkASSERT(SkAlign4(size) == size);
|
| - SkASSERT(this->available() >= size);
|
| - void* ptr = this->base() + fAllocated;
|
| - fAllocated += size;
|
| - SkASSERT(fAllocated <= fSize);
|
| - return (uint32_t*)ptr;
|
| - }
|
| -
|
| - uint32_t* peek32(size_t offset)
|
| - {
|
| - SkASSERT(offset <= fAllocated + 4);
|
| - void* ptr = this->base() + offset;
|
| - return (uint32_t*)ptr;
|
| - }
|
| -
|
| - static Block* Create(size_t size)
|
| - {
|
| - SkASSERT(SkAlign4(size) == size);
|
| - Block* block = (Block*)sk_malloc_throw(sizeof(Block) + size);
|
| - block->fNext = NULL;
|
| - block->fSize = size;
|
| - block->fAllocated = 0;
|
| - return block;
|
| - }
|
| -};
|
| -
|
| -static size_t compute_block_size(size_t currSize, size_t minSize)
|
| -{
|
| - if (currSize < minSize)
|
| - currSize = minSize;
|
| -
|
| - currSize += (currSize >> 1);
|
| - return SkAlign4(currSize);
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -SkWriter32::~SkWriter32()
|
| -{
|
| - this->reset();
|
| -}
|
| -
|
| -void SkWriter32::reset()
|
| -{
|
| - Block* block = fHead;
|
| - while (block)
|
| - {
|
| - Block* next = block->fNext;
|
| - sk_free(block);
|
| - block = next;
|
| - }
|
| - fHead = fTail = NULL;
|
| - fSize = 0;
|
| -}
|
| -
|
| -uint32_t* SkWriter32::reserve(size_t size)
|
| -{
|
| - SkASSERT(SkAlign4(size) == size);
|
| -
|
| - Block* block = fTail;
|
| -
|
| - if (NULL == block)
|
| - {
|
| - SkASSERT(NULL == fHead);
|
| - fHead = fTail = block = Block::Create(SkMax32(size, fMinSize));
|
| - }
|
| - else if (block->available() < size)
|
| - {
|
| - fTail = Block::Create(SkMax32(size, fMinSize));
|
| - block->fNext = fTail;
|
| - block = fTail;
|
| - }
|
| -
|
| - fSize += size;
|
| -
|
| - return block->alloc(size);
|
| -}
|
| -
|
| -uint32_t* SkWriter32::peek32(size_t offset)
|
| -{
|
| - SkASSERT(SkAlign4(offset) == offset);
|
| - SkASSERT(offset <= fSize);
|
| -
|
| - Block* block = fHead;
|
| - SkASSERT(NULL != block);
|
| -
|
| - while (offset >= block->fAllocated)
|
| - {
|
| - offset -= block->fAllocated;
|
| - block = block->fNext;
|
| - SkASSERT(NULL != block);
|
| - }
|
| - return block->peek32(offset);
|
| -}
|
| -
|
| -void SkWriter32::flatten(void* dst) const
|
| -{
|
| - const Block* block = fHead;
|
| - SkDEBUGCODE(size_t total = 0;)
|
| -
|
| - while (block)
|
| - {
|
| - size_t allocated = block->fAllocated;
|
| - memcpy(dst, block->base(), allocated);
|
| - dst = (char*)dst + allocated;
|
| - block = block->fNext;
|
| -
|
| - SkDEBUGCODE(total += allocated;)
|
| - SkASSERT(total <= fSize);
|
| - }
|
| - SkASSERT(total == fSize);
|
| -}
|
| -
|
| -void SkWriter32::writePad(const void* src, size_t size) {
|
| - size_t alignedSize = SkAlign4(size);
|
| - char* dst = (char*)this->reserve(alignedSize);
|
| - memcpy(dst, src, size);
|
| - dst += size;
|
| - int n = alignedSize - size;
|
| - while (--n >= 0) {
|
| - *dst++ = 0;
|
| - }
|
| -}
|
| -
|
| -#include "SkStream.h"
|
| -
|
| -size_t SkWriter32::readFromStream(SkStream* stream, size_t length) {
|
| - char scratch[1024];
|
| - const size_t MAX = sizeof(scratch);
|
| - size_t remaining = length;
|
| -
|
| - while (remaining != 0) {
|
| - size_t n = remaining;
|
| - if (n > MAX) {
|
| - n = MAX;
|
| - }
|
| - size_t bytes = stream->read(scratch, n);
|
| - this->writePad(scratch, bytes);
|
| - remaining -= bytes;
|
| - if (bytes != n) {
|
| - break;
|
| - }
|
| - }
|
| - return length - remaining;
|
| -}
|
| -
|
| -bool SkWriter32::writeToStream(SkWStream* stream) {
|
| - const Block* block = fHead;
|
| - while (block) {
|
| - if (!stream->write(block->base(), block->fAllocated)) {
|
| - return false;
|
| - }
|
| - block = block->fNext;
|
| - }
|
| - return true;
|
| -}
|
| -
|
|
|