Chromium Code Reviews| Index: src/core/SkStream.cpp |
| diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp |
| index 05867d91bfe53191ce65e15de1dc8d23d49a9c5a..e475aa799c470a290ec4d174f3936d813c9a96c1 100644 |
| --- a/src/core/SkStream.cpp |
| +++ b/src/core/SkStream.cpp |
| @@ -367,18 +367,22 @@ size_t SkMemoryStream::read(void* buffer, size_t size) { |
| return size; |
| } |
| -bool SkMemoryStream::peek(void* buffer, size_t size) const { |
| +size_t SkMemoryStream::peek(void* buffer, size_t size) const { |
| SkASSERT(buffer != nullptr); |
| - const size_t position = fOffset; |
| - if (size > fData->size() - position) { |
| - // The stream is not large enough to satisfy this request. |
| - return false; |
| + |
| + if (this->isAtEnd()) { |
|
bungeman-skia
2015/12/07 16:17:36
This block seems redundant, though maybe an optimi
scroggo
2015/12/07 16:52:02
Removed.
|
| + return 0; |
| } |
| + |
| + SkASSERT(fData->size() > fOffset); |
|
bungeman-skia
2015/12/07 16:17:36
This assert depends on the above block to remove t
scroggo
2015/12/07 16:52:02
Removed.
|
| + const size_t position = fOffset; |
|
bungeman-skia
2015/12/07 16:17:36
It seems this be clearer (or at least more consist
scroggo
2015/12/07 16:52:02
Done.
|
| + size = SkTMin(size, fData->size() - position); |
|
bungeman-skia
2015/12/07 16:17:36
Is there a reason to calculate this? This is what
scroggo
2015/12/07 16:52:02
Done.
|
| + |
| SkMemoryStream* nonConstThis = const_cast<SkMemoryStream*>(this); |
| SkDEBUGCODE(const size_t bytesRead =) nonConstThis->read(buffer, size); |
| SkASSERT(bytesRead == size); |
| nonConstThis->fOffset = position; |
| - return true; |
| + return size; |
| } |
| bool SkMemoryStream::isAtEnd() const { |
| @@ -725,11 +729,17 @@ public: |
| return fOffset == fSize; |
| } |
| - bool peek(void* buff, size_t size) const override { |
| + size_t peek(void* buff, size_t size) const override { |
| SkASSERT(buff != nullptr); |
| - if (fOffset + size > fSize) { |
| - return false; |
| + |
| + if (this->isAtEnd()) { |
|
bungeman-skia
2015/12/07 16:17:36
As above, this appears to be unneeded.
scroggo
2015/12/07 16:52:02
Removed
|
| + return 0; |
| } |
| + |
| + SkASSERT(fSize > fOffset); |
|
bungeman-skia
2015/12/07 16:17:36
And 'SkASSERT(fSize >= fOffset);' should be a gene
scroggo
2015/12/07 16:52:02
Removed
|
| + size = SkTMin(size, fSize - fOffset); |
| + |
| + const size_t totalBytesToPeek = size; |
|
bungeman-skia
2015/12/07 16:17:36
Since we have to maintain size now to return it, I
scroggo
2015/12/07 16:52:02
Changed. I think I did as you requested; let me kn
|
| char* buffer = static_cast<char*>(buff); |
| const SkDynamicMemoryWStream::Block* current = fCurrent; |
| size_t currentOffset = fCurrentOffset; |
| @@ -743,7 +753,7 @@ public: |
| current = current->fNext; |
| currentOffset = 0; |
| } |
| - return true; |
| + return totalBytesToPeek; |
| } |
| bool rewind() override { |