OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkStream.h" | 10 #include "SkStream.h" |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
360 if (size > dataSize - fOffset) { | 360 if (size > dataSize - fOffset) { |
361 size = dataSize - fOffset; | 361 size = dataSize - fOffset; |
362 } | 362 } |
363 if (buffer) { | 363 if (buffer) { |
364 memcpy(buffer, fData->bytes() + fOffset, size); | 364 memcpy(buffer, fData->bytes() + fOffset, size); |
365 } | 365 } |
366 fOffset += size; | 366 fOffset += size; |
367 return size; | 367 return size; |
368 } | 368 } |
369 | 369 |
370 bool SkMemoryStream::peek(void* buffer, size_t size) const { | 370 size_t SkMemoryStream::peek(void* buffer, size_t size) const { |
371 SkASSERT(buffer != nullptr); | 371 SkASSERT(buffer != nullptr); |
372 | |
373 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.
| |
374 return 0; | |
375 } | |
376 | |
377 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.
| |
372 const size_t position = fOffset; | 378 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.
| |
373 if (size > fData->size() - position) { | 379 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.
| |
374 // The stream is not large enough to satisfy this request. | 380 |
375 return false; | |
376 } | |
377 SkMemoryStream* nonConstThis = const_cast<SkMemoryStream*>(this); | 381 SkMemoryStream* nonConstThis = const_cast<SkMemoryStream*>(this); |
378 SkDEBUGCODE(const size_t bytesRead =) nonConstThis->read(buffer, size); | 382 SkDEBUGCODE(const size_t bytesRead =) nonConstThis->read(buffer, size); |
379 SkASSERT(bytesRead == size); | 383 SkASSERT(bytesRead == size); |
380 nonConstThis->fOffset = position; | 384 nonConstThis->fOffset = position; |
381 return true; | 385 return size; |
382 } | 386 } |
383 | 387 |
384 bool SkMemoryStream::isAtEnd() const { | 388 bool SkMemoryStream::isAtEnd() const { |
385 return fOffset == fData->size(); | 389 return fOffset == fData->size(); |
386 } | 390 } |
387 | 391 |
388 bool SkMemoryStream::rewind() { | 392 bool SkMemoryStream::rewind() { |
389 fOffset = 0; | 393 fOffset = 0; |
390 return true; | 394 return true; |
391 } | 395 } |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
718 fCurrentOffset = 0; | 722 fCurrentOffset = 0; |
719 } | 723 } |
720 SkASSERT(false); | 724 SkASSERT(false); |
721 return 0; | 725 return 0; |
722 } | 726 } |
723 | 727 |
724 bool isAtEnd() const override { | 728 bool isAtEnd() const override { |
725 return fOffset == fSize; | 729 return fOffset == fSize; |
726 } | 730 } |
727 | 731 |
728 bool peek(void* buff, size_t size) const override { | 732 size_t peek(void* buff, size_t size) const override { |
729 SkASSERT(buff != nullptr); | 733 SkASSERT(buff != nullptr); |
730 if (fOffset + size > fSize) { | 734 |
731 return false; | 735 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
| |
736 return 0; | |
732 } | 737 } |
738 | |
739 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
| |
740 size = SkTMin(size, fSize - fOffset); | |
741 | |
742 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
| |
733 char* buffer = static_cast<char*>(buff); | 743 char* buffer = static_cast<char*>(buff); |
734 const SkDynamicMemoryWStream::Block* current = fCurrent; | 744 const SkDynamicMemoryWStream::Block* current = fCurrent; |
735 size_t currentOffset = fCurrentOffset; | 745 size_t currentOffset = fCurrentOffset; |
736 while (size) { | 746 while (size) { |
737 SkASSERT(current); | 747 SkASSERT(current); |
738 size_t bytesFromCurrent = | 748 size_t bytesFromCurrent = |
739 SkTMin(current->written() - currentOffset, size); | 749 SkTMin(current->written() - currentOffset, size); |
740 memcpy(buffer, current->start() + currentOffset, bytesFromCurrent); | 750 memcpy(buffer, current->start() + currentOffset, bytesFromCurrent); |
741 size -= bytesFromCurrent; | 751 size -= bytesFromCurrent; |
742 buffer += bytesFromCurrent; | 752 buffer += bytesFromCurrent; |
743 current = current->fNext; | 753 current = current->fNext; |
744 currentOffset = 0; | 754 currentOffset = 0; |
745 } | 755 } |
746 return true; | 756 return totalBytesToPeek; |
747 } | 757 } |
748 | 758 |
749 bool rewind() override { | 759 bool rewind() override { |
750 fCurrent = fBlockMemory->fHead; | 760 fCurrent = fBlockMemory->fHead; |
751 fOffset = 0; | 761 fOffset = 0; |
752 fCurrentOffset = 0; | 762 fCurrentOffset = 0; |
753 return true; | 763 return true; |
754 } | 764 } |
755 | 765 |
756 SkBlockMemoryStream* duplicate() const override { | 766 SkBlockMemoryStream* duplicate() const override { |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
972 while (true) { | 982 while (true) { |
973 count = input->read(scratch, sizeof(scratch)); | 983 count = input->read(scratch, sizeof(scratch)); |
974 if (0 == count) { | 984 if (0 == count) { |
975 return true; | 985 return true; |
976 } | 986 } |
977 if (!out->write(scratch, count)) { | 987 if (!out->write(scratch, count)) { |
978 return false; | 988 return false; |
979 } | 989 } |
980 } | 990 } |
981 } | 991 } |
OLD | NEW |